マツド・サイエンス研究所

トラ技ARMライタをUbuntuのOpenOCDで使う(プラス パッチ)

トランジスタ技術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に反映してもらうように働きかけようかな・・・とも考えている。

注意

ブログのコンテンツの内、「告知」など時期よって情報価値が無くなるのは除いてある。また、コンテンツに付いたコメントは書き込み者に著作権があるものと判断し、ここに持ってきていないので、コメントを見るときは、元々のブログコンテンツを参照してもらいたい。

その他、ブログ発表後、コメントなどの内容を反映するなど、内容を変更しているものもあるので、注意してほしい。