Перейти к содержанию
    

stm32 + flash-память M25P128

Есть мк stm32f105 и флешка micron m25p128. Поднял взаимодействие между ними по spi. Но происходят какие то необъяснимые вещи. Я не помню как происходил первый раз записи в неё, но перезапись сводит меня с ума.

Начну чуть-чуть из далека: емкость памяти - 16 метров, поделена она на 64 сектора, в каждом из которых по 1024 страницы, в каждой из которых по 256 байт. Есть функция записи - она работает только постранично, есть функция стирания - она работает посекторно(не считая того, что можно вообще всё потереть за раз).

Так вот, как показала практика, если записать в только что стертый сектор(в любую страницу) и прочитать, всё работает отлично. Как только я хочу перезаписать без стирания, то при чтении мне приходит какая то ересь. В даташите нигде ни строчки про то, что, если вам надо перезаписать страницу, вам надо потереть целый сектор(!!!).

Я в первый раз работаю с flash-памятью и возможно так и должно быть, просто скажите, что так должно быть. Если же всё иначе, объясните как надо действовать? Просто мне с этой флешкой надо работать через DMA(то есть будет непрерывный поток данных), а тереть каждый заполненный сектор будет стоить времени(целых 3-6 секунд!!! и в эти моменты с флешки не прочитаешь и не запишешь).

P.s.: вот здесь какой то умелец утверждает, что:

Each sector of memory must have been previously erased before writing to that page. This means you cannot write to several address and then "backup" to rewrite to the first address. The entire sector must be erased before you can return rewrite to the first address.

Собственно, из этих слов можно сделать плачевный вывод, который подтверждает моя практика. Но мозг постоянно вопрошает: как так то? Что за дичь то такая?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, все флэш так работают. Прежде чем записать нужно стереть. Причём стирание приводит к инициализации всех ячеек в 1. И при записи фактически записываются только 0. Так что при записи настраивайте dma до границы сектора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я в первый раз работаю с flash-памятью и возможно так и должно быть, просто скажите, что так должно быть. Если же всё иначе, объясните как надо действовать? Просто мне с этой флешкой надо работать через DMA(то есть будет непрерывный поток данных), а тереть каждый заполненный сектор будет стоить времени(целых 3-6 секунд!!! и в эти моменты с флешки не прочитаешь и не запишешь).

Именно так флешь и работает - перед записью надо стереть. Перед использованием какой-либо микросхемы надо читать даташит на неё.

Существует серия AT45 с более удобной организацией: страницы 528 байт причём это и размер стирания и размер записи. И есть команда стирания/записи совмещённая.

И с двумя страницами (пока одна пишется, вторую можно грузить по SPI). Но всё равно время перезаписи == сумме времён стирания и записи.

Так что - если нужна непрерывность потока - буферизируйте в ОЗУ.

Рассчитайте пропускную способность флешь по записи учитывая время стирания/пересылки/записи.

Если не хватает - ищите флешь с более быстрым стиранием (в расчёте на байт) или ставьте в параллель на SPI несколько микросхем флешь.

Или используйте FRAM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно так флешь и работает - перед записью надо стереть. Перед использованием какой-либо микросхемы надо читать даташит на неё.

Ну если вы думаете, что я просто беру микруху и начинаю на бум с ней работать, то вы сильно ошибаетесь. Я весь даташит прошерстил, нихрена там нет одного предупреждения по моему вопросу. В нете в одном источнике это написано, у какого то левого чувака. Как будто это априори должно быть. Ну хорошо, теперь буду знать.

А вот у меня еще вопрос по теме тогда к мастерам: как тогда организовать память с такими свойствами? нужно тогда выделять место в флехе для хранения информации о записанных/свободных секторах/страницах. С такой тягомотиной с записью/перезаписью. Может быть какую файловую систему типа fat поставить?

Изменено пользователем Still Enemy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну если вы думаете, что я просто беру микруху и начинаю на бум с ней работать, то вы сильно ошибаетесь. Я весь даташит прошерстил, нихрена там нет одного предупреждения по моему вопросу.

Если действительно "прошерстили", то неужто даже мысли не зародилось "Зачем нужны команды стирания, если есть команды записи?? К тому-же команды записи выполняются в разы быстрее.

Зачем тогда вообще нужно стирание и такое медленное???"

 

И какие даташиты Вы "шерстили" если вот выдержка из описания команды записи страницы первого-же попавшегося даташита на серию W25X...:

11.2.10 Page Program (02h)

The Page Program instruction allows up to 256 bytes of data to be programmed at previously erased

to all 1s (FFh) memory locations.

...

Фраза "предварительно стёртой" ни о чём не говорит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если действительно "прошерстили", то неужто даже мысли не зародилось "Зачем нужны команды стирания, если есть команды записи?? К тому-же команды записи выполняются в разы быстрее.

Зачем тогда вообще нужно стирание и такое медленное???"

Зародились такие мысли в последнее время. Подскажите пожалуйста что-нибудь по следующему вопросу.

 

UP. В даташите на мою флешку написано:

The Page Program (PP) instruction allows bytes to be programmed in the memory (changing bits from 1 to 0). Before it can be accepted, a Write Enable (WREN) instruction must previously have been executed. After the Write Enable (WREN) instruction has been decoded, the device sets the Write Enable Latch (WEL).

А так же:

Page programming

To program one data byte, two instructions are required: Write Enable (WREN), which is one byte, and a Page Program (PP) sequence, which consists of four bytes plus data. This is followed by the internal Program cycle (of duration tPP).

To spread this overhead, the Page Program (PP) instruction allows up to 256 bytes to be programmed at a time (changing bits from 1 to 0), provided that they lie in consecutive addresses on the same page of memory.

Как бэ я не совсем тупой и читать по английски умею

Изменено пользователем Still Enemy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зародились такие мысли в последнее время. Подскажите пожалуйста что-нибудь по следующему вопросу.

А вопрос в чём?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вопрос в чём?

А вот у меня еще вопрос по теме тогда к мастерам: как тогда организовать память с такими свойствами? нужно тогда выделять место в флехе для хранения информации о записанных/свободных секторах/страницах. С такой тягомотиной с записью/перезаписью. Может быть какую файловую систему типа fat поставить?
Изменено пользователем Still Enemy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот у меня еще вопрос по теме тогда к мастерам: как тогда организовать память с такими свойствами? нужно тогда выделять место в флехе для хранения информации о записанных/свободных секторах/страницах. С такой тягомотиной с записью/перезаписью. Может быть какую файловую систему типа fat поставить?

С какими свойствами? В чём именно проблема? Не понимаю Вашего вопроса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот у меня еще вопрос по теме тогда к мастерам: как тогда организовать память с такими свойствами? нужно тогда выделять место в флехе для хранения информации о записанных/свободных секторах/страницах. С такой тягомотиной с записью/перезаписью. Может быть какую файловую систему типа fat поставить?

Как уже написали - уточните требования. Потому как fat не панацея. Я ей не пользовался, но, как понимаю, в чистом виде она не дружественна к флэш, так как переписывает страницу с таблицей постоянно. Специально для флеш всяческие ухищрения приходится делать- "wear leveling" по импортному называется. Погуглите термин. Но не всегда нужно так заморачиваться. Если у вас просто "рулон", то легко все. Пишите-пишите, дошли до границы области стирания, проверяете следующую. Если занята, то предварительно стираете. Что нужно вам мы не знаем. Опишите и тогда направят.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UP. В даташите на мою флешку написано:

 

The Page Program (PP) instruction allows bytes to be programmed in the memory (changing bits from 1 to 0). Before it can be accepted, a Write Enable (WREN) instruction must previously have been executed. After the Write Enable (WREN) instruction has been decoded, the device sets the Write Enable Latch (WEL).

 

Как бэ я не совсем тупой и читать по английски умею

 

Так Page Program и переводит биты из 1 в 0, как написано в даташите. А наоборот не умеет. Зато это умеет Erase.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...