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

 
 
> 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
Ответов
_4afc_
сообщение Mar 15 2018, 22:23
Сообщение #2


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(Almaz1988 @ Mar 15 2018, 18:23) *
Замысел следующий - STM32 реализует USB Mass storage, в результате, пользоваттель, при подключении по USB видит подключенную к компу флешку, загружает на эту флешку bit-файл, которым инициализируется ПЛИС.
Реализовал данное устройство с памятью во внутренней памяти микроконтроллера, но проблема в том, что она меньше размеров загрузочного файла...
Кто-нибудь сталкивался с подобной задачей?

Делали - двумя способами:

1. Запись файла с определённым именем: нужна поддержка файловой системы типа Х внутри МК и отслеживания появления файла.
Мы проверяли наличие файла при подаче питания на карте памяти. После прошивки его удаляли и перезагружались.
В вашем случае не подойдёт - памяти мало.
Можно конечно парсить на лету диск, чтоб понять, что запись сектора - это создание файла... это будет увлекательно, но примеры врятли есть - надо писать самому.

2. Запись в определённые сектора. Делается виртуальный диск любого размера. Записываете файл через любую утилиту типа HxD.
Можно и своё приложение написать, только для работы с секторами под виндой - потребуются права администратора...
Go to the top of the page
 
+Quote Post
Almaz1988
сообщение Mar 16 2018, 18:59
Сообщение #3


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

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



Цитата(_4afc_ @ Mar 16 2018, 01:23) *
Можно конечно парсить на лету диск, чтоб понять, что запись сектора - это создание файла... это будет увлекательно, но примеры врятли есть - надо писать самому.

Видимо, это единственный возможный вариант.
Попытался прикрутить библиотеку FatFS от Chan - не хватает памяти.
Пока удалось следующее:
Во флеш-память usb mass storage устройства загрузил файл с наименованием "00000.txt" и содержимым "77777", т.е. обычный текстовый файл размером 5 байт. После этого считал память МК. USB mass storage устройство имеет размер 43 блока по 512 байт. 20 КБ из них занято файловой системой FatFS, т.е. устройство после подключения к ПК по USB имеет размер 1.5 КБ:
43 * 512 = 0x5600 Глянул содержимое памяти HEX-редактором и действительно, флеш-память МК начиная с адреса 0x08010000 по которому хранится содержимое usb mass устройства по адрес 0x08015600 Содержит осмысленные данные. Вся остальная память после 0x08015600 заполнена FF.
Вырезал данный кусок памяти 0x08010000 - 0x08015600в отдельный файл (он в приложении).
Ищу кодовую последовательность 30 30 30 30 30 ( "00000" в ASCII кодах, т.е. наименование файла) - вижу ее по адресу 0x1060:




Кодовая последовательность 37 37 37 37 37 ( "77777" в ASCII кодах, т.е. содержимое файла) расположена по адресу 0x5400:



Адрес 0x5400 соответствует началу последнего сектора (размер сектора 512 байт = 0x200). Интуиция подсказывает, что рядом с названием файла должен располагаться указатель на адрес, по которому расположено содержимое файла и его размер. Видимо предстоит раскуривать какую-либо библиотеку, реализующую FatFS, например, того же самого Chan'а в поисках нужного куска кода, который откроет свет на взаимосвязь между названием файла и его расположением.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Almaz1988   USB MASS storage эмуляция большего размера   Mar 15 2018, 15:23
- - jcxz   Цитата(Almaz1988 @ Mar 15 2018, 17:23) Ре...   Mar 16 2018, 20:42
|- - Almaz1988   Цитата(jcxz @ Mar 16 2018, 23:42) О каком...   Mar 17 2018, 16:51
|- - 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 Текстовая версия Сейчас: 19th July 2025 - 06:47
Рейтинг@Mail.ru


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