| Глава 3. ОС Линукс - Linux OS
3.35. Как использовать модуль часов реального времени Orange Pi DS1307 RTC (How to use the Orange Pi DS1307 RTC clock module) 1) Модуль часов реального времени Orange Pi DS1307 RTC показан на рисунке ниже.
Он использует интерфейс I2C для связи с платой разработки, адрес устройства I2C = 0x68.
Модуль RTC по умолчанию не оснащен батареей, её установка требуется перед использованием.
2) Подключите модуль RTC к 26-контактному выводу платы разработки по схеме
(указаны контакты 26-контактного разъема)
5В - 2
GND - 6
SDA - 3
SCL - 5
3) После подключения модуля RTC используйте команду i2cdetect, чтобы проверить,
можно ли определить адрес устройства модуля RTC.
root@orangepi:~# apt update
root@orangepi:~# apt install i2c-tools
root@orangepi:~# i2cdetect -y 3
4) Для микросхемы ds1307, используемой модулем RTC, сначала убедитесь, что включена конфигурация ядра RTC_DRV_DS1307
root@orangepi:~# zcat /proc/config.gz | grep "RTC_DRV_DS1307"
CONFIG_RTC_DRV_DS1307=y
5) Подтвердите конфигурацию ядра OK порт, вам также необходимо добавить конфигурацию
модуля rtc-ds1307 в папке dts.
Сценарий с именем orangepi-add-overlay предустановлен в последней версии системы Linux.
С помощью этого скрипта мы можем использовать наложение DT для динамического добавления некоторых функций, которых нет в dts.
Создайте dts-файл для модуля rtc-ds1307, содержимое файла
root@orangepi:~# cat i2c-ds1307.dts
/dts-v1/;
/plugin/;
/
{
compatible = "allwinner,h616", "arm,sun50iw9p1";
fragment@1
{target = <&twi3>;
__overlay__
{ #address-cells = <1>;
#size-cells = <0>;
ds1307@68
{ compatible = "dallas,ds1307";
reg = <0x68>;
status = "okay";
};
};
};
};
- a) Затем используйте orangepi-add-overlay для компиляции i2c-ds1307.dts в i2c-ds1307.dtbo,
и установите соответствующие переменные запуска
root@orangepi:~# orangepi-add-overlay i2c-ds1307.dts
Compiling the overlay
Copying the compiled overlay file to /boot/overlay-user/
Reboot is required to apply the changes
- b) i2c-ds1307.dtbo будет скопирован в /boot/overlay-user после запуска
orangepi-add-overlay. Для проверки, есть ли i2c-ds1307.dtbo в /boot/overlay-user
root@orangepi:~# cd /boot/overlay-user/
root@orangepi:/boot/overlay-user# ls
i2c-ds1307.dtbo
- c) orangepi-add-overlay также добавит переменную user_overlays в /boot/orangepiEnv
и установит значение i2c-ssd1307
root@orangepi:~# cat /boot/orangepiEnv.txt | grep "user"
user_overlays=i2c-ds1307
- d) Затем перезапустите систему Linux, при загрузке вы можете увидеть вывод, связанный с DToverlay,
в журнале u-boot.
U-boot loaded from SD
Boot script loaded from mmc
214 bytes read in 8 ms (25.4 KiB/s)
645 bytes read in 13 ms (47.9 KiB/s)
Applying user provided DT overlay i2c-ds1307.dtbo
8482593 bytes read in 369 ms (21.9 MiB/s)
23638088 bytes read in 1005 ms (22.4 MiB/s)
## Booting kernel from Legacy Image at 41000000 ...
6) После перезапуска вы можете увидеть информацию о загрузке модуля ds1307 из вывода журнала dmesg,
а узел устройства, соответствующий ds1307, будет rtc0
root@orangepi:~# dmesg | grep "rtc"
[ 2.131445] rtc-ds1307 3-0068: rtc core: registered ds1307 as rtc0
[ 2.131470] rtc-ds1307 3-0068: 56 bytes nvram
[ 2.132256] sunxi-rtc rtc: rtc core: registered sunxi-rtc as rtc1
[ 2.132329] sunxi-rtc rtc: RTC enabled
[ 2.307120] rtc-ds1307 3-0068: setting system clock to 2000-00-00 06:33:46 UTC
(1607063626)
7) Когда система Linux запущена, если плата разработки подключена к сети,
система Linux автоматически синхронизирует системное время с правильным временем через сеть.
Время по умолчанию в системе Linux - UTC.
В Китае нужно изменить часовой пояс на Азию/Шанхай и использовать данные.
Время, полученное командой, правильное, метод следующий
8) Если текущее время системы неверно, сначала подключитесь к сети, а затем
затем используйте следующую команду для синхронизации времени.
Причина, по которой системное время выставлено правильно:
здесь нужно подготовиться к синхронизации времени модуля RTC позже.
root@orangepi:~# apt -y update
root@orangepi:~# apt install ntpdate
root@orangepi:~# ntpdate 0.cn.pool.ntp.org
9) Команда для просмотра текущего времени модуля RTC
root@orangepi:~# hwclock -r
10) Время, считываемое модулем RTC в первый раз, определенно неверно. Вы можете использовать
следующие команды для синхронизации текущего времени системы с модулем RTC.
Перед синхронизацией необходимо убедиться, что текущее время в системе правильное.
root@orangepi:~# date #First make sure the current system time is correct
root@orangepi:~# hwclock -w #Then write the system time into the RTC module
root@orangepi:~# hwclock -r #Finally read the time of the RTC module to
confirm that the setting is correct
11) На этом этапе вы можете отключить все сетевые подключения платы, подождите несколько минут,
перезапустите систему, а затем проверьте системное время, и вы обнаружите, что системное время правильное,
даже если нет сети.
|
|