トランジスタ技術2014年3月号に付いている『トラ技ARMライタ(写真左)』を Ubuntu の OpenOCD で使い、自作のSTM32F4基板(写真右)に接続する事に成功した。
この時、僅かではあるが、OpenOCD のバグを見つけたので、その報告も行う。
私の Ubuntu は、12.04 で、この上で OpenOCD を CMSIS-DAP 対応にビルドする。
$ sudo apt-get install libtool libudev-dev autoconf libusb-dev libusb-1.0-0-dev
$ git clone http://github.com/signal11/hidapi.git
$ cd hidapi/
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
$ sudo ln -s /usr/local/lib/libhidapi-hidraw.so.0 /usr/lib/libhidapi-hidraw.so.0
$ sudo vim.tiny /etc/udev/rules.d/99-hidraw-permissions.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"
を追加。
$ cd ..
$ git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd
$ cd openocd/
ハッシュは『6c74255ee2569bf2748ecbbd252e2a91bbce6644』だった。
$ ./bootstrap
$ ./configure --enable-maintainer-mode --enable-cmsis-dap --enable-hidapi-libusb
$ make
$ sudo make install
トラ技ARMライタとSTM32F4とは SWDIO、SWCLK、NRESET、GNDを接続。
/usr/local/share/openocd/scripts/target/stm32f4x.cfgの 38行目の「 jtag_ntrst_delay 100」をコメントアウトし、STM32F4の電源を入れた状態で、下記コマンドで、OpenOCDが起動する。
$ openocd -c "interface cmsis-dap" -f /usr/local/share/openocd/scripts/target/stm32f4x.cfg
Open On-Chip Debugger 0.8.0-dev-00350-g6c74255 (2014-02-19-22:34)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'cmsis-dap'
Info : CMSIS-DAP: SWD Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
cortex_m reset_config sysresetreq
Info : CMSIS-DAP: FW Version = 1.0
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 1 nTRST = 0 nRESET = 1
Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : IDCODE 0x2ba01477
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
これで、6割方は上手く行く。と言うのも、私が持つ3台の Ubuntu 12.04マシンのうち、1台が下記の様にコアダンプして異常終了するのだ。
$ src/openocd -c "interface cmsis-dap" -f /usr/local/share/openocd/scripts/target/kl25.cfg
Open On-Chip Debugger 0.8.0-dev-00350-g6c74255 (2014-02-24-20:34)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'cmsis-dap'
Segmentation fault (コアダンプ)
このマシンは、、CPUがAMD Athlon64X2 4200+ 2.2GHz、マザーボードがMSI K9N6PGM2-V と言う古い古い構成。ハードウエアの内どの部分が悪いかは不明だが、OpenOCDのソースコードの「openocd/src/jtag/drivers/cmsis_dap_usb.c」の176行目を
if ((0 == cmsis_dap_vid[0]) && wcsstr(cur_dev->product_string, L"CMSIS-DAP")) {
から
if ((0 == cmsis_dap_vid[0]) && (NULL != cur_dev->product_string) && wcsstr(cur_dev->product_string, L"CMSIS-DAP")) {
に変更して、ビルドし直すと、問題が解決する。
上記の行、たぶん、バグだと思うので、正式のOpenOCDに反映してもらうように働きかけようかな・・・とも考えている。
注意
ブログのコンテンツの内、「告知」など時期よって情報価値が無くなるのは除いてある。また、コンテンツに付いたコメントは書き込み者に著作権があるものと判断し、ここに持ってきていないので、コメントを見るときは、元々のブログコンテンツを参照してもらいたい。
その他、ブログ発表後、コメントなどの内容を反映するなど、内容を変更しているものもあるので、注意してほしい。