реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> stm32 + flash-память M25P128, Бабуйня какая то
Still Enemy
сообщение Jun 11 2015, 19:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Есть мк 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.

Собственно, из этих слов можно сделать плачевный вывод, который подтверждает моя практика. Но мозг постоянно вопрошает: как так то? Что за дичь то такая?
Go to the top of the page
 
+Quote Post
barabek
сообщение Jun 12 2015, 00:45
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Да, все флэш так работают. Прежде чем записать нужно стереть. Причём стирание приводит к инициализации всех ячеек в 1. И при записи фактически записываются только 0. Так что при записи настраивайте dma до границы сектора.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 12 2015, 03:12
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



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

Именно так флешь и работает - перед записью надо стереть. Перед использованием какой-либо микросхемы надо читать даташит на неё.
Существует серия AT45 с более удобной организацией: страницы 528 байт причём это и размер стирания и размер записи. И есть команда стирания/записи совмещённая.
И с двумя страницами (пока одна пишется, вторую можно грузить по SPI). Но всё равно время перезаписи == сумме времён стирания и записи.
Так что - если нужна непрерывность потока - буферизируйте в ОЗУ.
Рассчитайте пропускную способность флешь по записи учитывая время стирания/пересылки/записи.
Если не хватает - ищите флешь с более быстрым стиранием (в расчёте на байт) или ставьте в параллель на SPI несколько микросхем флешь.
Или используйте FRAM.
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Jun 12 2015, 08:01
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Цитата(jcxz @ Jun 12 2015, 06:12) *
Именно так флешь и работает - перед записью надо стереть. Перед использованием какой-либо микросхемы надо читать даташит на неё.

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

Сообщение отредактировал Still Enemy - Jun 12 2015, 08:46
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 12 2015, 08:19
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Still Enemy @ Jun 12 2015, 14:01) *
Ну если вы думаете, что я просто беру микруху и начинаю на бум с ней работать, то вы сильно ошибаетесь. Я весь даташит прошерстил, нихрена там нет одного предупреждения по моему вопросу.

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

И какие даташиты Вы "шерстили" если вот выдержка из описания команды записи страницы первого-же попавшегося даташита на серию 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.
...

Фраза "предварительно стёртой" ни о чём не говорит?
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Jun 12 2015, 08:25
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Цитата(jcxz @ Jun 12 2015, 11:19) *
Если действительно "прошерстили", то неужто даже мысли не зародилось "Зачем нужны команды стирания, если есть команды записи?? К тому-же команды записи выполняются в разы быстрее.
Зачем тогда вообще нужно стирание и такое медленное???"

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

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 - Jun 12 2015, 08:31
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 12 2015, 08:37
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Still Enemy @ Jun 12 2015, 14:25) *
Зародились такие мысли в последнее время. Подскажите пожалуйста что-нибудь по следующему вопросу.

А вопрос в чём?
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Jun 12 2015, 08:44
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Цитата(jcxz @ Jun 12 2015, 11:37) *
А вопрос в чём?

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


Сообщение отредактировал Still Enemy - Jun 12 2015, 08:47
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 12 2015, 08:56
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Still Enemy @ Jun 12 2015, 14:01) *
А вот у меня еще вопрос по теме тогда к мастерам: как тогда организовать память с такими свойствами? нужно тогда выделять место в флехе для хранения информации о записанных/свободных секторах/страницах. С такой тягомотиной с записью/перезаписью. Может быть какую файловую систему типа fat поставить?

С какими свойствами? В чём именно проблема? Не понимаю Вашего вопроса.
Go to the top of the page
 
+Quote Post
barabek
сообщение Jun 12 2015, 11:44
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Still Enemy @ Jun 12 2015, 18:01) *
А вот у меня еще вопрос по теме тогда к мастерам: как тогда организовать память с такими свойствами? нужно тогда выделять место в флехе для хранения информации о записанных/свободных секторах/страницах. С такой тягомотиной с записью/перезаписью. Может быть какую файловую систему типа fat поставить?

Как уже написали - уточните требования. Потому как fat не панацея. Я ей не пользовался, но, как понимаю, в чистом виде она не дружественна к флэш, так как переписывает страницу с таблицей постоянно. Специально для флеш всяческие ухищрения приходится делать- "wear leveling" по импортному называется. Погуглите термин. Но не всегда нужно так заморачиваться. Если у вас просто "рулон", то легко все. Пишите-пишите, дошли до границы области стирания, проверяете следующую. Если занята, то предварительно стираете. Что нужно вам мы не знаем. Опишите и тогда направят.
Go to the top of the page
 
+Quote Post
id_Alx
сообщение Jun 12 2015, 11:57
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 12-08-06
Из: Минск
Пользователь №: 19 504



Цитата(Still Enemy @ Jun 12 2015, 11:25) *
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.
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Jun 17 2015, 11:52
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Мой касяк, дальше я сам или спрошу в крайнем случае.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.0148 секунд с 7
ELECTRONIX ©2004-2016