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

 
 
> 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
Ответов
esaulenka
сообщение Jan 16 2013, 12:10
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Предложение - забить на обновление FAT'а (сделать его ридонли, в памяти контроллера), и обновлять только данные. Пользователю разрешить только перезаписывать единственный имеющийся файл.

Нечто похожее есть в примерах NXP "USB bootloader".


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Dmitrich
сообщение Jan 16 2013, 16:31
Сообщение #3


Участник
*

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



Цитата(esaulenka @ Jan 16 2013, 16:10) *
Предложение - забить на обновление FAT'а (сделать его ридонли, в памяти контроллера), и обновлять только данные. Пользователю разрешить только перезаписывать единственный имеющийся файл.

Нечто похожее есть в примерах NXP "USB bootloader".


Всё, полез искать пример. Это решение - было бы для меня идеальным! Именно то, что мне нужно!

Цитата(jcxz @ Jan 16 2013, 17:16) *
И зачем тут файловая система?

Мне она не нужна. Но без неё виндовс не может.
Цитата
И уж точно она никак не поможет ускорить загрузку.

Сама по себе файловая система - конечно нет. Но загрузится файл всё же быстрее, чем через UART 115200.
Цитата
По-моему вы необоснованно усложняете задачу.
В FAT16 максимальный размер кластера ==32К. Учите матчасть cool.gif
И маленькие файлы тогда будут занимать очень много места.

Эт точно! biggrin.gif
Цитата
У вас нет ОЗУ, достаточного для хранения 64К. И как вы при этом собираетесь перезаписывать отдельные области (кластера) внутри этих 64К, объясните?

Было бы столько ОЗУ - проблемы не было бы. ОЗУ нету, и перезаписывать отдельные области внутри я не буду. Всё, что нужно - записать одним куском большой файл.
Цитата
Какой тогда вообще смысл в FAT?

Легкий доступ из виндовс, больше ничего.
Go to the top of the page
 
+Quote Post
Dmitrich
сообщение Jan 17 2013, 17:11
Сообщение #4


Участник
*

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



Докладываю: - проблема решена.

Выглядит это так: - во флеш памяти прцессора лежит 3 массива констант :
- 512 байт - загрузочный сектор
- 112 байт - FAT
- 160 байт - корневой каталог.

Эти массивы "скармливаются" виндовсу, когда он читает соотв. адреса.
При чтении выше 20К - происходит реальное чтение из m25p16
Когда виндовс пишет по адресам ниже 20К - не делается ничего.
Запись выше 20К направляется в m25p16.
При записи в первый сектор страницы 64К - сначала вызывается процедура стирания страницы.

В итоге получилось вот что:
- При подключении устройства, в виндовс появляется новый диск, на котором уже есть файлы ( у меня их там 4 штуки).
- Эти файлы можно перезаписывать, не меняя имён.
- Нельзя стирать ПЕРЕД записью - тогда новый файл может попасть по другим адресам, и всё поломается (но восстановится после сброса)!
- Диск нельзя "убить" никаким форматированием (но данные стереть можно).
-Загрузка файла происходит раз в 5 быстрее, чем было раньше.

В общем, поставленные задачи полностью выполнены.
Спасибо всем, кто помогал. Особенно ценной была подсказка esaulenka - за что отдельное спасибо!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dmitrich   Mass storage in flash M25P16   Jan 15 2013, 19:20
- - polyname   кроме как кешировать весь сектор 64К в ОЗУ на моме...   Jan 15 2013, 21:00
|- - jcxz   Зачем "весь" и зачем "64К"? Оп...   Jan 16 2013, 02:01
|- - _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, 06:01) Зачем ...   Jan 16 2013, 07:32
|- - jcxz   Цитата(Dmitrich @ Jan 16 2013, 13:32) Мин...   Jan 16 2013, 09:13
|- - 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


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

 


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


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