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

 
 
> USB MASS storage эмуляция большего размера, USB MASS storage STM32
Almaz1988
сообщение Mar 15 2018, 15:23
Сообщение #1


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

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Добрый день!
Имеется печатная плата, на которой расположена ПЛИС как основное устройство и микроконтроллер STM32, как
вспомогательное устройство для загрузки конфигурационного файла в ПЛИС.
Замысел следующий - STM32 реализует USB Mass storage, в результате, пользоваттель, при подключении по USB
видит подключенную к компу флешку, загружает на эту флешку bit-файл, которым инициализируется ПЛИС.
Реализовал данное устройство с памятью во внутренней памяти микроконтроллера, но проблема в том, что
она меньше размеров загрузочного файла. Сам файл мне сохранять в памяти не нужно, - требуется лишь дергая
ножками STM32 загрузить его в ПЛИС, соответственно нужно эмулировать для компа память большего размера,
а для этого, необходимо парсить usb-запросы от компа на запись и считывание.
Сама реализация USB mass storage устройства в STM32 - проще некуда, достаточно реализовать лишь две
функции
Код
STORAGE_Write_FS
и
Код
STORAGE_Read_FS
См. файл по ссылке:
https://cloud.mail.ru/public/ALsV/UTQGUYgwo
Мне нужно модифицировать их так, чтобы понимать, что в данный момент времени пришел запрос на загрузку
файла, вычитать его данные, делая вид, что сохраняю его во флеш, а на самом деле передать его в ПЛИС, а в
ответ на запрос на считывание его просто вернуть набор нулей.
Кто-нибудь сталкивался с подобной задачей? Поделитесь мануалами, примерами кода, описанием протокола
usb-команд к usb mass storage.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Mar 16 2018, 20:42
Сообщение #2


Гуру
******

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



Цитата(Almaz1988 @ Mar 15 2018, 17:23) *
Реализовал данное устройство с памятью во внутренней памяти микроконтроллера, но проблема в том, что
она меньше размеров загрузочного файла. Сам файл мне сохранять в памяти не нужно, - требуется лишь дергая
ножками STM32 загрузить его в ПЛИС, соответственно нужно эмулировать для компа память большего размера,

О каком размере файла хоть речь-то?
Вообще в любом STM32 есть довольно большой объём памяти - flash-памяти программ. Почему не использовать её раз уж так хочется mass storage?
Но я бы не заморачивался: раз USB, значит - реализовать DFU. DFU именно для того и предназначен (обновления прошивки). Вместо странного использования mass storage.
Ну или хоть сделать CDC и передать туда файл прошивки.
Go to the top of the page
 
+Quote Post
Almaz1988
сообщение Mar 17 2018, 16:51
Сообщение #3


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

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Цитата(jcxz @ Mar 16 2018, 23:42) *
О каком размере файла хоть речь-то?
Вообще в любом STM32 есть довольно большой объём памяти - flash-памяти программ. Почему не использовать её раз уж так хочется mass storage?
Но я бы не заморачивался: раз USB, значит - реализовать DFU. DFU именно для того и предназначен (обновления прошивки). Вместо странного использования mass storage.
Ну или хоть сделать CDC и передать туда файл прошивки.

Размер файла от 1-го МБ/ USB Mass storage - требование заказчика. Ему хочется, чтобы обновление прошивки ПЛИС выглядело простой записью файла на флешку, подключенную к ПК по USB. И роль этой флешки должна играть STM32 с размером флеш-памяти 128 КБ.

Цитата(Andreas1 @ Mar 17 2018, 11:11) *
Mass Storage - просто считывание/запись сектора и ФС вы уже сами должны изображать. По минимуму в флеше STM32 должно хранится содержимое 4 секторов по 512 байт: mbr, boot, fat, root с прописанными туда данными вашего файла. При этом отдавать в зависимости от номера запрошенного сектора или эти предопределенные сектора, или выкачанную по SPI вашу прошивку. Записывать можно примерно также, но желательно размер носителя сделать равным размеру прошивки+служебная область файловой системы. При этом новая прошивка будет перезаписывать старую.

Удалось впихнуть FatFS от Chan'а в 64 КБ флеш-памяти МК, оставив другие 64 КБ под память программы. Выяснилось, что при перезаписи файла с ПК файл остается в прежнем секторе, не меняя своего положения. На первый взгляд это очень упрощает задачу в том случае, если файл прошивки ПЛИС будет иметь одно и то же название - тогда достаточно будет отслеживать запись в один и тот же сектор памяти. Но прежде этого нужно научиться симулировать для ПК флешку размером несколько мегабайт имея всего лишь 64 КБ.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Almaz1988   USB MASS storage эмуляция большего размера   Mar 15 2018, 15:23
- - _4afc_   Цитата(Almaz1988 @ Mar 15 2018, 18:23) За...   Mar 15 2018, 22:23
|- - Almaz1988   Цитата(_4afc_ @ Mar 16 2018, 01:23) Можно...   Mar 16 2018, 18:59
|- - jcxz   Цитата(Almaz1988 @ Mar 17 2018, 18:51) Вы...   Mar 17 2018, 17:13
|- - Andreas1   Цитата(Almaz1988 @ Mar 17 2018, 19:51) Уд...   Mar 17 2018, 17:47
|- - Almaz1988   Мне пока удалось съэмулировать лишь 110КБ памяти. ...   Mar 17 2018, 19:32
|- - controller_m30   Вот содержимое MBR и BS секторов для 16 Мбайт ...   Mar 17 2018, 20:30
|- - Almaz1988   Цитата(controller_m30 @ Mar 17 2018, 23:3...   Mar 17 2018, 22:23
|- - controller_m30   Цитата(Almaz1988 @ Mar 18 2018, 01:23) Ма...   Mar 18 2018, 07:48
- - Andreas1   Mass Storage - просто считывание/запись сектора и ...   Mar 17 2018, 08:11
|- - mantech   Цитата(Andreas1 @ Mar 17 2018, 11:11) Mas...   Mar 18 2018, 12:36
- - Almaz1988   Добрый день. Приключения не закончились. Методом п...   Mar 31 2018, 08:27
- - Almaz1988   И в окне форматирования отображается 32.5 КБ вмест...   Mar 31 2018, 13:57
- - controller_m30   Почему показывает 32 КБ вместо 6 Мб сказать пока н...   Mar 31 2018, 18:39


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

 


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


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