Производство и разработка электроники
Комментарии 17
0
А такое число звездочек и приведений типа типично для embedded? И еще вопрос: выравнивание там чем-то гарантируется или это счастливое совпадение звезд?
0
Для HAL это «нормально», там вообще код в стиле Java EE, если выкинуть лишнее — внезапно становится в три-четыре раза компактнее. Cortex M3 выравнивание не критично.
+1
Внимательно смотрим и дивимся, что флеш вплоть до адреса 0x0800C000 закрыт для записи и записываем этот адрес, он нам понадобится…

странно, у меня начало основной программы в таком же камне 0x08006000

а ведь 0xC000 это 48 кбайт. То есть, если я не ошибаюсь, вы отдали для загрузчика 49 кб из 64 кб (ведь именно столько доступно в stm32f103c8 на голубой таблетке?). А основной программе осталось 64-48 = 16 кб. Как то прискорбно вышло.
0
А основной программе осталось 64-48 = 16 кб

Это если не знать фокуса этой серии. А фокус в том, что флешка там, где она должна закончиться, не заканчивается. Контроллеры серии F103C8 точно имеют (по крайней мере все те, с которыми я работал) 128 кБ флеша (хотя по спеке — всего 64). Такой же фокус у меня прошел на L152C8, по крайней мере приложение из региона ~70-80k вполне себе успешно работает.
Внешний пруфлинк вот тут.
+2
Это если не знать фокуса этой серии. А фокус в том, что флешка там, где она должна закончиться, не заканчивается.

Да этот фокус почти все знают. Но в продакшене я бы его применять не стал. Ибо STMicroelectronics могут расстроится и следующие 10000 (например) микроконтроллеров поставить вам уже реально на 64 кбайта. И вы ни чего им не предъявите)
+4
128кб это камень СВ. С8 имеет 64кб. Те страницы, что за 64кб, их работа не гарантируется, ST их не тестит.
0
Чет не понял, зачем все это нужно. В чем профит, использования dfu?
0

Я честно говоря тоже не понял, но предположу, что профит в том, что для прошивки st-link или uart не нужен. Если в устройстве есть usb, можно через него прошивать. Но 48кб это перебор. И необходимость специальной программы, тоже как-то не серьезно. Можно же эмулировать usb флэшку и прошивку на нее просто копировать. St-link v2.1 по-моему так умеет.

0
Делаете девайс с USB, но без UART-а (выводы нужны подо что-то другое, например, или просто неудобно их выводить), прошиваете через него. Сейчас это многие используют, например в некоторых контроллерах для коптеров — USB является основным портом, для прошивки и настройки, нет необходимости тыкаться по разъемам UART-ов, которые могут еще и на других GPIO оказаться (не на тех, где ждет загрузчик).
0
Более мощные, например 4хх серия по дефолту имеют встроенный dfu загрузчик, как по типу уартовского.
0
полным отсутствием пошаговой инструкции

4 слова, полностью описывающие всю линейку STM32.
0

Области памяти, доступные для чтения/записи/удаления, определяются в файле USB_Device/App/usbd_dfu_if.c — описании дескриптора интерфейса. Пример строки описания:


#define FLASH_DESC_STR      "@Internal Flash   /0x08000000/03*016Ka,01*016Kg,01*064Kg,07*128Kg,04*016Kg,01*064Kg,07*128Kg"

Подробнее о формировании строки дескриптора можно прочесть в разделе DFU mode interface descriptor документа UM0424.


В целом следует понимать, что протокол USB-DFU следует — это именно USB протокол. Он имеет несколько функций (записать блок, считать блок, уничтожить блок, считать состояние, считать статус, очистить статус, отключиться). При взаимодействии по DFU, контроллер должен выполнить какие-то действия, в простейшем случае — это записать данные во флэш или считать их. Но валидация адресов — лежит на плечах разработчика в коде микроконтроллера. ПО с компьютера ничто не мешает сгенерировать запись в область RO (где обычно располагается бутлоадер), и контроллер должен это проверить и вернуть ошибку. Для того чтобы демо-утилита от STM знала, куда она может писать, и что может читать — и передается эта строка.

Только полноправные пользователи могут оставлять комментарии. , пожалуйста.