Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/89: Рейтинг темы: голосов - 89, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 5

STM32F429 USB Mass Storage из внутренней flash

31.07.2018, 14:56. Показов 18292. Ответов 56

Студворк — интернет-сервис помощи студентам
Ребят, можете помочь, нужно реализовать usb Mass Storage на stm32f429, используя внутреннюю флеш память контроллера. Устройство в системе опознается как Mass Storage, при попытке на него зайти, ОС просит его отформатировать, при форматировании выскакивает ошибка. проект прикладываю
Вложения
Тип файла: 7z USB_mass2copy_data_to_comp_30.07.2018.7z (9.77 Мб, 79 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2018, 14:56
Ответы с готовыми решениями:

STM32 USB MASS STORAGE in FLASH memory
Привет! Есть программа, которая заставляет плату с МК STM32F103RET7 работать в режиме USB MASS STORAGE, причем по USB он отдает куски...

STM32f429 mass storage device + sdram
Здравствуйте, можете помочь с решением проблемы. Пытаюсь сделать usb mass storage device из sdram на stm32f429- плата waveshare, устройство...

LPC1788 Mass Storage device на базе SPI Flash
Пытаюсь реализовать Mass Storage. К контроллеру подключена флэш sst25vf016. За основу взял пример USBDEV, идущий с CMSIS library для...

56
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
08.08.2018, 05:59
Студворк — интернет-сервис помощи студентам
Ага, примерно так. Только как-то сложилось, что тема эта непопулярная. Наверное потому, что к уже готовым примерам MSC нужно дополнительно понимание файловой системы.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
08.08.2018, 21:09
Цитата Сообщение от Rius Посмотреть сообщение
встроенный бутлоадер я своей программой уже заливал. И свой бутлоадер на обычном MSC делал.
а как вы делали? типа, изображаем "sd с нулями", но пишем в нее "образом диска"? В принципе вариант тоже хорош ).
вообще реализация FAT не так уж и сложна. При первом же беглом поиске нашлось вот это. То есть адаптированный FIFO, возвращающий "ленту" файлов и структруры FAT16, клеющий ее на лету, отталкиваясь от смещения читаемых данных - это все что нужно, получается.

Не по теме:

Ps: давно хотел сделать. Немного для других нужд. Придется вернуться к этому вопросу ). Заодно с gcc еще поковыряю. 20кб лоадер у мне получился в Keil с Peripheral library, но гляда на gcc для avr - он не всегда оптимален.

1
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
08.08.2018, 21:17
Цитата Сообщение от Voland_ Посмотреть сообщение
а как вы делали? типа, изображаем "sd с нулями", но пишем в нее "образом диска"? В принципе вариант тоже хорош ).
Неее, там банально всё.
  1. Заводской загрузчик в чипе, работающий по UART. Своя софтина на стороне ПК (STM32 Flash loader demonstrator слишком универсальна и неудобна).
  2. Собственный загрузчик, реализующий MSC с накопителем - RAM. Инициализируем файловую систему в RAM, отключаем файловую систему, подключаем MSC к ПК, пишем туда файл(ы), отключаем от ПК, монтируем файловую систему к этому массиву байт, читаем оттуда файлы и обрабатываем. Флэшу при этом повреждение не грозит.

Я пока по Записки инженера - Описание файловой системы FAT16 не читалку, а писалку сейчас мастерю. Чтобы структуру лучше понять.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
08.08.2018, 22:52
...я ссыль дал на прожект в котором фат описан уже в структурах. Там вроде бы три файла хидеров, из которых вполне можно выдернуть то что нужно.
0
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
08.08.2018, 23:09
Да не, спасибо. Сам поразбираюсь. Выдергивание готового кода мне не сильно помогает.
0
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
12.08.2018, 20:54
Запись образа в файл реализовал на C#.
Затем чтение виртуальной ФС на МК:
Кликните здесь для просмотра всего текста

Теперь запись надо запилить.
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
12.08.2018, 22:25
О.. ну круть, выглядит убедительно ). Раз есть хотя бы статичный массив, теперь понятно что куда надо подставлять.
0
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
15.08.2018, 20:40
Запилил запись.

Просто подставить в тот же код запись не вышло. 1 сектор записывается и всё, флешка отваливается полностью.

Переместил прогу в ОЗУ, чтобы выполнялась не со флеша. Не помогло.

В ходе копания выяснилось, что сколь-нибудь долгие операции нельзя проводить в обработчике прерывания.
Попытка вернуть USBD_BUSY из STORAGE_Read_HS/STORAGE_Write_HS вместо USBD_OK ничего не дала. Как тоже выяснилось, коду, сгенерированному CubeMX, глубоко пофиг на возвращаемый мной результат - OK, Busy или Fail. Код считает что всегда всё OK, о чём рапортует хосту, и хост продолжает слать новые пакеты для записи, которые девайс принять пока не может. И в итоге флешка отваливается.
Понадобилось как-то сообщить хосту, чтобы подождал.
Для этого разделить методы SCSI_ProcessRead/SCSI_ProcessWrite, чтобы можно было опционально задержать возвращаемый ими результат и отрапортовать о завершении позже.
Метод разделения показан в статье
Цитата Сообщение от ValeryS Посмотреть сообщение
вот здесь реализация на 103 с теорией и исправлением ошибок
http://www.pvsm.ru/stm32/263347
Пустые кластеры, во избежание, теперь по умолчанию помечены зарезервированными. Поэтому занято показывает всё, хотя файлы весят меньше всего объёма диска.

Кликните здесь для просмотра всего текста
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
15.08.2018, 20:57
Цитата Сообщение от Rius Посмотреть сообщение
коду, сгенерированному CubeMX, глубоко пофиг на возвращаемый мной результат - OK, Busy или Fail. Код считает что всегда всё OK,
что да, то да
кубик вообще к USB как то фривольно относится
вроде куча флагов, проверок, а половину в своем же коде не выполняет
так что для USB нужен не просто напильник, а драчовый
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
16.08.2018, 09:31
Цитата Сообщение от Rius Посмотреть сообщение
Для этого разделить методы SCSI_ProcessRead/SCSI_ProcessWrite
я помню, что как-то с SPL и библ(ах) для USB (для STM32F1xx их две) было проще. Уже не помню, но там, на Read вроде был уже event. я ничего не буферил и не переживал за задержки. Видать HAL чуть хуже на это нацелен.
0
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
17.08.2018, 22:51
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Выложил, вдруг кому ещё понадобится. ТС, похоже, уже забил.
Кликните здесь для просмотра всего текста
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
18.08.2018, 13:14
Цитата Сообщение от Rius Посмотреть сообщение
Выложил
Прикольный код, в принципе все понятно, в некоторых случаях я делал немножко по-другому. В частности переход к софту, и определение его наличия было сделано не так. Но вцелом забрал ). Попробую как-нить на досуге, на F103 или F105 - что быстрее под руку попадется.
0
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
18.08.2018, 13:35
Так этож демка, надо как попроще. У себя я другие проверки применяю. В том числе проверку контрольной суммы всей прошивки.
0
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
28.09.2018, 14:11
Вылезла неожиданная проблема.
При чтении файла с накопителя, оно , я предполагал, должно было идти по порядку, блок за блоком. Однако, на одной машине оно перескакивает куда-то в конец файла, а потом возвращается обратно:
  • файл из 16385 блоков (по 512 байт);
  • дочитали до 383 блока;
  • на следующем чтении вместо блока 384 запрашивается 16255;
  • дочитывается всё до конца файла;
  • и далее возобновляется с 384 блока.
Для прямого чтения данных из флешки это проблемы не представляет. А вот если данные следующего блока зависят от содержимого предыдущего, всё идёт не по плану.
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
01.10.2018, 08:52
Нда.. я таки предполагал, что это возможно. Но до этого в принципе все получалось нормально. Скорее всего это происходит из-за функции API 'seek', которая перематывает позицию файла в нужный кусок. Надеюсь, этого нет для записи (хотя, в стриме 'seek' работает и для записи), для чтения придется доделывать, если это критично ).

PS: у меня задачи чтения не стояло, потому что hex был защищен кодированием. Соответственно, защиты прошивки была основным приоритетом.
0
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
01.10.2018, 09:42
У меня прошивка тоже не читается. Но есть ещё внешняя data flash, читающаяся в закодированном виде.
seek может поменять позицию в файле, это понятно. Но вот нафига это происходит посреди последовательного чтения?...
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[382]   { Offset = 0x00017e00, Counter = 0x0000017e }
[383]   { Offset = 0x00017f00, Counter = 0x0000017f }
[384]   { Offset = 0x4f68a353, Counter = 0x00000200 }
[385]   { Offset = 0x00018100, Counter = 0x00000201 }
[386]   { Offset = 0x00018200, Counter = 0x00000202 }
[387]   { Offset = 0x00018300, Counter = 0x00000203 }
...
[16254] { Offset = 0x003f7e00, Counter = 0x00003ffe }
[16255] { Offset = 0x003f7f00, Counter = 0x00003fff }
[16256] { Offset = 0xfdc3bc69, Counter = 0x00000180 }
[16257] { Offset = 0x003f8100, Counter = 0x00000181 }
...
[16382] { Offset = 0x003ffe00, Counter = 0x000001fe }
[16383] { Offset = 0x003fff00, Counter = 0x000001ff }
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
02.10.2018, 08:23
Есть подозрение, что FAT16 Ваш может быть не совсем правильно сформирован. В итоге в нем есть какая-то предполагаемая ссылка на теневой FAT (дублирующий), или на какую-то существующую, но не сформированную область. В итоге получается, что файлы пытаются читаться одновременно, но оффсет второго (или может даже нескольких, учитывая рандомные оффсеты) выбирается неправильно.

PS: у себя я такого не видел, ну у меня был FAT12.
1
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 8
02.10.2018, 08:40
Rius, извиняюсь за тупой вопрос, но у меня точно такая же плата как из вашего видео, пытаюсь залить ваш проект, но ничего не работает.
Открывал проект через TrueStudio, может ли в этом быть причина?
И с какого адреса надо прошивать?
Спасибо.
0
Эксперт .NET
 Аватар для Rius
13826 / 7898 / 1707
Регистрация: 25.05.2015
Сообщений: 23,967
Записей в блоге: 14
02.10.2018, 09:46
lenagibe, у меня проект в Eclipse с некоторыми плагинами. В других IDE просто так не откроется.
Загрузчик с адреса 0x08000000, а демки уже он сам прошьёт куда надо, кажется на +128 КБ от своего начала.
Вложения
Тип файла: 7z demo.7z (25.5 Кб, 30 просмотров)
1
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 8
02.10.2018, 21:54
Rius, спасибо, буду пробовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.10.2018, 21:54

USB mass storage class
Я пытаюсь сделать вот что - всунуть STM32f4 по USB в комп, что бы он работал как mass storage divice, ну то есть чтобы виндой он...

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

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 чтобы лишний раз не вынимать карту памяти....


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru