Перейти к содержанию
    

проблема с RTC на AT91SAM9XE512

использую отладочные платы с 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как Вы пытались писать "туда" напрямую, если по всему даташиту нет никакого упоминания про доступ к backup регистрам?? Они клацают сами по себе в RTT. RTT можно сбросить, если у него некорректное значение счетчика, при этом обнуляется и счетчик тоже.

Изменено пользователем IgorKossak
Бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как Вы пытались писать "туда" напрямую, если по всему даташиту нет никакого упоминания про доступ к 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 и писал/читал. но все рано не записывается ничего.

Изменено пользователем Valentinus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я проследил работу 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приведите значение 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...

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

 

пойду пробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Datasheet Doc Rev.6254C: Figure 8-1 ”AT91SAM9XE128/256/512 Memory Mapping”, GPBR addresses changed. Change Request Ref.6767

Изменено пользователем IgorKossak
Бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

действительно, дело было в этом. ну чтож урок мне на будущее- не доверять, а проверять самые свежие редакции документации он Атмела

 

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

 

 

для тех кто имеет новые ревизии AT91SAM9XE и сидит на старых и непатченых ядрах можно просто вставить в начало файла rtc-at91sam9.c поправку:

#define AT91_GPBR         (0xfffffd60 - AT91_BASE_SYS)

Изменено пользователем Valentinus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...