Всем привет.
я давно знал что начиная с 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 будет в моей сборке тулсов как вкусная и полезная витаминная добавка.
для сильно обездоленных и страждущих за иноземную веру можно процес прикрутиь к винде. не вижу проблем.