решил написать тут инструкцию на примере ds1307 (i2c интерфейс) и linux
1. Физическое подключение
к кубику 4 провода
выводы
кубик - ds1307
общий = 4
+5вольт = 8
PB19 = 5 (data)
PB18 = 6 (clk)
2. Конфигурация
[twi1_para]
twi1_used = 1
twi1_scl = port:PB18<2><default><default><default>
twi1_sda = port:PB19<2><default><default><default>
3. Проверка
ставим пакет i2c-tools
запускаем сканирование
i2cdetect -y n
где n номер шины i2c (список шин
i2cdetect -l)
программа просканирует шину и выведет список устройств в сетке
там будет либо адрес устройства либо UU - если устройство используется
если следовать данной инструкции, то устройство должно появится на шине 1
i2cdetect -y 1
root@cubieez:~# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
можно пообщаться напрямую
секунды
i2cget -y 1 0x68 0
минуты
i2cget -y 1 0x68 1
часы
i2cget -y 1 0x68 2
смещение есть в даташите на ds1307
стоит иметь ввиду что при первом подключении к питанию ds1307 встает на тормоз (т.е не считает), необходимо ее активировать
"бит активации" это старший бит секунд, его нужно сбросить
i2cset -y 0 0x68 0x00 0x00
в принципе это делается драйвером часов при сохранении даты в rtc
4. Конфигурация и загрузка драйвера
Перед этим лучше проверить - может загружены другие драйвера RTC например встроенный в SOC
например так
ls /dev/rtc*
или тут
ls /sys/class/rtc
просто обычно по умолчанию linux использует /dev/rtc0, а это первый загруженный драйвер
далее активация
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
modprobe rtc-ds1307
модуль rtc-ds1307 поддерживет следующие чипы
"ds1307" "ds1337" "ds1338" "ds1339" "ds1388" "ds1340" "ds3231" "m41t00" "mcp7941x" "pt7c4338" "rx8025"
соответственно нужно менять строку echo ds1307... подставляя нужный идентификатор
далее "человеческие" команды работы с часами
hwclock -r чтение и вывод на экран
hwclock -s чтение и установка системного времени
hwclock -w запись в rtc системного времени
по умолчанию hwclock читает /dev/rtc0
если нужны другие часы то задаем через обцию -f
hwclock -r -f /dev/rtc1
ЗЫ: пробовал я использовать встроенную RTC в А20, но чтото у меня получилась точность хода ужасная, да и питание нужно 1.3в