Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 и DFU
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
_Макс
Плата SK-MSTM32F107. Установил перемычку J5, соответственно BOOT0 = 1. BOOT0 подтянул к земле. Подключил к ПК. Залил release через JTAG. Включаю, работает работает загруженный софт, на USB никакой реакции. Что я сделал неправильно?
skripach
Цитата
на USB никакой реакции

А какой реакции вы ожидали?
_Макс
Цитата(skripach @ Jun 20 2010, 02:07) *
А какой реакции вы ожидали?

Согласно документам от ST, должен запускаться системный загрузчик и компьютер должен обнаружить устройство STM devide in DFU mode.
zksystem
Цитата(_Макс @ Jun 19 2010, 19:28) *
Плата SK-MSTM32F107. Установил перемычку J5, соответственно BOOT0 = 1. BOOT0 подтянул к земле. Подключил к ПК. Залил release через JTAG. Включаю, работает работает загруженный софт, на USB никакой реакции. Что я сделал неправильно?

Если хотите запустить записанную через JTAG программу во FLASH памяти, BOOT0 должен быть 0.
_Макс
Цитата(zksystem @ Jun 20 2010, 12:00) *
Если хотите запустить записанную через JTAG программу во FLASH памяти, BOOT0 должен быть 0.

Нет, я хочу запуститься со встроенного загрузчика и прошить по USB, а у меня при BOOT0=1 грузится моя прога, что была во флеше. Вроде бы на это плате только J5 отвечает за эту ногу, я его поставил, что еще понять не могу.
zksystem
Цитата(_Макс @ Jun 20 2010, 13:13) *
Нет, я хочу запуститься со встроенного загрузчика и прошить по USB, а у меня при BOOT0=1 грузится моя прога, что была во флеше. Вроде бы на это плате только J5 отвечает за эту ногу, я его поставил, что еще понять не могу.

подключитесь через JTAG и в режиме отладки посмотрите, куда и почему не доходит.
Кстати, о BOOT0... при BOOT0=1 и BOOT1 имеет роль:

Нажмите для просмотра прикрепленного файла
_Макс
Цитата(zksystem @ Jun 20 2010, 12:31) *
подключитесь через JTAG и в режиме отладки посмотрите, куда и почему не доходит.
Кстати, о BOOT0... при BOOT0=1 и BOOT1 имеет роль:

Нажмите для просмотра прикрепленного файла

Да, я подтянул BOOT1 к земле от источника питания.
Как проверить буты, где их искать?
Serjio
Попробуйте подтяжку USB напрямую к 3.3в без транзистора. У нас сработало...
skripach
Цитата
Согласно документам от ST, должен запускаться системный загрузчик и компьютер должен обнаружить устройство STM devide in DFU mode.

Понятно, а от USB вы какой реакции ждёте?
Нет в STM32 встроенного USB загрузчика, есть UARTовый, или я что-то не понял.

MALLOY2
Есть, но не у всех, надо смотреть в каких он есть, где то по этому поводу есть документ
_Макс
Цитата(Serjio @ Jun 20 2010, 18:29) *
Попробуйте подтяжку USB напрямую к 3.3в без транзистора. У нас сработало...

Ваша правда. Транзисторы VT2 и VT3 портили всю малину, вообще не понимаю зачем они. Заземлил базу VT2, на BOOT0 образовался высокий уровень, теперь когда перемычка J5 установлена прога из флеша не грузится. В отладчике на стопе вижу адреса 0x1FFFBxxx, это т.н. системная память согласно даташита. BOOT1 можно не подтягивать к земле, разницы никакой. Значит загрузчик работает но комп. по одному разу на каждом порту обнаружил неопознаное устройство, высветил сообщение в системном трее и все. Диалога для нового оборудования не показал, в диспетчере новых устройств нет. Винда обычная без надстроек. При попытке установить драйвер из C:\Program Files\STMicroelectronics\Software\DfuSe\Driver пишет "В указанном месте отсутствуют сведения об оборудовании". Как быть?
aaarrr
Цитата(_Макс @ Jun 20 2010, 23:16) *
Значит загрузчик работает но комп. по одному разу на каждом порту обнаружил неопознаное устройство, высветил сообщение в системном трее и все. Диалога для нового оборудования не показал, в диспетчере новых устройств нет... Как быть?

Это значит, что USB-устройство не работает.
skripach
Цитата
Есть, но не у всех

Прошу прощения, новость для меня, со 107ми дела не имел.
_Макс ERRATу читали?

_Макс
Цитата(skripach @ Jun 20 2010, 23:02) *
_Макс ERRATу читали?

Читал, ничего криминального там не нашел. У меня datacode 942. Думаю может еще какие-то ошибки на отладочной плате?
_Макс
Ребят, ну помогите, не знаю куда копать даже, никогда ранее с DFU не работал.
Загрузчик зацикливается на инструкциях DC32, DC16, LDMDAVS. В чем может быть проблема?
Код
   0x1fffc23c: 0x2100e002     MRSCS     lr, CPSR
   0x1fffc240: 0x60306021     EORSVS    r6, r0, r1, LSR #32
   0x1fffc244: 0xf8df6830     LDC2L     p8, c6, [pc], {48}
   0x1fffc248: 0xf64a90a0     [ARM      instr]
   0x1fffc24c: 0x68712aaa     LDMDAVS   r1!, {r1, r3, r5, r7, r9, r11, sp}^; User registers
   0x1fffc250: 0xd2322902     EORSLE    r2, r2, #32768        ; 0x8000
   0x1fffc254: 0xd2302802     EORSLE    r2, r0, #131072    ; 0x20000
   0x1fffc258: 0xa000f8c9     ANDGE     pc, r0, r9, ASR #17
   0x1fffc25c: 0xfc42f001     MCRR2     p0, 0, pc, r2, c1
   0x1fffc260: 0xfa0bf002     BLX       0x202f8270
   0x1fffc264: 0x60282000     EORVS     r2, r8, r0
   0x1fffc268: 0xf844f000     MCRR2     p0, 0, pc, r4, c0
   0x1fffc26c: 0x45406828     DC32      1161848872            ; '(h@E'
   0x1fffc26e: 0x4540         DC16      17728                 ; '@E'
   0x1fffc270: 0x6830d1fc     LDMDAVS   r0!, {r2-r8, r12, lr, pc}
   0x1fffc274: 0x68211c40     STMDAVS   r1!, {r6, r10-r12}
   0x1fffc278: 0x2902b119     STMDBCS   r2, {r0, r3, r4, r8, r12, sp, pc}
   0x1fffc27c: 0xd303d007     MOVWLE    sp, #12295            ; 0x3007
   0x1fffc280: 0xfb00e008     BLX       0x200342aa
   0x1fffc284: 0xe00bf10b     AND       pc, r11, r11, LSL #2
   0x1fffc288: 0x43414918     MOVTMI    r4, #6424             ; 0x1918
   0x1fffc28c: 0xf06fe008     [ARM      instr]
   0x1fffc290: 0xe7fa417e     [ARM      instr]
   0x1fffc294: 0x417ff06f     CMNMI     pc, pc, RRX
   0x1fffc298: 0xe0014341     AND       r4, r1, r1, ASR #6
   0x1fffc29c: 0x1e496871     MCRNE     p8, #2, r6, c9, c1, #3
aaarrr
Цитата(_Макс @ Jun 23 2010, 12:49) *
В чем может быть проблема?

Невооруженным глазом видно, что этот "код" является просто бессмысленным набором команд.
_Макс
Цитата(aaarrr @ Jun 23 2010, 12:24) *
Невооруженным глазом видно, что этот "код" является просто бессмысленным набором команд.

Мне сложно сказать я крайне мало знаю ассемблер. Почему вы так решили? Значит ли это что загрузчика в устройстве нет? Почему тогда пространство не прописано нулями или единицами?
aaarrr
Цитата(_Макс @ Jun 23 2010, 13:46) *
Мне сложно сказать я крайне мало знаю ассемблер. Почему вы так решили?

Для человека хотя бы немного знакомого с ассемблером или даже просто с архитектурой процессора это должно быть очевидно.

Цитата(_Макс @ Jun 23 2010, 13:46) *
Значит ли это что загрузчика в устройстве нет? Почему тогда пространство не прописано нулями или единицами?

Это значит, что или вы смотрите не с того адреса, или не с тем смещением, или видите не то, что на самом деле присутствует в памяти.
_Макс
Цитата(aaarrr @ Jun 23 2010, 13:05) *
Это значит, что или вы смотрите не с того адреса, или не с тем смещением, или видите не то, что на самом деле присутствует в памяти.

Я смотрю на стопе в IAR, окно дизассемблера. Подскажите же где, что и как мне нужно посмотреть, чтобы знать наверняка?
skripach
Советую:
1. Запустить какой-нибудь пример HID устройства дабы проверить работу USB.
2. Написать свой загрузчик, будите знать как он работает.
_Макс
Цитата(skripach @ Jun 23 2010, 14:58) *
Советую:
1. Запустить какой-нибудь пример HID устройства дабы проверить работу USB.
2. Написать свой загрузчик, будите знать как он работает.

Поищу в демках от ST что-то для USB.
Разве можно затереть вшитый загрузчик (system memory)?
skripach
Цитата
Разве можно затереть вшитый загрузчик (system memory)?

Насчёт можно или нет не знаю, скорее конечно нельзя, но оно и не нужно.
Ничего не мешает расположить загрузчик в User Flash, тогда и джамперы ставить не нужно при каждой перепрошивке.
_Макс
Цитата(skripach @ Jun 23 2010, 23:57) *
Насчёт можно или нет не знаю, скорее конечно нельзя, но оно и не нужно.
Ничего не мешает расположить загрузчик в User Flash, тогда и джамперы ставить не нужно при каждой перепрошивке.

Вы жутко правы. А что можно почитать про написание загрузчика для STM32?
skripach
Цитата
А что можно почитать про написание загрузчика для STM32?

Форум, Programming manual, поискать пример реализации(в сети оно есть).
_Макс
Цитата(skripach @ Jun 23 2010, 23:57) *
Насчёт можно или нет не знаю, скорее конечно нельзя, но оно и не нужно.
Ничего не мешает расположить загрузчик в User Flash, тогда и джамперы ставить не нужно при каждой перепрошивке.

Нашел демо для DFU, проект представляет собой загрузчик для User Flash. C ним все заработало как ожидалось. Возможно в системном загрузчике вовсе нет поддержки DFU? Но в таком случае, какой смысл документа USB DFU protocol used in the STM32™ bootloader.pdf?
676038
Цитата(_Макс @ Jun 26 2010, 01:29) *
Возможно в системном загрузчике вовсе нет поддержки DFU? Но в таком случае, какой смысл документа USB DFU protocol used in the STM32™ bootloader.pdf?

А ножку OTG_FS_VBUS/PA9: Power supply voltage line к "Power Supply" подтягивать пробовал? см. STM32F105xx and STM32F107xx device bootloader AN2606, стр. 12.
_Макс
Цитата(676038 @ Jun 28 2010, 18:51) *
А ножку OTG_FS_VBUS/PA9: Power supply voltage line к "Power Supply" подтягивать пробовал? см. STM32F105xx and STM32F107xx device bootloader AN2606, стр. 12.

В SK-MSTM32F107 она по умолчанию подтянута к 5V USB через 11k.
ltm
1. У нас такая же проблема с попыткой запустить встроенный DFU USB bootloader, запустил все-таки кто нибудь или нет?
2. Стыдно признаться, но и запустить Firmvare Upgrade (демо проект для прошивки через USB) так же не получилось, хотя демопроект Virtual Com Port работает. Запускали на STM32F105. Вопрос к тем, у кого получилось с Device Firmvare Upgrade: что-то правили в исходниках (частота кварца 8МГц)? Пояснение: PID и VID читаются нулями.
topkin
Цитата(ltm @ Sep 20 2010, 20:42) *
1. У нас такая же проблема с попыткой запустить встроенный DFU USB bootloader, запустил все-таки кто нибудь или нет?
2. Стыдно признаться, но и запустить Firmvare Upgrade (демо проект для прошивки через USB) так же не получилось, хотя демопроект Virtual Com Port работает. Запускали на STM32F105. Вопрос к тем, у кого получилось с Device Firmvare Upgrade: что-то правили в исходниках (частота кварца 8МГц)? Пояснение: PID и VID читаются нулями.

У вас какой датакод микросхемы? Подробнее ТУТ , страница 27
ltm
Наконец-то получилось с Firmvare Upgrade. Были сделаны следующие моменты: 1-изменены исходники, так чтобы частота тактирования блока USB была 48Мгц, в частности установлен PLL; 2-было добавлено изменение указателя на таблицу векторов при выходе из бутлоадера.
Что касается даты выпуска процессора, то он более поздний, чем указанный в Errate, тем не менее встроенный USB bootloader так и не заработап.
Deka
А не могли-бы Вы выложить получившийся рабочий код?
IceS
Цитата(ltm @ Sep 20 2010, 20:42) *
1. У нас такая же проблема с попыткой запустить встроенный DFU USB bootloader, запустил все-таки кто нибудь или нет?

"Не прошло и пол года" biggrin.gif
Да, заработал.
Тоже мучался с этой проблемой, схема девайса чутка отличается от схемы кита STM3210C-EVAL. В ките DFU Boot работал - в плате нет.
После подключения ноги PA9 (OTG_FS_VBUS pin) к питанию 5 Вольт (условие работы проца в Device mode, об этом уже писали выше) - DFU BOOTLOADER заработал, прошивка сливается и заливается как и положено. Остальные ноги PA10, PD6, PB5 подтянуты (кто-то к +3.3, кто-то к земле). На boot0 стоит джампер на 3.3, boot 1 намертво запаян на землю. Такты проц берет от генератора 25МГц.


Цитата(_Макс @ Jun 28 2010, 19:55) *
В SK-MSTM32F107 она по умолчанию подтянута к 5V USB через 11k.

Видимо большое сопротивление. Я к 3.3 подтягивал - результат тоже отрицательный.
uriy
Непонятный глюк с STM32F105. DFU запускается только после третьего подключения кабеля. Загружаю плату в режиме бута. Подключаю к USB - устройство не опознано выдает VID и PID но нулям. Отцепляю кабель пдключаю снова, опять не определяет. Подключаю в третий раз устройство опознано! Эсперимент повторил более 10 раз. На разных компах с операционками Win7 и WinXP с разными кабелями. 100% повторяемость. Пробовал делать паузы между подключениями кабеля от примерно 1 сек до 30 сек. Всегда только с 3 раза. 4, 5, 6 и все последующие подключения проходят с первого раза.
Датакод указан 127. Предполагаю что это 11 год, т.е. проблема с бутом для микросхем до датакода 927 не должна проявляться.
uriy
Собрал вторую плату ведет себя точно так же!
Nutz
IceS, а на stm32f105 с 64 ногами UART_2 находится на другом порту. Не подскажешь нужно подтягивать его к земле или питанию в таком случае? А то во всех мануалах чётко говориться именно об этих номерах портов.
PheeL
Не хотелось создавать отдельный топик, поэтому спрошу здесь, посколько вопрос по теме.
Существует ли возможность с помощью DFU-bootloader'а загрузить и исполнить пользовательский код размещённый в SRAM?
Если да, то тогда будем углубляться в детали.
PheeL
Цитата(PheeL @ Jan 11 2013, 14:36) *
Не хотелось создавать отдельный топик, поэтому спрошу здесь, посколько вопрос по теме.
Существует ли возможность с помощью DFU-bootloader'а загрузить и исполнить пользовательский код размещённый в SRAM?
Если да, то тогда будем углубляться в детали.

Отвечаю сам себе - да, существует! Смотреть в документы CD00264379.pdf, CD00167594.pdf.
При использовании ПО предоставляемой фирмой разработчиком, в частности STDFU Tester, DFUse Demonstrator, убедиться, что бинарный файл слинкован с таблицой векторов _единым_блоком_ т.к. после загрузки в SRAM при исполнении ПО операции "Leave Dfu Mode" используется начальный адрес _поледнего_ загруженного бинарного блока! Если вы на базе исходников делаете загрузку через DFU протокол сами, то там проще, т.к. есть аргумент с адресом запуска в команде выхода из загрузчика.
ВитГо
Цитата(PheeL @ Jan 15 2013, 20:28) *
Отвечаю сам себе - да, существует! Смотреть в документы CD00264379.pdf, CD00167594.pdf.
При использовании ПО предоставляемой фирмой разработчиком, в частности STDFU Tester, DFUse Demonstrator, убедиться, что бинарный файл слинкован с таблицой векторов _единым_блоком_ т.к. после загрузки в SRAM при исполнении ПО операции "Leave Dfu Mode" используется начальный адрес _поледнего_ загруженного бинарного блока! Если вы на базе исходников делаете загрузку через DFU протокол сами, то там проще, т.к. есть аргумент с адресом запуска в команде выхода из загрузчика.


а какую программу нужно использовать для прошивки по USB ?

я правильно понимаю - что если использовать например stm32f407 в своем проекте и развести USB на PA9-PA12 то можно перепрошить микроконтроллер прямо с компьютера ?
zemlemer
Таже ситуация с SK-MSTM32F107. Пока не закоротишь резистор R4 на схеме http://starterkit.ru/html/doc/SK_MSTM32F107.pdf. Причем работает очень странно: при положении загрузки в режиме dfu, если вставить usb разъем, обнаруживается сразу, если нажать ресет при вставленном usb, 14 ошибок энумерации пока устройство не определится. Что еще смущает: если подключить PC9 к 5-ти вольтам через резистор 100 ом, на ноге PC9 - 1 вольт, так что срабатывает только к.з. PC9 к 5-ти вольтам. Поделитесь, пожалуйста, опытом как правильно подключать SK-MSTM32F107 в режиме dfu, а то боязно.
vptr
Цитата(ВитГо @ Feb 28 2013, 18:45) *
а какую программу нужно использовать для прошивки по USB ?

я правильно понимаю - что если использовать например stm32f407 в своем проекте и развести USB на PA9-PA12 то можно перепрошить микроконтроллер прямо с компьютера ?

правильно понимаете, можно прошить прямо с компьютера. Прога DfuSe Demonstrator. Там прошивка выполняется в два этапа . На первом этапе из hex файла формируется новый файл, который потом на втором этапе заливается в процессор. Процессор надо ставить в режим загрузки, управляя входами boot. Заливка по USB описана здесь http://www.st.com/st-web-ui/static/active/...rchtype=keyword
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.