Как стереть одну страницу флэш-памяти m25p40, не стирая другие страницы?
Я использую флеш-память m25p40 с микропроцессором jn5148. В техническом описании этой флешки написано, что:
Возможность стирания:
- Стирание сектора: 512 Кб за 0,6 с (TYP)
- Массовое стирание: 4 МБ за 4,5 с (TYP)
Я столкнулся с проблемой перезаписи данных, хранящихся на одной странице сектора. Итак, как я могу стереть одну страницу и записать новые данные на этой странице? Есть ли решение, чтобы стереть одну страницу сектора, не стирая другие страницы того же сектора?
3 ответа
Вот процедура удаления сектора, приведенная в документации по m24p40
Команда SECTOR ERASE устанавливает в 1 (FFh) все биты внутри выбранного сектора. Прежде чем принять команду SECTOR ERASE, команда WRITE ENABLE должна быть выполнена ранее. После того, как команда WRITE ENABLE была декодирована, устройство устанавливает бит фиксации разрешения записи (WEL). Команда SECTOR ERASE вводится посредством выбора микросхемы управления (S#) LOW, за которым следует код команды и три байта адреса на вводе последовательных данных (DQ0). Любой адрес внутри сектора является допустимым адресом для команды SECTOR ERASE. S# должен быть в состоянии НИЗКИЙ в течение всей продолжительности последовательности. S# должен быть установлен на HIGH после того, как восьмой бит последнего байта адреса был зафиксирован. В противном случае команда SECTOR ERASE не будет выполнена. Как только S # приводится в ВЫСОКОЕ состояние, запускается самосинхронный цикл SECTOR ERASE; продолжительность цикла t SE. Во время выполнения цикла SECTOR ERASE регистр состояния может быть считан для проверки значения бита незавершенной записи (WIP). Бит WIP равен 1 во время самосинхронного цикла SECTOR ERASE и равен 0, когда цикл завершен. В некоторое неопределенное время до завершения цикла бит WEL сбрасывается. Команда SECTOR ERASE не выполняется, если она применяется к сектору с аппаратной или программной защитой.
По данным таблицы:
Память можно запрограммировать от 1 до 256 байтов за раз, используя команду PAGE PROGRAM. Он состоит из 8 секторов, каждый из которых содержит 256 страниц. Каждая страница имеет ширину 256 байт.
Хотя я не знаю, работает ли это на самом деле, и я не могу проверить это, я также обнаружил, что кто-то уже сделал это с AVR µC, который должен дать вам пример функции write(address, word)
если вы не хотите читать программную последовательность страницы (таблица с.27) и написать свою собственную.
Вы не можете переписать одну страницу. Вы должны переписать хотя бы один сектор. Поэтому, если вы хотите изменить, то есть перезаписать хотя бы один байт на любой странице в выбранном секторе, вы можете сделать следующее:
- Прочитайте ВСЕ сектор в ОЗУ.
- Сотри этот сектор.
- Поменяйте нужные данные в оперативной памяти.
- Запишите измененные данные в сектор флэш-памяти.
ВЫ ДОЛЖНЫ ПРОЧИТАТЬ ЭТУ СТАТЬЮ: Пять вещей, которые вы никогда не знали о флешках