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

 
 
> Mass storage in flash M25P16, Как сделать FAT на флешке с большим размером страницы?
Dmitrich
сообщение Jan 15 2013, 19:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 15-02-05
Пользователь №: 2 663



Есть процессор STM32F103RC и память на 2 Мегабайта M25P16.
Хочется получить доступ к памяти через USB, как к диску.

Взял на сайте ST пример реализации mass storage, обрезал обращение к SD карточке, и для начала запустил в качестве памяти буфер на 32К в ОЗУ процессора.
Это работает, диск при подключении определяется, форматируется, файлы пишутся, читаются и стираются.

Нужно делать следующий шаг - перенести буфер во флеш. Для начала - хотя бы во внутреннюю флеш процессора.

И вот тут я "затормозил".

Виндовс при обращении к моему "диску" многократно перезаписывает таблицу размещения файлов.
Что с этим делать - с ходу не придумывается. Да и придумывать тут не надо - всё давно до меня придумано, но найти не могу.

Помогите, пожалуйста, кто "в теме".
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
polyname
сообщение Jan 15 2013, 21:00
Сообщение #2


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

Группа: Участник
Сообщений: 147
Регистрация: 18-05-12
Пользователь №: 71 915



кроме как кешировать весь сектор 64К в ОЗУ на момент стирания/записи - похоже что никак.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 16 2013, 02:01
Сообщение #3


Гуру
******

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



Зачем "весь" и зачем "64К"?
Определяете минимальную порцию данных (страницу) которую может писать/стирать данная флешка (256/512/2048 байт) и все операции записи реализуете через эти страницы. Дальше - обычный write-back буфер страниц в ОЗУ CPU под некоторое кол-во этих страниц с вытеснением при переполнении наиболее старых страниц из ОЗУ во флеш.
И надо ещё предусмотреть сигнал аварии питания, по которому у вас при отключении питания CPU успеет всё содержимое буфера скинуть во флеш. Упреждение прихода сигнала относительно формирования RESET на CPU должно быть достаточным для сброса буфера. Для ускорения этого процесса, можно во флеш предусмотреть необходимое кол-во заранее стёртых страниц для такой аварийной записи (так как запись во флеш без стирания много быстрее чем со стиранием).

Цитата(Dmitrich @ Jan 16 2013, 01:20) *
Нужно делать следующий шаг - перенести буфер во флеш. Для начала - хотя бы во внутреннюю флеш процессора.

Не знаю как для STM32, но по LPC могу сказать что внутренняя флеш - не лучший выбор:
1. На порядок меньший ресурс перезаписи по сравнению с обычными SPI флеш.
2. Неудобный размер минимальных порций записи/стирания. И причём они разного размера.
3. Во время операций записи/стирания нельзя выполнять код из флеш. Соответственно если у вас в это время работает USB стек (и прочие ISR/задачи), то он весь должен быть в ОЗУ.
Go to the top of the page
 
+Quote Post
Dmitrich
сообщение Jan 16 2013, 07:32
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 15-02-05
Пользователь №: 2 663



Цитата(jcxz @ Jan 16 2013, 06:01) *
Зачем "весь" и зачем "64К"?
Определяете минимальную порцию данных (страницу) которую может писать/стирать данная флешка (256/512/2048 байт)


Минимум, что можно стереть - 64К.

Цитата
И надо ещё предусмотреть сигнал аварии питания...аварийной записи.


Не, это не требуется. Mass storage - не основной режим, очень редкое использование.

Цитата
Не знаю как для STM32, но по LPC могу сказать что внутренняя флеш - не лучший выбор
...Во время операций записи/стирания нельзя выполнять код из флеш.


Про внутренний флеш я упомянул только имея в виду - попробовать. При этом я забыл, что запись останавливает выполнение. Спасибо, что напомнили. Не буду даже пробовать.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 16 2013, 09:13
Сообщение #5


Гуру
******

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



Цитата(Dmitrich @ Jan 16 2013, 13:32) *
Минимум, что можно стереть - 64К.

Если вы говорите что железо менять нельзя, то у вас в устройстве значит уже должна быть внешняя память.
Либо использовать предложенный мной метод с таблицей трансляции логических номеров кластеров в физические.
Иначе - как вы собираетесь переписать один кластер во флеш с учётом того, что стирать можете только по 64К?
Размер кластеров в вашем FAT какой? 512 или...?
Либо внешняя память и тогда - считываем сектор, стираем его, заменяем изменившиеся кластеры в нём, записываем.
Либо используем таблицу трансляции - тогда не нужен большой буфер в ОЗУ и можно обойтись внутренней ОЗУ CPU.
Но таблицу трансляции надо скидывать по сигналу сбоя питания (это тоже должно быть уже в железе).
Если у вас чего-то из этого в железе нет, то его менять придётся всё равно и лучше заменить микросхему флеш на что-нить более удобное.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dmitrich   Mass storage in flash M25P16   Jan 15 2013, 19:20
|- - _3m   Цитата(jcxz @ Jan 16 2013, 06:01) Зачем ...   Jan 16 2013, 03:59
||- - ViKo   Цитата(_3m @ Jan 16 2013, 06:59) Минималь...   Jan 16 2013, 04:27
|- - Dmitrich   Цитата(jcxz @ Jan 16 2013, 13:13) Если вы...   Jan 16 2013, 12:03
|- - jcxz   Цитата(Dmitrich @ Jan 16 2013, 18:03) Из ...   Jan 16 2013, 13:16
- - polyname   ЦитатаОпределяете минимальную порцию данных (стран...   Jan 16 2013, 06:19
|- - jcxz   Тогда лучше использовать что-то более удобное: W25...   Jan 16 2013, 07:01
|- - Dmitrich   Цитата(jcxz @ Jan 16 2013, 11:01) Тогда л...   Jan 16 2013, 07:22
|- - ViKo   Цитата(Dmitrich @ Jan 16 2013, 10:22) M25...   Jan 16 2013, 07:26
- - Dmitrich   Спасибо отвечавшим, всё внимательно прочитал, и да...   Jan 16 2013, 07:05
|- - ViKo   Цитата(Dmitrich @ Jan 16 2013, 10:05) К с...   Jan 16 2013, 07:12
- - AlexandrY   Цитата(Dmitrich @ Jan 15 2013, 21:20) Вин...   Jan 16 2013, 11:30
- - esaulenka   Предложение - забить на обновление FAT'а (сдел...   Jan 16 2013, 12:10
- - Dmitrich   Цитата(esaulenka @ Jan 16 2013, 16:10) Пр...   Jan 16 2013, 16:31
- - Dmitrich   Докладываю: - проблема решена. Выглядит это так: ...   Jan 17 2013, 17:11


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

 


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


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