среда, 12 февраля 2014 г.

CubieBook - Подключение внешней RTC (часов реального времени)

решил написать тут инструкцию на примере 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в

Комментариев нет:

Отправить комментарий