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

TimeStamp в RTC STM32F0

Есть устройство на STM32F072. Домен RTC запитывается от мелкой батарейки.

Нужно при пропадании основного питания запоминать время выключения. А обработка этого времени производится уже после включения. Поскольку в RTC есть встроенные регистры TimeStamp, думал применить их для хранения времени выключения.

 

Читаю документацию, и не могу найти, можно ли активировать запись времени в TimeStamp программно.

Все натыкаюсь на аппаратные события по ножкам МК

Можно это сделать программно?

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


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

Чисто программно, похоже, нет. А вот поиграться с PullUp\PullDown на PC13, как входе RTC_TS, программно-аппаратный вариант, я думаю даст желаемое.

Единственно: п 8.3.14 "The PC13/PC14/PC15 GPIO functionality is lost when the core supply domain is powered off (when the device enters Standby mode). In this case, if their GPIO configuration is not bypassed by the RTC configuration, these pins are set in an analog input mode."

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


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

Читаю документацию, и не могу найти, можно ли активировать запись времени в TimeStamp программно.

Все натыкаюсь на аппаратные события по ножкам МК

Можно это сделать программно?

"If a time-stamp event occurs immediately after the TSF bit is supposed to be cleared, then both TSF and TSOVF bits are set."

Попробовать выставить вручную TSF and TSOVF, а потом TSF очистить.

 

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


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

"If a time-stamp event occurs immediately after the TSF bit is supposed to be cleared, then both TSF and TSOVF bits are set."

Попробовать выставить вручную TSF and TSOVF, а потом TSF очистить.

Как-то тут не вижу никакой связи с генерацией события time-stamp. Тем более, что оба бита TSF and TSOVF - аппаратно взводимые и выставить вручную их не удастся.

 

поиграться с PullUp\PullDown на PC13, как входе RTC_TS, программно-аппаратный вариант, я думаю даст желаемое.

Я тоже пока других вариантов не увидел. Ножка PC13 свободная, нужно попробовать.

 

А то, что "PC13 GPIO functionality is lost when the core supply domain is powered off", так не вижу проблем.

Я же в sleep не ухожу, у меня основное питание совсем снимается, до нуля.

И мне сгенерировать time-stamp event нужно в прерывании по снижению питания.

Я могу и просто прочитать часы и сохранить их в backup-регистрах, да ST пожлобилась и их в этом МК только 5 штук.

А вдруг они для чего другого понадобятся - а спец. регистры time-stamp при этом будут простаивать...

Не классненько, как-то :)

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


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

Добрался до проверки на реальном железе.

Тезис "поиграться с PullUp\PullDown на PC13, как входе RTC_TS" не проходит.

Как только взводится бит TSE в RTC_CR, управление PC13 забирается модулем RTC и ножка ни на какие действия по конфигурации её как GPIO, не реагирует:

For the additional functions like RTC, WKUPx and oscillators, configure the required function in the related RTC, PWR and RCC registers. These functions have priority over the configuration in the standard GPIO registers.

Зато обнаружил примечание к биту установки фронта записи TimeStamp: TSEDGE в RTC_CR

TSE must be reset when TSEDGE is changed to avoid unwanted TSF setting.

И действительно, дерганье TSEDGE туда-сюда при включенном TSE, приводит к срабатыванию записи TimeStramp и установке флага TSF в RTC_ISR. Но нигде в документации не видел указания, что так можно делать, так что только на свой страх и риск.

 

Однако при отладке обнаружил, что разработчики из STM пожлобились на сохранение в регистрах TimeStamp значения года.

Место есть, а года НЕТ! Экономия на спичках :01:

Так что TimeStamp вычеркиваем, все равно значение года нужно читать, проще все прочитать и сохранить.

 

===========================================================

 

Еще один вопрос возник по RTC модулю.

У меня к входу VBAT подключена батарейка CR2032 на 3V,

а основное питание VDD = 3.0V отключается до нуля, и при этом идут только часы на внешнем часовом кварце от батарейки.

Часы стабильно идут при передергивании питания в любых вариантах,

но от батарейки все время потребляется ток, в том числе и при наличии главного питания VDD.

Как это возможно?

 

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


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

но от батарейки все время потребляется ток, в том числе и при наличии главного питания VDD.

Как это возможно?

 

А что тут такого? Батарейка питает домен часов, часы же работают и при подключенном питании, ставьте диод от основного питания и потребления не будет...

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


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

А что тут такого? Батарейка питает домен часов, часы же работают и при подключенном питании, ставьте диод от основного питания и потребления не будет...

Бррр... Какая-то профанация идеи. Там же внутренний ключ-переключатель питания RTC домена от VDD или VBAT по уровню POR/PDR на линии VDD. И ножка VBAT выделенная. Это должно позволять нормально работать при любой комбинации рабочих напряжений на VDD и VBAT, как ниже, так и выше.

 

И это, кстати, работает. VDD = 3.0V Подавал напряжение на VBAT с внешнего источника от 2.0V до 3.5V Ток при этом пропорционально меняется от 21 мкА до 36 мкА из-за включенного внутреннего делителя 2х50 кОм для измерения напряжения батареи АЦП. Т.е. домен питается от VBAT, хотя VDD присутствует. Что совсем удивительно, можно отключать батарейку на ходу, тока ессно нет, осциллограф показывает на VBAT "висячку" подтянутую к земле. Часы при этом стабильно идут, не сбиваются, не спешат и не отстают. Подключаешь батарею назад - опять потребляет свои мкА. А снимаешь VDD - паспортное потребление 1.5 мкА.

 

Такое впечатление, что встроенный ключ подключает домен к VDD только когда пропадает VBAT,

а когда есть и то и то, подключен к VBAT. :01:

 

Сегодня уже давно роюсь в Инете, пока прямых сообщений на эту тему не нашел.

Нашел сообщение на форуме РадиоКот о такой же проблеме, но без ответа на вопрос.

 

И вот картинка из презентации, где прямо говорится, что при наличии VDD ток от VBAT не потребляется.

 

post-27881-1492181686_thumb.png

 

Может быть там еще какие конфигурационные биты где есть???

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


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

А вы делитель, что с батарейки на АЦП идет, отключили?

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


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

А вы делитель, что с батарейки на АЦП идет, отключили?

Про делитель я выше написал. Проблема не в делителе, он - просто индикатор того, что происходит в МК.

Проблема в том, что внутренний ключ не переключает питание RTC домена с VBAT на VDD когда VDD присутствует.

Это идет вразрез с заявлениями, которые присутствуют в презентациях с официальных семинаров по STM32, картинка из которого приведена выше. Да и противоречит логике.

 

Проверил еще на одной своей новой плате, которую раньше не прошивал, и на отладке NUCLEO-F072RB.

На моих платах STM32F072RB ревизии "1", на отладке постарше - "Y"

Поведение везде одинаковое, так что проблемы "железа" вычеркиваются.

Надо копать в моей программе.

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


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

Про включенный делитель я выше прочитал. А где читать про выключенный делитель?

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


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

Есть устройство на STM32F072. Домен RTC запитывается от мелкой батарейки.

Нужно при пропадании основного питания запоминать время выключения. А обработка этого времени производится уже после включения. Поскольку в RTC есть встроенные регистры TimeStamp, думал применить их для хранения времени выключения.

Читаю документацию, и не могу найти, можно ли активировать запись времени в TimeStamp программно.

Весь тред читать лень - так что заранее извиняюсь, если уже предлагали это простое решение:

В этом RTC-домене наверняка есть ячейки обычного ОЗУ. Может просто - при работе ПО периодически писать текущее время в них и после включения там будет время непосредственно перед выключением? Мы так у себя во всех устройствах делаем, только пишем во FRAM.

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


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

. . .

Все натыкаюсь на аппаратные события по ножкам МК

Можно это сделать программно?

Не идите против природы.

Соедините 2 ноги МК, одна из которых - вход прерывания, запись копии TimeStamp.

Вторая - выход - программный сигнал "все пропало" :)

 

 

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


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

Не идите против природы.

Соедините 2 ноги МК, одна из которых - вход прерывания, запись копии TimeStamp.

Вторая - выход - программный сигнал "все пропало"

Так еще хуже, еще одна ножка МК бездарно пропадет.

Я этот вопрос уже выше решил. Дерганье бита установки фронта срабатывания всегда приводит к записи копии TimeStamp.

Но я от TimeStamp все равно отказался, см. выше, + все равно при его включении нога PC13 активна и её нужно подтягивать снаружи.

 

Весь тред читать лень - так что заранее извиняюсь, если уже предлагали это простое решение:

В этом RTC-домене наверняка есть ячейки обычного ОЗУ. Может просто - при работе ПО периодически писать текущее время в них и после включения там будет время непосредственно перед выключением? Мы так у себя во всех устройствах делаем, только пишем во FRAM.

Хорошая мысль, наверно, так и сделаю. + у меня время храниться в виде почти юниксовского таймстампа в 32 битах, так еще буду перепаковывать BCD в бинарный таймстамп и сэкономлю слово в регистрах бэкапа. В момент снятия питания времени мало паковать, а так - без проблем.

 

Про включенный делитель я выше прочитал. А где читать про выключенный делитель?

Ответил вам на прошлый вас совет, и только потом все понял :)

Мне втемяшилось, что делитель батарейки находится в домене RTC после ключа питания.

А ведь это не так, иначе мы бы при наличии VDD измеряли бы напряжение VDD, а не VBAT.

А делитель находится непосредственно на входе VBAT и к домену RTC отношения не имеет.

 

Так что переписал функции АЦП, сделал подключение делителя на 10 мс раз в секунду - и все стало на свои места.

Часы идут отлично.

Потребление от VBAT при наличии VDD - 0.3 мкА,

при снятии VDD и питании от VBAT - 1.5 мкА.

Все "как доктор в даташите прописал".

 

Всем спасибо за советы!

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


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

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

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

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

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

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

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

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

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

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