ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
19 апреля
1509985 Топик полностью
Nikolay_Po (04.04.2025 10:39, просмотров: 201) ответил Nikolay_Po на Про FLASH в CH32V203. Вкратце: похоже, что при частичной записи страницы, автоматически стирается и перезаписывается вся страница 256 байт. Подробности ниже.
Для истории, из канала RISC-V Телегам 

https://t.me/riscv_mcu/149275

Моё сообщение:

По даннмы моих экспериментов и из жизненного опыта, смею полагать, что запись по 16-битным словам, в CH32V203 в частности, реализована именно перезаписью страницы 256 байт с её стиранием. И у меня есть доводы:

1. Режим быстрой записи 256 байт является рекомендуемым. А режим записи по 16 байт - является режимом совместимости. Между строк читаю: "Режим записи полуслов не рекомендуется использовать, а сделан он для упрощения портирования программ, требующих частичной записи страницы".

2. В электрических параметрах, вразделе "Характеристики памяти", отсутствуют данные о времени программирования полуслова. Отсюда можно сделать вывод - полуслова не программируются отдельно.

3. Если бы размер страницы FLASH был 2 байта, для записи такой страницы были бы соответствующие команды и параметры в паспорте. Однако, минимальный размер стираемой страницы указан только 256 байт. Снижение размера страницы, сильно снижает плотность памяти линиями и мультиплексорами управления. Поэтому очевидно, что размер страницы FLASH в данном МК именно 256 байт, а не 2 байта. В противном случае, такую память назвали бы EERPOM, а не FLASH.

4. Произвольно заменить данные в двух байтах 256-байтной страницы FLASH невозможно без стирания всей страницы. Поэтому, очевидно, что для записи двух байт стирается вся страница. При этом, контроллер имеет оперативный буфер на 256 байт (как раз он используется для быстрого режима записи). И при перезаписи двух байт, сначала считывает всю страницу в буфер, затем туда записывается значение изменяемого полуслова. В это время, вся страница стирается. И, в конце операции, содержимое буфера 256 байт записывается в стёртую страницу заново, но уже с изменённым полусловом. Это мои домыслы, но желающие могут проверить время записи полуслова в режиме совместимости. Если оно окажется ниже времени записи целой страницы в быстром режиме, то, возможно, я не прав.

Таким образом, я полагаю, что запись полусловами использовать не рекомендуется, так как:

А) Износ памяти при этом будет такой же, как и при полной перезаписи всей страницы, а этого можно избежать перезаписью без стирания.

Б) При пропадании питания или сбросом МК в промежутке между чтением страницы в буфер и завершением новой записи, будут потеряны данные всей страницы. Я не проверял этого. Есть идея как сделать - соединить выход GPIO MK со входом RESET и дёргать его по таймеру в разные моменты с подачи команды на запись полуслова. И проверить результат записи полуслова и сохранность остальных данных страницы при разных моментах прерывания.

Поэтому буду проверять, выдерживают ли данные на странице мнокократную запись для обновления данных без повреждения? Если да, то имеет смысл добавлять данные на страницу не с помощью записи полуслова (каждая запись - стирание), а с помощью быстрой записи всей страицы, но установив неизменяемые полуслова в значение 0xE339.