不確定特異点

広く深く、ところどころ超深く

STM32F7 Discovery の開発環境 (1)

STM32F7 Discovery という Cortex-M7 コア搭載の基板を入手したので、早速使ってみました。SRAM 320KB, SDRAM 16MB, 静電容量式タッチパネル付き TFT 液晶, USB, Ethernet, Micro SD, Audio 果ては カメラ I/F まで搭載し、Arduino も被せられるようになっている何でもあり基板になってます。これで 8000 円なのでかなりコスパがいい方だと思います。

f:id:tanakahx:20151025070035j:plainf:id:tanakahx:20151025070036j:plain

ST-LINK/V2-1 ファームウェアのアップデート

ST-LINK/V2-1 のファームウェアをアップデートすることが推奨されているようなので、アップデータをダウンロードして実行しました。Windows では EXE ファイルが提供されてますが、Linux/Mac OS向けには Java のプログラムが提供されていました。Java 版は以下のように起動します。

$ cd stsw-link007/AllPlatforms
$ java -jar STLinkUpgrade.jar

f:id:tanakahx:20151025062339p:plain

"Refresh device list"、"Open in update mode"、"Upgrade" の順に実行するとファームウェアの更新が始まるので、成功を祈りながら心静かに見守ります。

仮想マシンに ST-LINK の USB 接続を認識させる

僕はホスト OS に Mac OS を使ってますが、ARM の開発環境は VirtualBox 上の Ubuntu に準備しているため、STMF7 Discovery を USB で接続した場合に、Mac OS ではなく Ubuntu 側に認識させるための設定を行います。/etc/udev/rules.d/49-stlinkv2.rules のルールファイルに以下の行を追加します。

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
    MODE:="0666", \
    SYMLINK+="stlinkv2_%n"

ルールファイルを反映するには以下のコマンドを実行します。

$ sudo udevadm control --reload-rules

下図のように VirtualBox 側にもゲスト OS に USB を見せられるよう、デバイスフィルタの設定をしておきます。udev のルールファイルに設定したベンダ ID やプロダクト ID も VirtualBox のデバイスフィルタから確認することができます。

f:id:tanakahx:20151025063014p:plain

OpenOCD のインストール

Linux から STM 基板にプログラムを書き込むツールとして OpenOCD を使います。現時点では STM32F7 Discovery に正式対応されていないようなので、以下のように最新版に対してパッチを当てる必要があります。(なお、これを試した時点での最新版ハッシュ値は a859befa67c4abfc8aafb95f9c9c7bc3629f1ff8 です。)

$ git clone http://openocd.zylin.com/openocd
$ git fetch http://openocd.zylin.com/openocd refs/changes/54/2754/5 && git checkout FETCH_HEAD

インストール手順は以下の通りです。

$ ./bootstrap
$ ./configure
$ make
$ sudo make install

OpenOCD を実行して STM 基板の ST-LINK 用の LED が点滅すれば接続に成功してます。

$ openocd -s /usr/local/share/openocd/scripts/ -f board/stm32f7discovery.cfg
Open On-Chip Debugger 0.10.0-dev-00026-g97a8b08-dirty (2015-10-23-18:37)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : clock speed 1800 kHz
Info : STLINK v2 JTAG v24 API v2 SWIM v11 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.211002
Info : stm32f7x.cpu: hardware has 8 breakpoints, 4 watchpoints

次はテスト用のプログラムを作成して Flash ROM に焼いてみます。