Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
sminys
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 5
#1

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

31.07.2018, 14:56. Просмотров 381. Ответов 26
Метки нет (Все метки)

Ребят, можете помочь, нужно реализовать usb Mass Storage на stm32f429, используя внутреннюю флеш память контроллера. Устройство в системе опознается как Mass Storage, при попытке на него зайти, ОС просит его отформатировать, при форматировании выскакивает ошибка. проект прикладываю
0
Вложения
Тип файла: 7z USB_mass2copy_data_to_comp_30.07.2018.7z (9.77 Мб, 2 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2018, 14:56
Ответы с готовыми решениями:

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

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

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

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

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

26
Rius
Эксперт .NET
4697 / 3009 / 740
Регистрация: 25.05.2015
Сообщений: 9,260
Записей в блоге: 11
Завершенные тесты: 4
31.07.2018, 16:36 #2
  1. Попробуйте сначала сделать накопитель на базе RAM. Это же плата Discovery? Её там дофига. Когда это отладите, можно и что-то другое пробовать, т.к. на связь с ПК можно будет не оглядываться.
  2. Юзать набортную память программ для такой цели- плохая идея, понимаете, надеюсь? У неё ресурс очень ограниченный.
  3. Как эти факты совмещать думаете? -
    • Память программ у STM32F429ZIT6 стирается сразу секторами, размером минимум в 16 кБ.
    • У вас в коде видна запись секторами по 512 байт.
    • Запись возможна только в заранее стёртые ячейки.
0
sminys
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 5
01.08.2018, 06:44  [ТС] #3
Использую внутреннюю память потому что в дальнейшем хочу сделать свой bootloader. Хотел еще спросить, можно ли увеличить размер пакета USB с 512б, до 16Кб? Или нужно будет постоянно хранить в буфере часть сектора, которая будет затираться?
0
Rius
Эксперт .NET
4697 / 3009 / 740
Регистрация: 25.05.2015
Сообщений: 9,260
Записей в блоге: 11
Завершенные тесты: 4
01.08.2018, 07:23 #4
Цитата Сообщение от sminys Посмотреть сообщение
можно ли увеличить размер пакета USB с 512б, до 16Кб
Это не размер пакета USB, а размер сектора файловой системы. У вас FatFS от Чана:
FatFS Configuration Options
FF_MIN_SS, FF_MAX_SS
This set of options defines the extent of sector size used on the low level disk I/O interface, disk_read and disk_write function. Valid values are 512, 1024, 2048 and 4096. FF_MIN_SS defines minimum sector size and FF_MAX_SS defines the maximum sector size. Always set both 512 for memory card and harddisk. But a larger value may be required for on-board flash memory and some type of optical media. When FF_MAX_SS > FF_MIN_SS, support of variable sector size is enabled and GET_SECTOR_SIZE command needs to be implemented to the disk_ioctl function.
Цитата Сообщение от sminys Посмотреть сообщение
в дальнейшем хочу сделать свой bootloader
Как использование памяти программ в качестве бакенда к файловой системе этому поспособствует?
Цитата Сообщение от sminys Посмотреть сообщение
Или нужно будет постоянно хранить в буфере часть сектора, которая будет затираться?
Можно считывать весь затрагиваемый сектор Flash, стирать его из Flash, менять в RAM часть сектора и записывать обратно во Flash. Но этот метод и для HDD не очень (почитайте про Advanced Format и проблемы на заре его распространения), а для Flash просто убойный по износу.
По хорошему для любой Flash должны применяться методы Wear Leveling, но адекватная реализация сего это вообще отдельная и очень сложная история. Можно, конечно, готовую поискать.

Добавлено через 8 минут
Есть несколько других способов организации bootloader'а:
  • Использование достаточного объёма встроенной в MCU или внешней RAM для хранения файловой системы. Износ такой памяти не грозит вообще, скорость - на высоте.
  • Подключение внешней Flash с малым размером сектора, либо SD Card. Ей тоже грозит износ (если нет Wear Leveling), но bootloader применяется не столь часто, чтобы об этом беспокоиться.
  • Запись в файл в файловой системе происходит напрямую по Flash программ по нужному адресу. Файловая система - виртуальная, т.е. секторы файловой системы во Flash не сохраняются. Примером может служить псевдоустройство /dev/random в Linux:
    При чтении данных из устройства /dev/random выводятся только случайные байты, полностью состоящие из битов шума «хаотичного» пула ОС.
    Или /dev/null
    /dev/null — специальный файл в системах класса UNIX, представляющий собой так называемое «пустое устройство». Запись в него происходит успешно, независимо от объёма «записанной» информации. Чтение из /dev/null эквивалентно считыванию конца файла (EOF).
  • Отдельная программа прошивки, общающаяся с bootloader'ом по своему протоколу обмена. Тут всё у вас под контролем. Можно писать сразу во Flash.
0
sminys
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 5
01.08.2018, 09:03  [ТС] #5
То есть если на внутреннюю флеш поставить виртуальную файловую систему, то можно будет безболезненно все реализовать, правильно я понимаю?
0
Rius
Эксперт .NET
4697 / 3009 / 740
Регистрация: 25.05.2015
Сообщений: 9,260
Записей в блоге: 11
Завершенные тесты: 4
01.08.2018, 09:20 #6
Ну... Если сможете, да.
Вот упоминание: STM32 USB Mass Storage Bootloader
Цитата Сообщение от x893
Мне удобнее было не отводить память для MSD, а сделать её виртуальной. Со стороны хоста диск отформатирован и содержит файл APP.BIN. Если его считать — это содержимое флэша. Я просто копирую файл APP.bin (до 496K) и образ сразу записывается во флэш.
То есть размер APP.bin = MCU Flash Size — BOOTLOADER Size (16K у меня)
Цитата Сообщение от kekekeks
Вот тут не факт, что ОС будет писать в те же самые сектора, а не попытается пересоздать файл. Тогда уж надо реализацию MTP делать.
Цитата Сообщение от x893
Мне за MS сложно отвечать, но работает.
Примерно так же работает во всех дебаггерах с поддержкой MSD с одной стороны и SWD/SWC с другой стороны (NUCLEO и ещё 100500).
Цитата Сообщение от Konachan700
Файл точно размером с флеш (без загрузчика), на нее и отображается. Больше места на диске нет ни байта. Если кинуть меньший файл, он запишется, но при рефреше опять станет стандартного размера. Видел такое.
То, что описано в статье, с первого взгляда пахнет избыточностью, но только с первого. На самом деле для обновления прошивки пользователем это идеальный вариант, поскольку можно проверить подпись\заголовок прошивки и точно узнать, что вместо прошивки туда не положили по ошибке картинку или документ. В случае виртуальной ФС с прямым отображением файла на флеш такую проверку сделать затруднительно, если возможно вообще.
Реализаций не нашёл. Встретите - поделитесь.
1
Voland_
1645 / 992 / 95
Регистрация: 04.01.2010
Сообщений: 3,276
01.08.2018, 21:24 #7
Цитата Сообщение от Rius Посмотреть сообщение
Вот упоминание: STM32 USB Mass Storage Bootloader
Было интересно почитать, потому что тоже решал на STM-ках такую же задачу ). И тактика получалась в общем примерно та же, что и у автора. Только я формировал образ с FAT12 что заметно уменьшило его размер. В итоге я влез в 20кб с декодированием бинарников (AES128), и формированием нескольких входных и одного выходного файла на "диске" динамически, что давало возможность таким образом обмениваться данными.

ТС'у удачи в создании лоадера - тема очень интересная.
0
Rius
Эксперт .NET
4697 / 3009 / 740
Регистрация: 25.05.2015
Сообщений: 9,260
Записей в блоге: 11
Завершенные тесты: 4
01.08.2018, 23:01 #8
Voland_, вы про виртуальные файлы? Как это вообще делается?
Образ диска, предположим, можно создать в утилите WinImage.
Но как расположить части файлов последовательно? Простой записью на исходно пустой диск?
Как прошивке узнать, какую часть какого файла пытается в данный момент (прерывание) считать/записать хост? Составляется какая-то карта соответствия смешения от начала образа диска к адресам в файлах?

Добавлено через 27 минут
Псевдо файловая система... https://www.element14.com/community/...dm-kl25z-board
0
sminys
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 5
02.08.2018, 12:51  [ТС] #9
Voland, а можете пример скинуть если не сложно?)
0
Voland_
1645 / 992 / 95
Регистрация: 04.01.2010
Сообщений: 3,276
02.08.2018, 14:57 #10
Цитата Сообщение от Rius Посмотреть сообщение
Составляется какая-то карта соответствия смешения от начала образа диска к адресам в файлах?
ну да. В момент записи FAT знает где у него пустые места (можно оставить "удаленные файлы" на нем, чтобы быть уверенным, что система начнет писать именно туда). При простых действиях происходит всегда одно и то же. И с помощью пары строчек лога я убедился в последовательности действий ОСи. Соответственно, по атрибутам файла (и последующим пакетам) можно много чего "понять" со стороны МК, и действовать соответственно. В общем случае не надо даже вообще создавать область "диска". Достаточно эмулировать FAT и уметь работать с доступом к ней и к ссылкам, которые в ней создаются. Ну, я думаю, вы в курсе.

я хотел, было, доработать этот принцип до "универсального", чтобы можно было вообще работать с любыми "виртуальными" файлами, как с сетью API-вызовов со сторону бутлоадера. Но остановился на основных задачах бутлоадера. Собственно, уже их было достаточно.

...насчет "OpenSDA" почитал, мне поначалу показалось, что это "халява", но потом понял что это не так. Верно?

Добавлено через 1 минуту
Цитата Сообщение от sminys Посмотреть сообщение
Voland, а можете пример скинуть если не сложно?)
с чего бы? )
1
Rius
Эксперт .NET
4697 / 3009 / 740
Регистрация: 25.05.2015
Сообщений: 9,260
Записей в блоге: 11
Завершенные тесты: 4
02.08.2018, 15:58 #11
Насчёт халявы не знаю, там даже МК другой. Просто те же моменты поверхностно показаны.

Добавлено через 40 минут
sminys, в сети есть документ "Реализация виртуальной файловой системы для ОС Embox" (Дерюгин Денис Евгеньевич) , там также описана теория подобного ПО на примере платы STM32F4-Discovery.
0
Rius
Эксперт .NET
4697 / 3009 / 740
Регистрация: 25.05.2015
Сообщений: 9,260
Записей в блоге: 11
Завершенные тесты: 4
07.08.2018, 07:09 #12
sminys,
AN4379 от NXP: "Freescale USB Mass Storage Device Bootloader", использует как раз виртуальную FAT16, идёт с исходниками, для демонстрации. Можете поизучать.
0
sminys
0 / 0 / 0
Регистрация: 09.02.2016
Сообщений: 5
07.08.2018, 13:57  [ТС] #13
спасибо, посмотрю
0
ValeryS
Модератор
7163 / 5430 / 674
Регистрация: 14.02.2011
Сообщений: 18,334
07.08.2018, 15:13 #14
вот здесь реализация на 103 с теорией и исправлением ошибок
http://www.pvsm.ru/stm32/263347
2
Voland_
1645 / 992 / 95
Регистрация: 04.01.2010
Сообщений: 3,276
07.08.2018, 20:58 #15
Цитата Сообщение от ValeryS Посмотреть сообщение
вот здесь реализация на 103 с теорией и исправлением ошибок
поблагодарил за статью, т.к. в свое время задавался проблемой реализации как раз DMA+RTOS, и не все получалось.. А тут все как на ладошке разложено ). Очень полезно, как по мне.
И автор докопался до "ньюансов" работы с флешью через SPI, на его грабли я тоже наступал, так что при беглом изучении - согласен "за глаза" ).

Но.. мы говорили немного о другом - о реализации по сути "программной эмуляции диска" с его FAT, типа "файлами" и работой с ними, включая чтение и запись. То есть памяти нет и близко, а комп об этом вообще не догадывается. Бутлоадер должен заливать данные во FLASH мк, чтобы потом их запустить. Если предположить, что это будет делаться "как на SD card" - конечно ничего не получится.
0
ValeryS
Модератор
7163 / 5430 / 674
Регистрация: 14.02.2011
Сообщений: 18,334
07.08.2018, 21:07 #16
Цитата Сообщение от Voland_ Посмотреть сообщение
Бутлоадер должен заливать данные во FLASH
что то я не увидел про бутлоадер
Цитата Сообщение от Voland_ Посмотреть сообщение
Если предположить, что это будет делаться "как на SD card" - конечно ничего не получится.
это почему? комп как раз и увидит как внешний диск, а вот как писать "внутря" это и есть задача бутлоадера
где то у меня была ссылка как делают "виртуальный ком порт" и "диск" в одном флаконе, поскольку мне не нужно я ине вчитывался
если будет нужно скину, правда если найду
0
Rius
Эксперт .NET
4697 / 3009 / 740
Регистрация: 25.05.2015
Сообщений: 9,260
Записей в блоге: 11
Завершенные тесты: 4
07.08.2018, 21:11 #17
Цитата Сообщение от ValeryS Посмотреть сообщение
комп как раз и увидит как внешний диск, >>>><<<< а вот как писать "внутря" это и есть задача бутлоадера
Вот там нету отдельного накопителя достаточной ёмкости для хранения промежуточного файла. Интересно чтоб сразу с компа писало во флеш программ.

Не по теме:

Изучаю строение FAT16. Занятная штука.

0
ValeryS
Модератор
7163 / 5430 / 674
Регистрация: 14.02.2011
Сообщений: 18,334
07.08.2018, 22:51 #18
Цитата Сообщение от Rius Посмотреть сообщение
Интересно чтоб сразу с компа писало во флеш программ.
ну так в чем проблема?
запускается бутлоадер, есть команда на обновление прошивки, пишем во флеш, потом проверяем и отдаем ей управление
в Кубе, по моему, даже пример есть
0
Rius
Эксперт .NET
4697 / 3009 / 740
Регистрация: 25.05.2015
Сообщений: 9,260
Записей в блоге: 11
Завершенные тесты: 4
07.08.2018, 23:25 #19
ValeryS, рисуем два кружка, потом рисуем остальную сову.
В кубе не помню, а во встроенный бутлоадер я своей программой уже заливал. И свой бутлоадер на обычном MSC делал.
Тут совсем другое интересно - эмуляция файловой системы без использования памяти накопителя под неё.

Добавлено через 2 минуты
Кстати, а почему sminys не стал использовать встроенный загрузчик?
0
ValeryS
Модератор
7163 / 5430 / 674
Регистрация: 14.02.2011
Сообщений: 18,334
08.08.2018, 00:39 #20
Цитата Сообщение от Rius Посмотреть сообщение
рисуем два кружка, потом рисуем остальную сову
примерно так
Я не понимаю в чем проблема, у нас же USB а не IDE и прочая SATA, уровень абстракции выше
комп запрашивает таблицу FAT, отвечаем "все пустое можно писать"
посылает первые 512 байт( размер сектора в FAT) кладем куда нужно, посылает другие, ну так далее
в конце отвечаем запись прошла успешно
или я что то не понял?
0
08.08.2018, 00:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2018, 00:39

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru