LPC17xx: проверьте, работает ли RTC - PullRequest
2 голосов
/ 14 августа 2011

Я использую микроконтроллеры семейства NXP LPC17xx (LPC1759 и LPC1768).

Как определить, работает ли RTC наверняка?

Я делаю тест на

LPC_RTC->CCR & RTC_CCR_CLKEN

но это не так уж и надежно.Я видел значения в 3197 году или около того при включении устройства.

Как узнать, работает ли RTC и не повреждено ли его значение?


РЕДАКТИРОВАТЬ:

В итоге я добавил простую проверку работоспособности в значениях RTC:

bool        DateTime::validate( const RTC_TIME_Type &time_info )
{
       if ( time_info.YEAR > 2100
               || time_info.DOY > 366
               || time_info.MONTH > 12
               || time_info.DOM > 31
               || time_info.HOUR > 23
               || time_info.MIN > 59
               || time_info.SEC > 59 )
               return        false;

       return        true;
}

Он запускается во время моего POST, как предложено ниже.

Ответы [ 3 ]

3 голосов
/ 15 августа 2011

Я боролся с RTC на дедушке этого чипа (LPC2148) около 5 лет назад.Если вы посмотрите на группу Yahoo LPC2000 (она также охватывает микросхемы LPC1000), вы увидите RTC, и его проблемы часто возникают.

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

Итак, я помню, что во время загрузки я делал следующее:

(1) Включить периферийное устройство RTC

(2) Считать ВСЕ регистры RTC.В прошивке, иметь «вне границ» минимальные и максимальные значения для каждого поля (например, год должен быть не менее 2005 и не более 2030)

(3) Если какое-либо значение выходит за пределы диапазона, дата сброса& время до некоторого жестко заданного значения (например, 1 января 2005 г.) (продукт позволит пользователю настроить время / дату после загрузки)

(4) сделать снимок регистров;подождите по крайней мере одну секунду (используйте периферийное устройство таймера для измерения времени), затем убедитесь, что значение изменилось.Я мог зайти так далеко во время загрузки, чтобы установить значения так, чтобы 1-секундный тик вызывал / должен был переворачивать все (вероятно, за 1 секунду до полуночи, 31 декабря), гарантировал, что все меняется, и затем записывал обратноИсходное значение + 1 секунда.(Вы хотели бы сделать это правильно при изменении значения, чтобы избежать скольжения секунд)

Я постараюсь выкопать код и посмотреть, было ли что-то еще.Я просто вспоминаю, наконец, заключив, что мне пришлось запустить эту чертову штуку и посмотреть, как она работает, прежде чем пройти POST для этого периферийного устройства.

(я как-то упомянул об этом попутно, но просто повторить ... еслиВаши значения кажутся испорченными при включении, убедитесь, что схема резервного питания от батареи надежна - даже достаточно простой схемы с парой диодов. Может быть, часы работают, когда продукт работает, а когда - питаниеудаляется, его мозг ломается.)

2 голосов
/ 14 августа 2011

Также сталкивается с темпераментными RTC здесь ...

Я не думаю, что действительно надежный тест возможен, вы можете сохранить последнее записанное время где-нибудь в энергонезависимой памяти и проверить, что часыне перенесено на предыдущую дату, и вы также можете проверить, что разница между двумя проверками не слишком велика.Это будет примерно 3000 лет, но вы не можете сократить проверенный промежуток времени, скажем, до 1 месяца - вы хотите, чтобы вещь проснулась, даже если она была отложена, скажем, на год.

Есть ли у вас возможностьпроконсультироваться с источником времени при запуске?Например, ntp-сервер или другое устройство, с которым разговаривает ваш контроллер, которое можно считать синхронизированным с надежным источником времени?

0 голосов
/ 21 сентября 2012

Вы можете направить часы RTC на внешний вывод и просмотреть их на осциллографе или логическом анализаторе.

IIRC Я сделал именно это для LPC1766 / 1768 (у меня две одинаковые платы, заполненные разными процессорами).

...