1 Отредактировано RedCat (2017-10-18 19:16:41)

Тема: eNVM Write Only

Суть проста при каждом выключении необходимо скидывать во flash 8 байт, каждый раз стирать для этого всю страницу как то расточительно. Да и времени для стирания требуется до 40мс, запись без стирания обычно составляет до 40мкс.

В документе SmartFusion2 Microcontroller Subsystem User’s Guide Revision 3 упоминаются команды eNVM Контроллера: WronlyADS, WronlyAD, WronlyDa, WronlyStart, PageErase. В документе UG0331 SmartFusion2 Microcontroller Subsystem User Guide Revision 12  такие команды уже не упоминаются.  В Errata по поводу этих команд тоже ни чего нет.
Стереть  flash как описано в SmartFusion2 and IGLOO2 Embedded Nonvolatile Memory (eNVM) Simulation тоже не выходит :(

После стирания flash обычно заполняется единицами, после записи байта, слова, двойного слова в некоторых контроллерах эту область памяти можно только "обнулить" целиком (8,16,32 бита), некоторые допускают обнулить любые из оставшихся едниц.

2

Re: eNVM Write Only

а почему вы не хотите использовать SPI Flash?

3

Re: eNVM Write Only

Вопрос собственно не по отладке SF2-Junior-KIT. На m2s050t-1fg484m собрано своё устройство.
Программа МК помещается во внутреннюю Flash, остатка неиспользуемых страниц вполне бы хватило для эмуляции EEPROM на 8 байт с количеством циклов перезаписи 0.5 млн. Надобности в использовать внешней Flash\EEPROM\Fram не возникло.

4

Re: eNVM Write Only

не уверен что правильно понял вопрос. Вы пробовали использовать функцию NVM_write?
https://www.microsemi.com/document-port … ation-note

5

Re: eNVM Write Only

Пробовал. функция NVM_write() использует команду eNVM Контроллера ProgramADS. Работает это всё примерно следующим образом:
1. Данные которые хотим записать помещаются в Write Data Bufer размером 128 байт.
2. Данные которые на надо перезаписывать также копируются в Write Data Bufer.
3. Подаётся команда eNVM Контроллеру ProgramADS, которая копирует данные из Write Data Bufer в Assembly Buffer, стирает страницу памяти целиком, затем происходит запись по 64-бита.

то есть даже если происходит запись по адресам в которые не происходила запись после стирания страницы, страница всё равно стирается.

6

Re: eNVM Write Only

RedCat, как полагается вместо ответа на вопрос попытаюсь убедить не делать так никогда)))
Прежде всего вместо spi предложу i2c - 2 сигнала против 3-х.
Что касается надобности, она проявляется не только в количестве памяти, но и в защищенности от сбоев.
Сразу скажу, в свое время использовал запись во внутреннюю память контроллера для хранения калибровочных констант. Это гораздо более щадящий вариант, чем сохранять текущее состояние при каждом выключении. Приборы выпускались серийно и вроде как проблем не было ни у пользователей ни при наладке, но я и от этой идеи отказался.
Причины:
1. Первый довод аналогичный)) - нет необходимости в использовании внутренней flash для подобных целей, внешняя стоит копейки, а неиспользованных выводов обычно остается больше 2-х (а если не хватит просто взять более ногастый корпус)
2. Свидетелем одного случая когда циклы перезаписи в одной из ячеек памяти микроконтроллера заканчивались значительно раньше чем указанные десятки тысяч мне все же довелось побывать. Замена отдельной микросхемы памяти несопоставимо более простое и дешевое мероприятие, я считаю.
3. В случае, если что-то пойдет не так (а само по себе снятие питания во время активной работы программы это уже "не так"), то во внешней флешке в худшем случае повредятся старые данные, а новые не запишутся. В контроллере может слететь вся прошивка.
4. Во внутренней памяти всегда присутствует кусок кода выполняющий последовательность действий, приводящих к "повреждению" определенных областей этой же памяти. При драматическом стечении обстоятельств он может запуститься с рандомными параметрами.

7 Отредактировано RedCat (2017-10-25 17:11:08)

Re: eNVM Write Only

Учитывая особенности работы eNVM Контроллера в SM2 я бы заложил внешнюю память. Но каюсь, при беглом ознакомлении с документаций не обратил должного внимания на набор команд.
    Если честно складывается впечатление, что закладывали в его работу немного больший функционал, просто что-то не так пошло в реализации, и печально, что в Errata об этом не упоминается. Во всяком случае дайте возможность использовать, а разработчик сам решит надо ему или нет.
    Бывают разные проекты, где то можно поставить внешнюю память, где-то это не целесообразно. Я во всех проектах использую запись во внутреннюю память, всё прекрасно работает, после исправления всех багов :)
    Я тестил память на немного подгорелых микросхемах, обе выдержали 10000 циклов перезаписи половины внутренней флешки  при обдуве феном 100° правда запись и стирание были непрерывными, а сохранность данных проверял не через 10, лет а через неделю.

8 Отредактировано prya (2017-10-25 18:02:08)

Re: eNVM Write Only

Ну это хозяин-барин.
Лично у меня тоже проблем не возникало, но как я сказал при мне возникла один раз в приборе другого человека. И я вижу потенциальную возможность их возникновения, а оно мне надо в самый неподходящий момент? Тем более когда заведомое решение на поверхности.
Кстати ещё один довод вспомнил все эти перезаписи внутренней памяти делаются крайне специфическими методами, с ними всегда много возни и отлавливания багов (иногда годами в процессе поддержки) и они жутко зависят от платформы - кто во что горазд. А после смены 4 архитектур я уже стараюсь чтобы платформозависимые вещи лежали в отдельной кучке и их было как можно меньше.

9

Re: eNVM Write Only

Вот что ответила поддержка Microsemi:
    WronlyADS, WronlyAD, WronlyDa, WronlyStart, Erase commands are super user commands and should not be used by the user. They should be used only by the factory. User doesn’t have access to these commands.
    If you want to erase envm, use FlashPro for erasing. The Erase section in “SmartFusion2 and IGLOO2 Embedded Nonvolatile Memory (eNVM) Simulation" is a bug and will be removed from newer versions of the doc.