И вам спасибо!
Кажется, DFU bootloader требует некоторую внешнюю программу на стороне ПК (я не использовал никогда DFU)?
Специально хотелось уйти от этого.
Мне удобнее было не отводить память для MSD, а сделать её виртуальной. Со стороны хоста диск отформатирован и содержит файл APP.BIN. Если его считать — это содержимое флэша. Я просто копирую файл APP.bin (до 496K) и образ сразу записывается во флэш.
То есть размер APP.bin = MCU Flash Size — BOOTLOADER Size (16K у меня)
Мне за MS сложно отвечать, но работает.
Примерно так же работает во всех дебаггерах с поддержкой MSD с одной стороны и SWD/SWC с другой стороны (NUCLEO и ещё 100500).
Описанное в статье и правда избыточно, я так изначально и задумывал — не вдаваться в оптимизацию алгоритма работы прежде, чем все не будет работать. Лично я не планирую использование бута в том виде, в котором он описан — это скорее учебный вариант. В дальнейшем я просто буду его модифицировать отдельно под очередной проект. Где флешка будет внешняя, где — принимающий интерфейс не ЮСБ, и т.д.
Вы имеете ввиду, что нужно отдать USB_MSD всю флешку, кроме той, где хранится бутлоадер? А потом при перезагрузке прыгать по тому адресу, где лежит файл APP.BIN (ОС его туда положила — и этот адрес не сложно вычислить без монтирования файловой системы, а вручную, по таблице FAT)?
Тут проблема в том, что я не могу предугадать действия ОС. Вдруг она разобьет файл на куски, и разбросает их по диску. Это вполне возможно, если на MSD диске лежат какие-то другие файлы (например, несколько разных прошивок, или файлы настройки чего-то внутри МК). Поэтому я и пользуюсь FatFS — что бы легко получить доступ к файлу невзирая на то, что ОС с ним творила.
Его, как минимум, можно использовать для обучения :-)
Что значит " устройство уже является win-совместимым"? То есть у него уже есть какой-то USB интерфейс (и он настоящий, не usb-uart конвертор)? Тогда можно прошить этот бут на ваше устройство и потом через него обновлять вашу прошивку. Нужна только кнопка, которая при включении устройства выбирает — грузится в режиме бута или же в режиме исполнения вашей программы.
Я пробовал через этот бутлоадер заливать приложения, использующие USB (CDC или MSD). Удачно все.
В моем случае есть MIDI-USB устройтсво, на STM32, так же задумывался о бутлоадере, в виде MS, но руки не дошли. И вот интересует как использовать бутлоадер в данном случае. Копки «Update» не придвидится… вы не думали реализовать бутлоадер в виде композит устройтва, в возможностью выбора режима при подключении устроятва к USB?
PS. Насколько я понимаю, такое устройство должно поддерживать две конфигурации, одна из которых — как раз и будет ваш кастомный бутлоадер для перепрошивки.
Ну хоть какая-нибудь кнопка будет в вашем устройстве? Этот бут можно завести на вообще любую кнопку.
Нет, в виде композита не думал, т.к. у всего, для чего я буду использовать этот бут — есть хотя бы одна кнопка.
Где-то на electronix.ru рекомендуют переход на основную прошивку выполнять после полного ресета, иначе возможны фокусы. Ну а определить что грузить — по флагу во флеш или в BkpSram.
Я не так давно написал бут для STM32F373, когда оказалось, что вызвать встроенный DFU-бут на F3 невозможно (баг в буте).
На F4 семействе кстати работает без проблем.
У меня бут прошивает с SD-карты, но на будущее — это не удобно.
Бут занял 27 КиБ, это Nil + HAL + FatFS + tinf (zlib inflate) + RIOT CBOR + SHA1.
Это шоттки по питанию, они есть на схеме в публикации.
Большая часть платы приведена тут, кстати. Остальное — карта памяти uSD, радиомодуль nRF24L01+, аналоговый датчик света, EEPROM память и сокеты для дочерних плат
Спасибо.
Обойтись было можно, но не было смысла — я просто подкидываю платы для хобби к другим заказам с более сложными платами.
Форм фактор свой, не кредитный, просто так вышло.
Это очень клевые стойки от Wurth Electronics
Подскажите, у вас ВЧ тракт от нордика собран на компонентах типоразмера 0805? В даташите рекомендуют использовать 0402. Есть ли разница в качестве сигнала? И какова дальность у вашего устройства?
Сам нордик оригинальный?
Мне больше нравятся антенны на самой плате (ну или SMD керамические, хотя это дороже и менее эффективно). Я понимаю, у них разные области применения и где-то нужны внешние, но у меня таких задач не было…
Ориентировался вот на эти аппноты от TI: swra351a.pdf, swra228c.pdf, swru120b.pdf, swra161b.pdf.
Ну и не всегда есть под рукой приборы, которые позволяют оценить, как ваша, только что придуманная антенна работает. Однажды у меня в питании nRF24L01 стоял DC-DC и все работало вроде, но не очень. А когда дошли руки посмотреть анализатором спектра — был неприятно удивлен:
Подскажите, а какой минимальный размер MSD может быть. Я пытаюсь соорудить для опытов с внешним ЕЕПРОМ на 60кБайт — винде не удается отформатировать диск…
STM32 USB Mass Storage Bootloader