http://stastaka.wordpress.com/category/stm32/
を参考にしました。
http://static.leaflabs.com/pub/codesourcery/gcc-arm-none-eabi-latest-osx32.tar.gz
をダウンロードして/usr/local/armに入れる。
/usr/local/arm/binにパスを通しておく。
$ brew install dfu-util
でdfu-utilをインストール。
(追記)DFUモードにしないとdfu-utilは使えない
DFUモードにするには「USERボタンを押しながらRESETを押して離す」
http://strawberry-linux.com/stbee/cc
からサンプルファイル minidemo.zipをダウンロード。
焼くためのmini-demo.binを生成する方法は以下。
mini-demoフォルダでmakeして.elfを生成し、(arm-none-eabi-)objcopyでbinを生成する。
$ make arm-none-eabi-gcc --version arm-none-eabi-gcc (GCC) 4.4.1 Copyright (C) 2009 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. make -C lib make -C STM32F10x_StdPeriph_Driver make[2]: Nothing to be done for `all'. make -C CMSIS/Core/CM3 make[2]: Nothing to be done for `all'. mini-demo.elf : section size addr .isr_vector 484 134230016 .text 2268 134230500 .data 20 536870912 ._usrstack 256 536870932 .ARM.attributes 45 0 .stab 16044 0 .stabstr 68806 0 .comment 252 0 Total 88175 $ arm-none-eabi-objcopy -O binary mini-demo.elf mini-demo.bin
これでmini-demo.binができる。
書き込んでみる。
% dfu-util -a0 0x0483:0xdf11 -s 0x08003000 -D mini-demo.bin dfu-util 0.6 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 More than one DFU capable USB device found, you might try `--list' and then disconnect all but one device
複数のUSBデバイスがあるっていってる。おかしいな。
listオプションで表示させてみる。
% dfu-util --list dfu-util 0.6 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 Found Runtime: [05ac:821f] devnum=0, cfg=1, intf=3, alt=0, name="UNDEFINED" Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/12*001Ka,116*001Kg"
このRuntime: [05ac:821f]ってやつが誤動作の原因っぽい。
こいつが何者かを調べるためにlsusbを使う。
lsusbコマンドはMacでは
system_profiler SPUSBDataType
を使う。
$ system_profiler SPUSBDataType | less
すると、
Bluetooth USB Host Controller: Product ID: 0x821f Vendor ID: 0x05ac (Apple Inc.) Version: 0.97 Speed: Up to 12 Mb/sec Manufacturer: Apple Inc. Location ID: 0xfa113000 / 6 Current Available (mA): 500 Current Required (mA): 0
BluetoothがUSBデバイスとしてdfu-utilに認識されてることがわかった。
試しにBluetoothをOFFにしてlistしてみると、Runtimeがいなくなった。
よって再度書き込みをトライ。
% dfu-util -a0 0x0483:0xdf11 -s 0x08003000 -D mini-demo.bin dfu-util 0.6 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 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/12*001Ka,116*001Kg" 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 1024 No valid DFU suffix signature Warning: File has no DFU suffix DfuSe interface name: "Internal Flash " Downloading to address = 0x08003000, size = 2772 ... File downloaded successfully
できた!