Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема с RTC на AT91SAM9XE512
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Valentinus
использую отладочные платы с AT91SAM9XE512 (SK-AT91SAM9XE512-S3E и SK-AT91SAM9XE512-SIM300)

возникла проблема с использованием RTC под Linux (пробовал ядра 2.6.28 и 2.6.35.1) - не устанавливается значение в hwclock, и все тут!

пробовал и так, и сяк - не работают.

начал копать - оказалась проблема в том что не записывается значение в Battery Backup Registers, то бишь туда, где времечко хардварное должно храниться (4 General-Purpose Backup Registers).

даже пробовал "вручную" туда писать: что бы ни писал - читается "0".

помогите плз, мудрым советом. а то уже не знаю, что придумать!!! crying.gif crying.gif crying.gif
DmitryM
А как Вы пытались писать "туда" напрямую, если по всему даташиту нет никакого упоминания про доступ к backup регистрам?? Они клацают сами по себе в RTT. RTT можно сбросить, если у него некорректное значение счетчика, при этом обнуляется и счетчик тоже.
Valentinus
Цитата(DmitryM @ Jan 19 2011, 19:31) *
А как Вы пытались писать "туда" напрямую, если по всему даташиту нет никакого упоминания про доступ к backup регистрам?? Они клацают сами по себе в RTT. RTT можно сбросить, если у него некорректное значение счетчика, при этом обнуляется и счетчик тоже.

я проследил работу hwclock до вызова функции at91_rtc_readtime из rtc-at91sam9.c

из нее идет возврат по ошибке вот тут:
Код
/* read current time offset */
         offset = gpbr_readl(rtc);
         if (offset == 0)
                 return -EILSEQ;


gpbr_readl , как я понимаю, должна возвращать "0" только если RTC еще не инициализирован, при загрузке оси. Из-за этого ось при загузке сообщает "rtc-at91sam9 at91_rtt.0: rtc0: SET TIME!" и "rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock" - мол, "хардварное время не установлено, установи его!".
Инициализацию можно либо сделать в функции at91_rtc_probe или отдельной программкой - ссылки на эти оба способа я давал в первом сообщении.
После этого gpbr_readl будет возвращать не "0", а значение хардварного времени и все будет ок.

но проблема в том, что у меня gpbr_writel не может записать в регистры никакого значения - оттуда все равно читается "0".

gpbr_readl и gpbr_writel это просто макросы:
Код
#define gpbr_readl(rtc) \
         at91_sys_read(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR)
#define gpbr_writel(rtc, val) \
         at91_sys_write(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR, (val))


аналогично я и пробовал "вручную" - отобразил адрес этих регистров через mmap и писал/читал. но все рано не записывается ничего.
DmitryM
Цитата(Valentinus @ Jan 19 2011, 20:12) *
я проследил работу hwclock до вызова функции at91_rtc_readtime из rtc-at91sam9.c

gpbr_readl и gpbr_writel это просто макросы:
Код
#define gpbr_readl(rtc) \
         at91_sys_read(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR)
#define gpbr_writel(rtc, val) \
         at91_sys_write(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR, (val))


аналогично я и пробовал "вручную" - отобразил адрес этих регистров через mmap и писал/читал. но все рано не записывается ничего.


Приведите значение AT91_GPBR для интереса. Да, есть GPBR, но разное для SAM9260 и SAM9XE. У одного 0xFFFFFD50, у второго 0xFFFFFD60

http://www.mail-archive.com/u-boot@lists.d...e/msg36862.html
Valentinus
Цитата(DmitryM @ Jan 19 2011, 20:50) *
Приведите значение AT91_GPBR для интереса. Да, есть GPBR, но разное для SAM9260 и SAM9XE. У одного 0xFFFFFD50, у второго 0xFFFFFD60

http://www.mail-archive.com/u-boot@lists.d...e/msg36862.html


странно!!! я смотрю в datasheet на AT91SAM9XE512 и AT91SAM9260 - там в обоих GPBR начинается с 0xFFFFFD50 !!!!

где-то я встречал что для 9263 адрес GPBR начинается с 0xFFFFFD60, но это не мой случай!

ах вон оно что:
Цитата
The latest revision of the AT91SAM9XE has the GPBR moved up 0x10.
+ * (its not a bug, its a feature...)
+ * Maybe we can figure a dynamic way to handle this later...

вот зараза!!!!

пойду пробовать.
DmitryM
Datasheet Doc Rev.6254C: Figure 8-1 ”AT91SAM9XE128/256/512 Memory Mapping”, GPBR addresses changed. Change Request Ref.6767
Valentinus
действительно, дело было в этом. ну чтож урок мне на будущее- не доверять, а проверять самые свежие редакции документации он Атмела

ДМИТРИЙ! ОГРОМНОЕ ВАМ СПАСИБО!!!! не представляете сколько дней и нервов у меня ушло на поиск решения этой проблемы.


для тех кто имеет новые ревизии AT91SAM9XE и сидит на старых и непатченых ядрах можно просто вставить в начало файла rtc-at91sam9.c поправку:
Код
#define AT91_GPBR         (0xfffffd60 - AT91_BASE_SYS)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.