ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1063015 Топик полностью
fk0, легенда (21.12.2020 13:13, просмотров: 382) ответил VLLV на Есть реальные цифры по работающем по биглупу дивайсом: ядро потребляет десяток мА на высокой скорости (STM32 L4), сохранение данных происходит сотня мс, в это время питание уже пропало, нужно удержаться ненамного больше 3 мА отдаваемых CR2032, ну а полный сон до 2 мкА.
Если ты хочешь сказать, мол снижение тактовой поможет, то есть и контраргументы: снизив тактовую частоту ты затратишь на вычисления, очевидно, большее время. То на то и выйдет. А если у тебя где-то циклы с ожиданием, то нужно работать по прерываниям и останавливать ядро (SLEEP/HALT) когда ничего не делаешь. Хотя обычно такой параметр как ма/Мгц немного падает с снижением частоты. Но не кардинально. 

Я согласен, что может быть имеет смысл перейти на внутренний генератор (вместо кварца) и выключить PLL. Но снижать частоту кардинально (до 32кГц) смысла нет. Другое дело, запись, особенно стирание, флешки -- требует тока. Стереть возможно имеет смысл заранее (иметь минимум 2 страницы/копии -- одна стирается/пишется, в другой предыдущие данные).


Но стоит ли оно всё того? Каждый раз когда хотят на конденсаторе успеть чего-то дописать я думаю, что делают что-то неправильно: отключение питания это не единственная причина, почему контроллер мог перезапуститься. А как быть в случае:


1) программных сбоев (на их отсутствие полагаются только радиолюбители...)

2) электромагнитных помех, статического электриества, ионизирующего излучения и т.п.

3) сбоев в работе того, чем там контроллер управляет с возможными провалами питания и т.п.


Во всех этих случаях можно получить в flash-памяти какие-то устаревшие данные. И хуже того, оно может случиться В МОМЕНТ ЗАПИСИ. Почему я говорю, что нужно минимум две копии. Но даже так, это получается какое-то неполноценное решение. Которое иногда будет давать (допустим, какой-то счётчик) заниженный результат. Иногда сильно заниженный, если прибор годами не выключается. Может быть лучше писать данные в flash периодически?


Что бы я предложил: NOR-flash. Которую стирать можно страницами, а писать _побайтово_. И соответственно стирать каждый раз страницу и понемногу её дописывать новым блоком данных. Где блок данных состоит из серийного номера блока, контрольного кода (CRC) и собственно значения счётчика или других данных. И писать по-кругу. Дошёл до конца памяти -- начал с начала. Писать, например, раз в секунду. И никаких действий в случае отключения питания не предпринимать вообще, даже не задумываться об этом.


Единственный вопрос, как найти последнюю запись и откуда продолжать после перезапуска. В принципе она ищется двоичным поиском за порядка log2(N) операций (где N -- общее количество записей умещающихся в памяти). Немного не быстро, но не фатально. И если сбой произошёл в момент записи последней записи и у ней не верная CRC, то всегда можно откатиться на предпоследнюю и так далее.


Ещё нужно озаботиться сроком жизни микросхемы flash-памяти. Несложно посчитать сколько записей помещается на страницу, количество используемых страниц и сколько стираний позволяется (порядка 100тыс.) Соответственно выбрать такой объём памяти (количество страниц) которого хватит на срок жизни прибора (5-10 лет). Запланированное устаревание...

[ZX]