STM32F04 в режиме DFU распознается только при питании от батареи (Win10)
Я сделал STM32F042k6, устройство с батарейным питанием, чтобы прошивать протокол vi DFU.
Для этого я отсоединяю батарею, подключаю BOOT0 к VCC, а затем подключаю устройство к USB3-порту ПК (USB2 не доступен). Устройство не распознается и показывает VID:0000 PID:0002 (случай I)
Однако, когда я впервые подключаю батарею, а затем подключаю устройство к ПК, оно распознается без суеты (случай II).
Проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы инициировать переход к программе начального загрузчика по команде в программном обеспечении, но затем я достигаю точно такого же состояния, как в случае I.
Не могли бы вы помочь мне определить, какие условия для правильной загрузки я нарушаю?
РЕДАКТИРОВАТЬ: способ, которым я обнаружил проблему, когда я реализовал программный переход к загрузчику. Казалось, что он вообще не работает (устройство VCP исчезло, и устройство с ошибкой <> появляется в системном PID:0002 VID:0000). Я хотел войти в загрузчик, потянув за булавку BOOT0, но я видел, что у меня все получается только при циклическом питании от батареи. Выключение питания USB привело к тому же самому устройству с ошибкой дескриптора.
Я подозреваю, что при включении через USB, загрузчик имеет некоторые проблемы с связью и не может установить надлежащие PID и VID. При питании от батареи - этой проблемы не существует.
2 ответа
Я столкнулся с этой же проблемой на STM32 Mini F401 и копался в ней несколько дней. В отличие от OP, мне не удалось найти какие-либо электрические условия, которые надежно заставляли загрузчик работать правильно. Мне удавалось программировать доску примерно раз в 20 попыток, что очень замедляло мой процесс.
В конце концов я обнаружил, что могу зайти в диспетчер устройств Windows, показать скрытые устройства, и там будет запись в Universal Serial Bus Devices под названием . Когда возникает проблема, плата подключена в режиме dfu, но это устройство не помечено как активное в диспетчере устройств.
Чтобы устранить проблему последовательно, вы можете вручную удалить скрытый
STM32 BOOTLOADER
запись, удаление устройства (драйвера удалять не нужно, достаточно удалить устройство). Затем перезагрузите плату в режиме DFU, и она каждый раз должна подключаться должным образом. К сожалению, мне нужно выполнять этот процесс каждый раз, когда я хочу запрограммировать, но это намного лучше, чем непоследовательные/периодические сбои раньше.
У вас есть доска открытий?
Я прочитал в Справочном руководстве STM32F042x4/x6 (DocID025832 Rev 5):
В STM32F042x4/x6 встроена высокоскоростная периферия USB-устройства, соответствующая спецификации USB версии 2.0.
(часть 3.19, с.27).
В AN2606 (Rev 33) в таблице показана конфигурация USB, которая используется загрузчиком DFU в USB FS (Full-speed):
Я предполагаю, что USB в загрузчике - 2.0, но USB 3.0 должен быть совместимым с USB 2.0. Таким образом, можно использовать порт USB 3.0.
Я предлагаю вам использовать DfUSe Demo от ST. Его интерфейс состоит из вкладки, где отображаются доступные устройства DFU при обнаружении. Я пытаюсь сделать это на другом STM32x, выполнив следующие действия:
- Откройте программу DfuSe Demo.
- Подключите BOOT0 к Vdd, чтобы перевести микро в режим DFU.
- Подключите USB пользователя к порту вашего компьютера.
- Название вашего устройства должно появиться в поле "Доступные устройства DFU".
Вы также можете попробовать использовать напрямую PA11 и PA12 (в соответствии с таблицей 12) вместо USB-порта вашей платы.
РЕДАКТИРОВАТЬ:
Другое решение для обновления вашей прошивки без запуска boot0 - это перейти прямо в загрузчик DFU ST внутри вашей прошивки. В противном случае вы можете создать свой собственный загрузчик IAP (In-Application Programming).
Надеюсь, это поможет.