Valentinus 1 19 января, 2011 Опубликовано 19 января, 2011 · Жалоба использую отладочные платы с 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: :crying: :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 19 января, 2011 Опубликовано 19 января, 2011 (изменено) · Жалоба А как Вы пытались писать "туда" напрямую, если по всему даташиту нет никакого упоминания про доступ к backup регистрам?? Они клацают сами по себе в RTT. RTT можно сбросить, если у него некорректное значение счетчика, при этом обнуляется и счетчик тоже. Изменено 19 января, 2011 пользователем IgorKossak Бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Valentinus 1 19 января, 2011 Опубликовано 19 января, 2011 (изменено) · Жалоба А как Вы пытались писать "туда" напрямую, если по всему даташиту нет никакого упоминания про доступ к 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 и писал/читал. но все рано не записывается ничего. Изменено 19 января, 2011 пользователем Valentinus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 19 января, 2011 Опубликовано 19 января, 2011 · Жалоба я проследил работу 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/[email protected]/msg36862.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Valentinus 1 20 января, 2011 Опубликовано 20 января, 2011 · Жалоба Приведите значение AT91_GPBR для интереса. Да, есть GPBR, но разное для SAM9260 и SAM9XE. У одного 0xFFFFFD50, у второго 0xFFFFFD60 http://www.mail-archive.com/[email protected]/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 0 20 января, 2011 Опубликовано 20 января, 2011 (изменено) · Жалоба Datasheet Doc Rev.6254C: Figure 8-1 ”AT91SAM9XE128/256/512 Memory Mapping”, GPBR addresses changed. Change Request Ref.6767 Изменено 20 января, 2011 пользователем IgorKossak Бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Valentinus 1 20 января, 2011 Опубликовано 20 января, 2011 (изменено) · Жалоба действительно, дело было в этом. ну чтож урок мне на будущее- не доверять, а проверять самые свежие редакции документации он Атмела ДМИТРИЙ! ОГРОМНОЕ ВАМ СПАСИБО!!!! не представляете сколько дней и нервов у меня ушло на поиск решения этой проблемы. для тех кто имеет новые ревизии AT91SAM9XE и сидит на старых и непатченых ядрах можно просто вставить в начало файла rtc-at91sam9.c поправку: #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS) Изменено 20 января, 2011 пользователем Valentinus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться