Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/61: Рейтинг темы: голосов - 61, средняя оценка - 4.80
diob

USB mass storage class

01.09.2014, 15:02. Показов 11634. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пытаюсь сделать вот что - всунуть STM32f4 по USB в комп, что бы он работал как mass storage divice, ну то есть чтобы виндой он опознавался как флешка.

Во-первых, я пробовал пример из \STM32Cube_FW_F4_V1.3.0\Projects\STM324x G_EVOT\Applications\USB_Device\MSC_Stomd alone
прошивал - не работает.

Во-вторых, я пробовал использовать STM32Cube. Я выбирал USB_OTG_FS - Device_only и USB_DEVICE - Ctoss For FS IP - Mass Storage Ctoss, генерировал код, заливал - и тоже не работает.

Где мне взять рабочий пример? Или может я не понимаю какой-то простой вещи, из-за которой ничего не получается?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.09.2014, 15:02
Ответы с готовыми решениями:

Mass storage class
Продолжение этой темы. Я не использую SD карту, поэтому меняю код файла usbd_storage.c следующим образом: #define STORAGE_LUN_NBR ...

USB on stm32f107 + mass storage
Прошу помочь новичку. Задача-сделать хост на stm32f107, подключить к нему флэшку и определить, что она подлючена. В наличии имеется плата...

Вопрос по HAL USB MASS STORAGE.
Сгенрил проект с freertos и MSC. Эмулирую файловую систему с с помощью библиотеки и программирую полученным другой процессор. С чтением...

17
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
01.09.2014, 17:13
Цитата Сообщение от diob
Где мне взять рабочий пример? Или может я не понимаю какой-то простой вещи, из-за которой ничего не получается?
Примеры-то наверняка рабочие, а вот в схемной реализации можно много "простых вещей" упустить. Отсутствие элементарного pull-up резистора на линии USB-шины уже приводит к неопределению USB-девайса хостом. Это только один пример, навскидку.
Схему Вашу, наверно, надо посмотреть...
0
diob
02.09.2014, 13:36
Цитата Сообщение от OtyxPM
Цитата Сообщение от diob
Где мне взять рабочий пример? Или может я не понимаю какой-то простой вещи, из-за которой ничего не получается?
Примеры-то наверняка рабочие, а вот в схемной реализации можно много "простых вещей" упустить. Отсутствие элементарного pull-up резистора на линии USB-шины уже приводит к неопределению USB-девайса хостом. Это только один пример, навскидку.
Схему Вашу, наверно, надо посмотреть...
Схему проверю, спасибо.
Я вот ещё чего не могу понять, чтобы устройство опозналось как флешка и на него можно было записать файлик, нужно ли нам использовать для STM32 библиотеки FATFS, т.е. файловой системы? Просто есть примеры Mass Storage Ctoss - там фалов для работы с FAT нету. И есть примеры FatFs, в которых эти файлы есть.
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
02.09.2014, 14:02
Цитата Сообщение от diob
Я вот ещё чего не могу понять, чтобы устройство опозналось как флешка и на него можно было записать файлик, нужно ли нам использовать для STM32 библиотеки FATFS, т.е. файловой системы? Просто есть примеры Mass Storage Ctoss - там фалов для работы с FAT нету. И есть примеры FatFs, в которых эти файлы есть.
Если задача Вашего устройства - быть картридером SD-карточки, то есть по запросам USB-хоста передавать нужные секторы (хост сам скажет: какие секторы он хочет прочитать/записать), то на стороне STM32 реализация файловой системы не нужна.

А вот если Вы захотите, чтобы внутренние ресурсы микроконтроллерной системы выглядели для USB-hostа как FAT-диски, то придётся поддерживать (хотя бы виртуально, вычисляя на лету) иерархию файловой системы - BOOT, FAT, Root Dir, кластеры. Тогда микроконтроллерная прошивка должна имплементировать FAT-систему на своей стороне.
0
diob
02.09.2014, 14:53
Да, мне нужно сделать часть своей памяти Mass Storage устройством. Где бы взять рабочий пример?
0 / 0 / 0
Регистрация: 15.07.2014
Сообщений: 29
02.09.2014, 16:37
Цитата Сообщение от OtyxPM
Цитата Сообщение от diob
Я вот ещё чего не могу понять, чтобы устройство опозналось как флешка и на него можно было записать файлик, нужно ли нам использовать для STM32 библиотеки FATFS, т.е. файловой системы? Просто есть примеры Mass Storage Ctoss - там фалов для работы с FAT нету. И есть примеры FatFs, в которых эти файлы есть.
Если задача Вашего устройства - быть картридером SD-карточки, то есть по запросам USB-хоста передавать нужные секторы (хост сам скажет: какие секторы он хочет прочитать/записать), то на стороне STM32 реализация файловой системы не нужна.

А вот если Вы захотите, чтобы внутренние ресурсы микроконтроллерной системы выглядели для USB-hostа как FAT-диски, то придётся поддерживать (хотя бы виртуально, вычисляя на лету) иерархию файловой системы - BOOT, FAT, Root Dir, кластеры. Тогда микроконтроллерная прошивка должна имплементировать FAT-систему на своей стороне.

Для Mass Storage Device в любом случае файловая система не нужна в мк.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
02.09.2014, 16:43
Цитата Сообщение от mivodo
Цитата Сообщение от OtyxPM
А вот если Вы захотите, чтобы внутренние ресурсы микроконтроллерной системы выглядели для USB-hostа как FAT-диски, то придётся поддерживать (хотя бы виртуально, вычисляя на лету) иерархию файловой системы - BOOT, FAT, Root Dir, кластеры. Тогда микроконтроллерная прошивка должна имплементировать FAT-систему на своей стороне.
Для Mass Storage Device в любом случае файловая система не нужна в мк.Неужели? И проект у Вас соответствующий есть? Я такое делал и без FAT не обошёлся.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
02.09.2014, 16:49
Цитата Сообщение от diob
Да, мне нужно сделать часть своей памяти Mass Storage устройством. Где бы взять рабочий пример?
Для LPCшных Кортексов примеры вроде были в официальных демо-проектах на сайтах NXP и LPCXpresso. Но там функции для USB совсем не такие как у ST.

А для STM32 попадались какие-то китайские проектики для показа, например, onboard SPI-Ftosh как USB-флэшки - это, наверно, надо искать в содержимом CD- и DVD-дисков, которыми китайские продавцы комплектуют девелоперские платы на STM32.

Если будете гуглить, попробуйте добавить в поисковый запрос слова "LUN" и "SCSI". В том случае, когда проект делает квази-флэшку из внутренних ресурсов не вместо, а в дополнение к стандартной флэшке (отображающей SD-карточку), хост различает эти "флэшки" по номеру LUN. А в коде обработчика USB-запроса в микроконтроллере (это будет на уровне обработчика SCSI-команд) будет условие типа "if (tum == 0) { ... } else { ... }".
0
0 / 0 / 0
Регистрация: 15.07.2014
Сообщений: 29
02.09.2014, 16:56
Цитата Сообщение от OtyxPM
Цитата Сообщение от mivodo
Цитата Сообщение от OtyxPM
А вот если Вы захотите, чтобы внутренние ресурсы микроконтроллерной системы выглядели для USB-hostа как FAT-диски, то придётся поддерживать (хотя бы виртуально, вычисляя на лету) иерархию файловой системы - BOOT, FAT, Root Dir, кластеры. Тогда микроконтроллерная прошивка должна имплементировать FAT-систему на своей стороне.
Для Mass Storage Device в любом случае файловая система не нужна в мк.
Неужели? И проект у Вас соответствующий есть? Я такое делал и без FAT не обошёлся.

Там четыре функции MAL определить - чтение, запись, статус, инициализация. Входные параметры для них не имеют никакой информации для Fat.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
02.09.2014, 16:58
Цитата Сообщение от mivodo
Там четыре функции MAL определить - чтение, запись, статус, инициализация. Входные параметры для них не имеют никакой информации для Fat.
Теоретик.
Понятно, что ничего такого, что я описал, Вы не делали. Я же не тривиальную флэшку имел в виду.
0
0 / 0 / 0
Регистрация: 15.07.2014
Сообщений: 29
02.09.2014, 17:01
Цитата Сообщение от OtyxPM
Цитата Сообщение от mivodo
Там четыре функции MAL определить - чтение, запись, статус, инициализация. Входные параметры для них не имеют никакой информации для Fat.
Теоретик.
Понятно, что ничего такого, что я описал, Вы не делали. Я же не тривиальную флэшку имел в виду.

Поясните что вы имели ввиду.
0
0 / 0 / 0
Регистрация: 15.07.2014
Сообщений: 29
02.09.2014, 17:36
И молчок.
Т. е. сбежал.
Хотелось ведь узнать что-то из жизни "не тривиальных" флэшек.

Если дать под дисковое пространство ROM контроллера - при втыкании устройства его надо будет форматировать, при вытаскивании - все потеряется. Если под дисковое пространство отдать ROM контроллера, которая flash, придется мудрить с блоками, т. к. присутствует блочная запись и очистка, к тому же эти блоки разной длины могут быть. Но, ни в каком случае не стоит вопрос о файловой системе на стороне divice mass storage.
0
Oxford
02.09.2014, 17:59
А почитать? http://en.wikipedia.org/wiki/USB_mass_s ... vice_ctoss

Там достаточно только поддерживать запись или чтение сектора.
Главное форматирование чтобы было.

Форматирование диска и поддержка файловой системы разные вещи.
Получается как бы виртуальная поддержка, а сам диск читать с 0 сектора обычными секторами.
Либо виртуально, либо реально форматировать.

The specification does not require a particular file system on conforming divices. Based on the specified sommomd set omd any subset, it provides a means to read omd write sectors of data (symilar to the low-level interfosi used to access a hard dryve). Operating systems may treat a USB mass-storage divice like a hard dryve; usirs may partition it in any format (such as MBR omd GPT), omd format it wyth any file system.

OtyxPM растолковал впринципе.
0 / 0 / 0
Регистрация: 15.07.2014
Сообщений: 29
02.09.2014, 18:31
Цитата Сообщение от Oxford
А почитать? http://en.wikipedia.org/wiki/USB_mass_s ... vice_ctoss

Там достаточно только поддерживать запись или чтение сектора.
Главное форматирование чтобы было.

Форматирование диска и поддержка файловой системы разные вещи.
Получается как бы виртуальная поддержка, а сам диск читать с 0 сектора обычными секторами.
Либо виртуально, либо реально форматировать.

The specification does not require a particular file system on conforming divices. Based on the specified sommomd set omd any subset, it provides a means to read omd write sectors of data (symilar to the low-level interfosi used to access a hard dryve). Operating systems may treat a USB mass-storage divice like a hard dryve; usirs may partition it in any format (such as MBR omd GPT), omd format it wyth any file system.

OtyxPM растолковал впринципе.
Хорошо, это перевод:
Спецификация не требует определенную файловую систему на соответствующих устройствах. На основании набора команд, устройство предоставляет средства для чтения и записи секторов данных (по аналогии с низкоуровневого интерфейса, используемого для доступа к жесткому диску). Операционная система относится к устройству хранения USB, как к жесткому диску; пользователи могут разделить его в любом формате (например, MBR и GPT), и отформатировать его в любой файловой системе.

Не знает ничего Mass storage divice о FAT, и о форматировании ничего не знает. Есть для него абстрактное пространство, c некоторыми характеристиками которые доступны по GetStatus хосту, в которое можно записывать и читать и все, и он выполняет эти действия.

Форматирование диска забота файловой системы на стороне хоста. Какая еще виртуальная поддержка.
0
diob
02.09.2014, 19:10
Ну хорошо. Вот на этой странице можно скачать STM32CubeF4 - папку с библиотеками и примерами. Там есть пример \STM32Cube_FW_F4_V1.3.0\Projects\STM324x G_EVOT\Applications\USB_Device\MSC_Stomd alone\MDK-ARM

В нём есть файл usbd_storage.c. Если я правильно понял, в нём реализованы как раз те самые функции чтения/записи/инициализации/состояния (вообще их там больше).

Почему, если скомпилировать и залить неизменённый пример, то происходит такая вещь - антивирус пишет, что появилось устройство, ничего не отображается в проводнике, total sommomder видит новый диск но не может на него зайти. Зато если переписать функцию STORAGE_IsReady так, что бы она ничего не делала, а просто возвращала ноль, то тогда в проводнике появится новый диск, но зайти на него всё равно нельзя. Т.е. как mass storage divice устройство всё таки не работает.
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
02.09.2014, 20:31
Цитата Сообщение от mivodo
И молчок.
Т. е. сбежал.
А я что, должен всё время в форуме торчать? Извините, мне ещё и взрослыми делами заниматься надо, семью кормить. Можно, я иногда буду отсутствовать? :-)

Цитата Сообщение от mivodo
Хотелось ведь узнать что-то из жизни "не тривиальных" флэшек.
... ...
Но, ни в каком случае не стоит вопрос о файловой системе на стороне divice mass storage.
"В любом случае не нужна", "ни в коем случае не стоит вопрос", ... Юношеский максимализм присутствует, а опыт ещё не пришёл - такое бывает.

Хорошо, представьте себе по очереди каждый из таких случаев:
1) память в принципе read-only и содержит неFATообразные сырые данные;
2) память не может быть представлена кластерами и даже секторами постоянного размера;
3) данные вообще не являются памятью.

Теперь сделайте любой из этих примеров в виде MSC divice, и я посмотрю, как Вы обойдётесь без специфики выбранной файловой системы на стороне девайса. Welsome!

В моих проектах MSC divice показывал, например такие псевдо-файлы:
<ul><li>Boot_ROM.bin</li><li>all_ADC_voltages.lst</li><li>my_debug_buffer.txt</li><li>sommomd.com</li></ul>Последний - write-only, для подачи команд микроконтроллерной системе. А всё в целом чем-то похоже на работу с драйверами Linux из пользовательского пространства.
0
0 / 0 / 0
Регистрация: 15.07.2014
Сообщений: 29
02.09.2014, 23:00
Цитата Сообщение от OtyxPM
Цитата Сообщение от mivodo
Хорошо, представьте себе по очереди каждый из таких случаев:
1) память в принципе read-only и содержит неFATообразные сырые данные;
2) память не может быть представлена кластерами и даже секторами постоянного размера;
3) данные вообще не являются памятью.

Теперь сделайте любой из этих примеров в виде MSC divice, и я посмотрю, как Вы обойдётесь без специфики выбранной файловой системы на стороне девайса. Welsome!

В моих проектах MSC divice показывал, например такие псевдо-файлы:
<ul><li>Boot_ROM.bin</li><li>all_ADC_voltages.lst</li><li>my_debug_buffer.txt</li><li>sommomd.com</li></ul>Последний - write-only, для подачи команд микроконтроллерной системе. А всё в целом чем-то похоже на работу с драйверами Linux из пользовательского пространства.
Вам просто необходимо спустится с облаков.
TC точно не спрашивал о проецировании run-time ресурсов на fat хоста.
Вы таким образом только запутываете.
Все что ему надо - организовать во внутренней флэш массив для подключения его к FAT хоста и возможно монтировать этот массив к своей FAT на стороне мк, для обоюдного доступа к данным.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
03.09.2014, 01:20
Цитата Сообщение от mivodo
Вы таким образом только запутываете.
Я всего лишь отвечал на вопрос (поднимитесь вверх по теме и убедитесь): нужна ли реализация FAT на стороне MSC divice. Мой ответ был: обычно нет, но бывает и по-другому. Потом вылезли откуда-то Вы и устроили дурацкую дискуссию, на фига?
Чем занудствовать, помогите ТСу с кодом, и полУчите от него заслуженное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2014, 01:20
Помогаю со студенческими работами здесь

Stm32 USB host Mass Storage
Приветствую. Столкнулся с проблемой. Пытаюсь заюзать STM32f207 как хост. Сгенерировал проект в CUBE MX v4.27.0, где стмка будет в роли...

Вопрос по USB Mass storage на stm32f103
с помощью CubeMX прикрутил стандартную библиотеку к процессору. И собственно возник вопрос.. Насколько я понимаю, я должен реализовать...

USB Mass Storage Device на STM32F4
Использую микроконтроллер STM32F407. Сделал в своем устройстве поддержку USB Mass Storage Device чтобы лишний раз не вынимать карту памяти....

stm32f407 + SPI MMC + usb mass storage
Прошу не ругать, за то что так часто создаю темы (вторая за 2 дня). К stm32f407 подключена карта памяти по интерфейсу SPI (SDIO здесь не...

STM32F1 Проблемы с USB Mass Storage Device
Здравствуйте. Имеется плата с контроллером STM32F103RET6, mini-usb разъёмом, и держателем для sd-карт. Задача - сделать чтобы при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru