Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32F042: USB HID + DFU bootloader

Ср апр 12, 2017 21:27:55

Доброго времени суток!
Делаю один проект на основе МК STM32F042 с аппаратным Full-Speed USB. Устройство определяется
в системе как HID-устройство. Для будущего обновления прошивок хотелось бы сделать
собственный Bootloader.
Нашел в интернете способ обновления прошивки через DFU, когда МК определяется как Mass Storage Device
(проще говоря, обычная флешка). Но так как памяти в контроллере мало (32КБ), уместить и DFU, и прошивку (16КБ) не представляется
возможным.
Тогда возник вопрос: можно ли сделать так, чтобы при подключении в Boot-режиме устройство определялось в системе как
виртуальный COM-порт, а через него уже заливалась бы прошивка. Тогда не пришлось бы резервировать место
под Mass Storage Device, а потребовались бы лишь несколько КБ на загрузчик.
Собственно говоря, возможно ли такое? :)

Re: STM32F042: USB HID + DFU bootloader

Чт апр 13, 2017 11:46:39

самый простой повесить на UART1 CP2102 и юзать заводской бутлоадер(не забыть про перемычку)

Re: STM32F042: USB HID + DFU bootloader

Чт апр 13, 2017 13:38:16

Возможно. Вот здесь c USB воевали и товарищ isx как раз делал виртуальный COM. И, если не ошибаюсь, он же запостил статейку по этому поводу.

Re: STM32F042: USB HID + DFU bootloader

Пт апр 14, 2017 09:27:01

Я тут подумал, собственно говоря, для чего использовать именно стандартный пин BOOT0?
Делаем на плате доп. кнопку. Если при включении кнопка нажата - переходим в "загрузочный" режим - когда
девайс определяется как виртуальный КОМ-порт.

Память кристалла - страницы по 1 КБ. Далее с помощью утилиты пишем в КОМ-порт по 1 КБ, записываем во флеше,
начиная с нужного адреса.

Все, прошивка обновлена! Далее передергиваем девайс, уже не зажимая кнопку - он определяется как HID-устройство
и начинает работать с обновленной прошивкой.

Пните, если где не прав :dont_know:

Re: STM32F042: USB HID + DFU bootloader

Пт апр 14, 2017 10:43:51

gauss писал(а):Я тут подумал, собственно говоря, для чего использовать именно стандартный пин BOOT0?

Потому что у F042 есть встроенный DFU bootloader?

Re: STM32F042: USB HID + DFU bootloader

Пт апр 14, 2017 11:29:34

Он встроен не на аппаратном уровне, его можно реализовать только программно. А DFU bootloader и прошивка не влезут вместе

Re: STM32F042: USB HID + DFU bootloader

Пт апр 14, 2017 11:40:15

gauss писал(а):Он встроен не на аппаратном уровне, его можно реализовать только программно. А DFU bootloader и прошивка не влезут вместе

The boot loader is located in System Memory. It is used to reprogram the Flash memoryby using USART on pins PA14/PA15, or PA9/PA10 or I2C on pins PB6/PB7 or through the USB DFU interface.

Это, по-твоему, что означает? С F042 дело не имел, но F4 шил через такой-же USB DFU, утилита от ST для прошивки называется DfuSe.

Re: STM32F042: USB HID + DFU bootloader

Пт апр 14, 2017 13:29:31

Попробовал, получилось... Действительно работает :facepalm:
Только как я понял, есть один нюанс. Если память не пустая, то на BOOT0 должна быть 1 для USB DFU.
Если пустая, то совершенно неважно?

Re: STM32F042: USB HID + DFU bootloader

Пт апр 14, 2017 13:46:25

gauss писал(а):Только как я понял, есть один нюанс. Если память не пустая, то на BOOT0 должна быть 1 для USB DFU.
Если пустая, то совершенно неважно?

Открой AN2606, найди там свой F04x и прочитай про этот нюанс сам :)

Re: STM32F042: USB HID + DFU bootloader

Пн апр 17, 2017 01:27:14

Наконец-то разобрался и все сделал, в том числе шифрование прошивки :)
Теперь программатор не нужен вообще!

Re: STM32F042: USB HID + DFU bootloader

Пн апр 17, 2017 14:09:38

У меня вопрос по Mass Storage Device на STM32F103C8, каким образом с 32 кБ флешпамяти умудряются делать так, что он видится как диск размером 2мБ?

Re: STM32F042: USB HID + DFU bootloader

Пн апр 17, 2017 15:09:53

В С8 64КБ памяти. Кроме того, проц может быть посредником между хостом и картой памяти

Re: STM32F042: USB HID + DFU bootloader

Пн апр 17, 2017 15:43:40

gauss писал(а):В С8 64КБ памяти.
Ну да точно. Карты памяти точно нет, у меня китайский паяльник TS100 для перепрошивки используется USB и видится диск размером 2 мБ. Контроллер STM32F103TB6.
Ответить