Jump to content

    
Sign in to follow this  
klen

stm32 DFU over USB

Recommended Posts

Всем привет.

я давно знал что начиная с stm32f2 через USB интерфейс можно читать писать микросхему. но руки не доходили. наконецто мне жеско объявили что в девайсе не будет житага и уарта. серийные изделие отавалось програмить по dfu через юсб. пришлось разобратся. также мне изветно было что у стм есть утилитки которые под виндой делает этот функционал. до данного место наверно Всем колегам я нового не расказал.

 

далее возник вопрос а как это делать под нашим любимым линуксом. оказалось как всегда проще простого. люди уже позаботились и ежечасно и еженочно заботтся сдавая комиты в репозитории :) Имется открытая тулза dfu-util (http://dfu-util.gnumonks.org/) wiki (http://www.seeedstudio.com/wiki/Dfu-util)

итак.

1. есть плата с впаяной STM32F4, PA11 PA12 подпаяны к юсб разъему. boot1 накорпус, boot0 подтянут к нулю и может быть перемычкой затянут на +3,3v

2. есть бинарник которы хочется залить. при наличие elf его генерим :

arm-kgp-eabi-objcopy --strip-all  -O binary image.elf image.bin

 

3. втыкаем перемычку boot0 -> 3.3 заставляем грузанутся из системной памяти в корой ST-шный загрузчик

4. С помощью тулзы нарезаем страницы флеша:

klen@klen-desktop:/opt/home/polygon/dfu-util-0.7/src$ ./dfu-util -a 0 --dfuse-address 0x08000000 -D image.bin

dfu-util 0.7

 

Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc.

Copyright 2010-2012 Tormod Volden and Stefan Schmidt

This program is Free Software and has ABSOLUTELY NO WARRANTY

Please report bugs to dfu-util@lists.gnumonks.org

 

Opening DFU capable USB device... ID 0483:df11

Run-time device DFU version 011a

Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg"

Claiming USB DFU Interface...

Setting Alternate Setting #0 ...

Determining device status: state = dfuERROR, status = 10

dfuERROR, clearing status

Determining device status: state = dfuIDLE, status = 0

dfuIDLE, continuing

DFU mode device DFU version 011a

Device returned transfer size 2048

No valid DFU suffix signature

Warning: File has no DFU suffix

DfuSe interface name: "Internal Flash "

Downloading to address = 0x08000000, size = 112052

.......................................................

File downloaded successfully

 

5. вытягиваем джампер и ресетим. наслождаемся. в качестве джампера наверно микротактовую кнопку лучше впаять - нажал заресетил отпустил, пертыкать тогда не нада будет.

 

утилитка ничего особого не тянет из системы

klen@klen-desktop:/opt/home/polygon/dfu-util-0.7/src$ ldd ./dfu-util 
    linux-vdso.so.1 =>  (0x00007fff8bb7f000)
    libusb-1.0.so.0 => /usr/local/lib/libusb-1.0.so.0 (0x00007fba65d16000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fba6597e000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fba65775000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fba65557000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fba65f5b000)

 

есть еще в dfu-suffix только я еще непросек нафига оно надо.

отныне dfu-utils будет в моей сборке тулсов как вкусная и полезная витаминная добавка.

 

для сильно обездоленных и страждущих за иноземную веру можно процес прикрутиь к винде. не вижу проблем.

dfu_utils_x86_64.tar.7z

Share this post


Link to post
Share on other sites
...

для сильно обездоленных и страждущих за иноземную веру можно процес прикрутиь к винде. не вижу проблем.

Разрабатываем под linux, а вот устройства иногда эксплуатируются под виндой. У меня с ходу не получилось загрузить по DFU через самосборный dfu-util прошивку =( т.к. dfu-util использует libusb версии 1.0, то под винду приходится собирать с libusbx. libusbx умеет работать через 3 драйвера: libusb0-win32, libusbk и через "супостатский" winusb. Со всеми тремя драйверами dfu-util в процессе заливки ломается в разных местах. Разработчики libusbx предполагают, что проблема где-то в dfu-util. Если вместе разберёмся как под виндой заставить работать dfu-util, то будет очень даже удобно пользоваться одним инструментом и под линь и под вынь.

Share this post


Link to post
Share on other sites
Разрабатываем под linux, а вот устройства иногда эксплуатируются под виндой. У меня с ходу не получилось загрузить по DFU через самосборный dfu-util прошивку =( т.к. dfu-util использует libusb версии 1.0, то под винду приходится собирать с libusbx. libusbx умеет работать через 3 драйвера: libusb0-win32, libusbk и через "супостатский" winusb. Со всеми тремя драйверами dfu-util в процессе заливки ломается в разных местах. Разработчики libusbx предполагают, что проблема где-то в dfu-util. Если вместе разберёмся как под виндой заставить работать dfu-util, то будет очень даже удобно пользоваться одним инструментом и под линь и под вынь.

куда не копнеш везде безнонная дыра...

окзываеццо! libusb-1.0 это уже некошерно, ее разработчики разосрались с маинтейнерами... плюнули им в рожу и сделали форк libusbx. выкачал из репа, собрал libusbx, чтоб все разом незавалилось попробывал статически попересаберёвывать всякую шнягу работающую через usb. вроде работает так же как и на родной для дистра моего линуха libusb-1.0. пересобрал dfu-util, тоже работает не падает. шъет и читает. в аот масдаем еще не пробывал.

 

ps. есть у меня одна теория - если по ходу ДЕЛА нужно обатится к масдаю - переформулируй условия задачи. напримен откажись от этих денег и заработай больше других (больше за счет уменьшения потраченных нервов и тд)! :)

Share this post


Link to post
Share on other sites

Что-то я не понял. Неужели ST никак не позаботился о софте под винду для работы с usb-dfu?

Помнится, что для прошивки по ком-порту были выложены и апноты и исходники...

А по делу - очень полезно, что вы попробовали-таки эту фичу. Спасибо за инфу!

Share this post


Link to post
Share on other sites

Никогда не заморачивался штатными фитюльками производителя. У меня 103-й с USB. Написал (адаптировал) простейший пример для работы как обычная флэшка (занимает около 10 К памяти всего, причем с декодированием). Прошивка изначально кодируется и передается для обновления устройства конечному пользователю в качестве обновления ПО. Он втыкает девайс хоть в виндовый комп, хоть линуксовый и просто переписывает этот файл на получившуюся флэшку.

Так-же был вариант и с подключенным к процу скалеру (RTD2662 от Realtek), в нем стоит свой CPU с выполнением команд из SPI флэши, так при этом имитировалась флэха с двумя дисками. Один для обновления ПО управления, второй для обновления ПО скалера.

 

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

И замыкать ничего не надо при обновлении ПО. Просто втыкнуть в USB.

Установка параметров происходит аналогично, только сначала необходимо подать питание устройству - потом втыкнуть USB. Работает уже само приложение и представляется стандартным HID устройством. Работа с ним обеспечивается через SetFeature/GetFeature и не требует установки никаких специальных драйверов.

Или по аналогии с загрузчиком прикидывается так-же флэшкой, только теперь в качестве файла выступает файл параметров устройства.

 

Share this post


Link to post
Share on other sites
Да, конечно сначала необходимо зашить загрузчик. Зато потом голова не болит, что прошивку кто-то использует для тиражирования...

Ну дык вот теперь и первый раз голова не болит - шъется штатными средствами с коробки, правда если прошивка шифрованная то тогда нада свой загрузчик и превый раз шить людым способом его.

 

2_demiurg_spb

есть их виндовые утилитки тока мне они не пришей, я хочу одной во всех системах шить ... хочу и буду.:)

Share this post


Link to post
Share on other sites
Что-то я не понял. Неужели ST никак не позаботился о софте под винду для работы с usb-dfu?

Помнится, что для прошивки по ком-порту были выложены и апноты и исходники...

А по делу - очень полезно, что вы попробовали-таки эту фичу. Спасибо за инфу!

Есть фирменный софт от ST, утилита DfuSe, давно её пользуюсь, работает хорошо.

Вот описание на неё: http://www.st.com/st-web-ui/static/active/.../CD00155676.pdf

Сама утилита недавно лежала на каждой страничке совместимых с ней контроллеров, сейчас её почему-то не вижу...

Если не найдёте, пишите - найду у себя на диске и пришлю.

Share this post


Link to post
Share on other sites

Я малость переделал dfu-util, чтобы работала под виндой.

 

https://github.com/blackyblack/LPC-DfuSe-Bootloader - смотрим по ссылке ридми. Там ссылка на чуть-чуть патченную libusbx (исправляет проблему с композитным устройством в винде), ссылка на чуть-чуть патченную dfu-util (исправляет проблему записи по нулевому адресу), а также прекомпилированные бинарники и образцы драйверов (INFы).

Share this post


Link to post
Share on other sites

а ктото может подсказать консольную программу для преобразования hex в dfu ?

 

шить буду утилитой по ссылке выше

 

но вот делать dfu утилитой что дает st - издевательство какое то.. столько раз мышкой нужно щелкнуть :-(

 

нет ли просто консольного конвертера из hex в dfu ?

Share this post


Link to post
Share on other sites
шить буду утилитой по ссылке выше

нет ли просто консольного конвертера из hex в dfu ?

можно просто bin заливать

dfu-util -v -d 0483:df11 -a 0 -s 0x08000000 -D firmware.bin
или проще:
dfu-util -a 0 -s 0x08000000 -D firmware.bin

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this