Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SAM7s256 есть ли возможность использования програмной памяти как EEPROM?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Димон Безпарольный
SAM7s256 не имеет EEPROM внутри. Есть ли возможность использования програмной памяти как EEPROM?
aaarrr
Возможность есть. Но если речь идет об экономии $0.1, то лучше не стоит.
prottoss
Цитата(Димон Безпарольный @ Mar 9 2017, 21:41) *
SAM7s256 не имеет EEPROM внутри. Есть ли возможность использования програмной памяти как EEPROM?

Есть в нем такая возможность. Из кода, выполняющегося из FLASH не пробовал, но из кода, выполняющегося в SRAM, программировал.
Читайте раздел Embedded Flash Controller (EFC) в мануале.
Сергей Борщ
Как часто вы собираетесь менять данные? Это я к тому, что количество перезаписей у встроенного флеша на порядки меньше, чем у ЭСППЗУ. Стирается флеш тоже только странично в отличие от побайтового стирания у ЭСППЗУ. Если эти факторы не пугают - то можно. Но закладывать в изделие AT91SAM7 сегодня я бы в любом случае не стал.
Димон Безпарольный
Да ничего особенного туда не планировалось писать - дни наработки. Ну видимо без геморроя не обойдется.
jcxz
Цитата(Димон Безпарольный @ Mar 9 2017, 22:46) *
Да ничего особенного туда не планировалось писать - дни наработки. Ну видимо без геморроя не обойдется.

Осталось выяснить размер минимального записываемого элемента во FLASH этого МК.
Димон Безпарольный
Кажется 16 слов - минимум. Невыгодно это.
aaarrr
Цитата(Димон Безпарольный @ Mar 10 2017, 10:01) *
Кажется 16 слов - минимум. Невыгодно это.

32 бита. Но лучше, конечно, EEPROM sm.gif
Димон Безпарольный
Да, EEPROM лучше.
scifi
Цитата(Димон Безпарольный @ Mar 10 2017, 10:32) *
Да, EEPROM лучше.

А вот такая штука ещё более лучше.
Obam
"unlimited endurance" они, конечно, лукавят, но умеют EEPROM с 1млн. циклов. По сему, не станем цепляться… (;
И цены у микрочипа приятные…
mantech
Цитата(Димон Безпарольный @ Mar 9 2017, 23:46) *
Да ничего особенного туда не планировалось писать - дни наработки. Ну видимо без геморроя не обойдется.


Если используете RTC с батарейкой, пишите туда, на 10ю или 100ю запись скидывайте во флешку, при этом ресурс вырастает в разы. И если даже что-то произойдет с батарейкой или сотрутся данные в RTC, то потеряете только последнее обновление, если опять же, испортится счетчик во флеше, можно восстановить его из RTC.
Димон Безпарольный
Цитата(mantech @ Mar 10 2017, 12:18) *
Если используете RTC с батарейкой, пишите туда, на 10ю или 100ю запись скидывайте во флешку, при этом ресурс вырастает в разы. И если даже что-то произойдет с батарейкой или сотрутся данные в RTC, то потеряете только последнее обновление, если опять же, испортится счетчик во флеше, можно восстановить его из RTC.

Да так и сделал. На борту есть DS1307. Только флэш хотел использовать внутри SAM7s256. Но видно не судьба. В Сети ничего подходящего не нашел, а ковырять самому пока некогда. Да и криво получится - писать по 32 слова.
aaarrr
Цитата(Димон Безпарольный @ Mar 10 2017, 12:28) *
Да и криво получится - писать по 32 слова.

По одному слову, 32 бита.
Димон Безпарольный
Цитата(aaarrr @ Mar 10 2017, 12:58) *
По одному слову, 32 бита.

Это уже интересней.
jcxz
Цитата(Димон Безпарольный @ Mar 10 2017, 09:32) *
Да, EEPROM лучше.

А FRAM ещё лучше sm.gif

Цитата(Димон Безпарольный @ Mar 10 2017, 12:04) *
Это уже интересней.

Ещё интересней если немного подумать и поэкспериментировать.
Исходя из исходных данных задачи - во флешь нужно хранить инкрементирующийся счётчик.
Я так понял - этот МК имеет ECC-защиту программной флешь с размером страницы == 32 бита?
Пустая (стёртая) ячейка вероятно имеет значение == 0xFFFFFFFF. Примем это значение за значение счётчика ==0.
Тогда очевидно, что в пустую ячейку можно записать любое значение. Например 0xFFFFFFFE. Примем это значение за значение счётчика ==1.
Поверх него можно попробовать записать 0xFFFFFFFC, но, так как есть ECC, то скорей всего получим не 0xFFFFFFFC, а нечто другое. Ну да ладно - то что получим примем за значение счётчика ==2. rolleyes.gif
Далее - опять попробуем записать в эту же ячейку нечто другое. Если получим значение отличное от предыдущего, то примем это значение за следующее значение счётчика.
И так можно модифицировать эту ячейку до тех пор, пока значение ячейки не перестанет меняться.
Очевидно, что последовательность этих значений ячейки будет одинакова для всех ячеек флешь (если флешь ещё не изношена!!!). Отсюда следует, что можно определить значение счётчика, записанного в ячейку. А значит - увеличить максимальное кол-во записей во флешь на количество полученных значений счётчика. Таким образом - увеличив ресурс флешь.

Экспериментальным путём (или иным путём) можно определить последовательность записываемых значений в одну и ту же ячейку флешь, при которой значения ячейки будут меняться дольше всего (до конечного фиксированного значения).
aaarrr
Цитата(jcxz @ Mar 10 2017, 14:13) *
Я так понял - этот МК имеет ECC-защиту программной флешь с размером страницы == 32 бита?

Нет, не имеет.
scifi
Вот тут пишут, что можно даже отдельные биты переключать из 1 в 0.
В связи с этим перспективы открываются радужные. Правда, для надёжности нужно делать хитрую схему с двумя или более страницами. Опять же, неясно, будет ли страдать ресурс флеша, если программировать по одному биту за раз.
Obam
"Writing 8-bit and 16-bit data is not allowed and may lead to unpredictable data corruption."
aaarrr
Цитата(scifi @ Mar 10 2017, 14:35) *
Опять же, неясно, будет ли страдать ресурс флеша, если программировать по одному биту за раз.

С ресурсом не ясно, "потекут" ли соседние биты - тоже не ясно. Ненужный геморрой все это.

Цитата(Obam @ Mar 10 2017, 14:43) *
"Writing 8-bit and 16-bit data is not allowed and may lead to unpredictable data corruption."

Записать вместо 0xFFFFFFFF 0xFFFFFFFE, а затем 0xFFFFFFFC это никоим образом не мешает.
scifi
Цитата(aaarrr @ Mar 10 2017, 14:46) *
С ресурсом не ясно, "потекут" ли соседние биты - тоже не ясно. Ненужный геморрой все это.

Между тем, вот здесь применяют именно побитовую запись во флешь. Может быть, они что-то знают. Или это просто слабоумие и отвага. Не знаю laughing.gif
Obam
Цитата(scifi @ Mar 10 2017, 16:14) *
Между тем, вот здесь применяют именно побитовую запись во флешь. Может быть, они что-то знают. Или это просто слабоумие и отвага. Не знаю laughing.gif

Проц атмеловский!!!
jcxz
Цитата(aaarrr @ Mar 10 2017, 13:29) *
Нет, не имеет.

Если не имеет, то модифицировать можно побитно, а не по 32 бита.
Obam
Цитата(aaarrr @ Mar 10 2017, 15:46) *
С ресурсом не ясно, "потекут" ли соседние биты - тоже не ясно. Ненужный геморрой все это.


Записать вместо 0xFFFFFFFF 0xFFFFFFFE, а затем 0xFFFFFFFC это никоим образом не мешает.

Типа счётчик Джонсона, но "заполняющий ноль" это вариант
scifi
Цитата(Obam @ Mar 10 2017, 15:31) *
Проц атмеловский!!!

Флеш - он и в Африке флеш. Но гарантий никто не даст, очевидно. Я склоняюсь к тому, что это волюнтаризм автора апноты.
Obam
Цитата(scifi @ Mar 10 2017, 16:43) *
Флеш - он и в Африке флеш. Но гарантий никто не даст, очевидно. Я склоняюсь к тому, что это волюнтаризм автора апноты.

Ну да, ну да… (;
Velund
QUOTE (jcxz @ Mar 10 2017, 14:13) *
А FRAM ещё лучше sm.gif


A Serial EERAM (EEPROM-backed SRAM), который при пропадании питания на кондере пишет SRAM в EEPROM а при появлении питания автоматом восстанавливает с еепрома в SRAM - еще лучше для данного применения. Какой нибудь Microchip 47L04... 1 миллион выключений питания - а там хоть миллисекунды наработки считай. wink.gif
jcxz
Цитата(Velund @ Mar 27 2017, 16:20) *
A Serial EERAM (EEPROM-backed SRAM), который при пропадании питания на кондере пишет SRAM в EEPROM а при появлении питания автоматом восстанавливает с еепрома в SRAM - еще лучше для данного применения.

Чем лучше-то??? Тем что кондёр хороший ставить ещё нужно??
Velund
QUOTE (jcxz @ Mar 27 2017, 22:36) *
Чем лучше-то??? Тем что кондёр хороший ставить ещё нужно??


Если некоторое количество параметров постоянно изменяющихся надо "держать" постоянно, и особенно если батарея в устройстве недопустима, то такие чипы - самое беспроблемное решение. Есть програмные хитрости чтобы избежать проблем в случае если выключение прервет процесс обновления, но в общем меньше всего возможных засад просматривается в долговременном плане.
Alechek
Цитата(Velund @ Mar 29 2017, 06:22) *
Если некоторое количество параметров постоянно изменяющихся надо "держать" постоянно, и особенно если батарея в устройстве недопустима, то такие чипы - самое беспроблемное решение.

Или просто для ленивых.
Потому как 8мс@3мA для CY14*101Q немногим менее чем 6(3)мс@5.5мА для SAM7S256 (1 страница)
Baser
Цитата(scifi @ Mar 10 2017, 15:43) *
Флеш - он и в Африке флеш. Но гарантий никто не даст, очевидно. Я склоняюсь к тому, что это волюнтаризм автора апноты.

Флеш то он всегда флеш, да вот контроллер флеша может быть разный. В STM32F0 после очистки страницы в слово можно записать только два раза. Один раз поменять единицы на любое значение, и еще раз можно записать в слово ноль.
Записывать по одному нулю в бит контроллер не разрешает, запись блокируется.
Налетел на это, когда эмуляцию eeprom писал, хотя в мануале это описано sm.gif
jcxz
Цитата(Baser @ Mar 29 2017, 12:22) *
Налетел на это, когда эмуляцию eeprom писал, хотя в мануале это описано sm.gif

А если не в то же слово, а в соседнее? Или в слово в соседних 16/32/.. байтах но внутри той же страницы?
Baser
Цитата(jcxz @ Mar 29 2017, 21:16) *
А если не в то же слово, а в соседнее? Или в слово в соседних 16/32/.. байтах но внутри той же страницы?

Без проблем, можно.
Но пишется по 16 бит. И эти 16 бит можно менять только: стирание -> значение -> ноль -> стирание.
Ну, или без записи нуля.
Это Cortex-M0:
Цитата
The Flash memory interface preliminarily reads the value at the addressed main Flash memory location and checks that it has been erased. If not, the program operation is skipped and a warning is issued by the PGERR bit in FLASH_SR register. The only exception to this is when 0x0000 is programmed. In this case, the location is correctly programmed to 0x0000 and the PGERR bit is not set.
jcxz
Цитата(Baser @ Mar 29 2017, 20:26) *
Но пишется по 16 бит. И эти 16 бит можно менять только: стирание -> значение -> ноль -> стирание.

Ну это вполне обычное дело, как и в других МК. Даже неплохо, потому что в LPC, например, можно менять только 16-байтовыми сегментами. Но даже с такими ограничениями я организовывал хранение данных с перезаписью без стирания страницы rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.