|
SAM7s256 есть ли возможность использования програмной памяти как EEPROM?, Или придется вешать внешнюю? |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 33)
|
Mar 10 2017, 09:28
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(mantech @ Mar 10 2017, 12:18)  Если используете RTC с батарейкой, пишите туда, на 10ю или 100ю запись скидывайте во флешку, при этом ресурс вырастает в разы. И если даже что-то произойдет с батарейкой или сотрутся данные в RTC, то потеряете только последнее обновление, если опять же, испортится счетчик во флеше, можно восстановить его из RTC. Да так и сделал. На борту есть DS1307. Только флэш хотел использовать внутри SAM7s256. Но видно не судьба. В Сети ничего подходящего не нашел, а ковырять самому пока некогда. Да и криво получится - писать по 32 слова.
|
|
|
|
|
Mar 10 2017, 11:13
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Димон Безпарольный @ Mar 10 2017, 09:32)  Да, EEPROM лучше. А FRAM ещё лучше  Цитата(Димон Безпарольный @ Mar 10 2017, 12:04)  Это уже интересней. Ещё интересней если немного подумать и поэкспериментировать. Исходя из исходных данных задачи - во флешь нужно хранить инкрементирующийся счётчик. Я так понял - этот МК имеет ECC-защиту программной флешь с размером страницы == 32 бита? Пустая (стёртая) ячейка вероятно имеет значение == 0xFFFFFFFF. Примем это значение за значение счётчика ==0. Тогда очевидно, что в пустую ячейку можно записать любое значение. Например 0xFFFFFFFE. Примем это значение за значение счётчика ==1. Поверх него можно попробовать записать 0xFFFFFFFC, но, так как есть ECC, то скорей всего получим не 0xFFFFFFFC, а нечто другое. Ну да ладно - то что получим примем за значение счётчика ==2. Далее - опять попробуем записать в эту же ячейку нечто другое. Если получим значение отличное от предыдущего, то примем это значение за следующее значение счётчика. И так можно модифицировать эту ячейку до тех пор, пока значение ячейки не перестанет меняться. Очевидно, что последовательность этих значений ячейки будет одинакова для всех ячеек флешь ( если флешь ещё не изношена!!!). Отсюда следует, что можно определить значение счётчика, записанного в ячейку. А значит - увеличить максимальное кол-во записей во флешь на количество полученных значений счётчика. Таким образом - увеличив ресурс флешь. Экспериментальным путём (или иным путём) можно определить последовательность записываемых значений в одну и ту же ячейку флешь, при которой значения ячейки будут меняться дольше всего (до конечного фиксированного значения).
|
|
|
|
|
Mar 10 2017, 11:46
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(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 это никоим образом не мешает.
|
|
|
|
|
Mar 29 2017, 10:22
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(scifi @ Mar 10 2017, 15:43)  Флеш - он и в Африке флеш. Но гарантий никто не даст, очевидно. Я склоняюсь к тому, что это волюнтаризм автора апноты. Флеш то он всегда флеш, да вот контроллер флеша может быть разный. В STM32F0 после очистки страницы в слово можно записать только два раза. Один раз поменять единицы на любое значение, и еще раз можно записать в слово ноль. Записывать по одному нулю в бит контроллер не разрешает, запись блокируется. Налетел на это, когда эмуляцию eeprom писал, хотя в мануале это описано
|
|
|
|
|
Mar 29 2017, 18:26
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(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.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|