とあるBlackMagicの禁断デバッグ
目 標
bluepill を BlackMagic 化して PlatformIO からデバッグできるようにする。
BlackMagic とは
ARMマイコンをいじくるときに使うデバッグアダプタです。
OpenOCD は意識せずに GDB から直接扱えるらしい。なんだかとてもとっつきやすそうな感じがします。しかも PlatformIO からサクっとデバッグを始められる対応マイコンが何種類も! これは強い。
くわしくは↓GitHubのリポジトリ↓を参照されたし。
最近アメリカで大騒ぎの某運動の影響で、いずれ名称が変わるかも…という心配はとりあえず置いておいて……これが、どういうものかというと
PC <==USB==> アダプタ <==SWD==> マイコン
…という役割を果たすものですね。もちろんアダプタ〜マイコン間はSWDに限らず、従来のJTAGなども使えるようです。
入手
もちろん市販されているのを購入することもできますが、BlackMagicは「オープンソースハード」ということで自作できるのです。
回路図 を見るとSTM32F103を使用しています。ですからAliとかで売っている格安のSTM32F103マイコンボード(通称BluePill)を流用することができるわけですね。
その方法については、ぐぐると英語サイトがいくつか出てくるのですが、日本語情報は少ないように思いますのでご紹介しましょう〜
↑ 一般人(逸般人?)でも安く手に入れられるARM(Cortex-M3)マイコンボードBluePill。 Aliだと150円前後、国内でも Shigezone あたりで安く買える。(画像はarduino-forumより)
bluepillをBlackMagic化させる
用意するもの:
bluepill本体
USB-Serial か ST-Link のようなSTM32フラッシュ焼きアダプタ
ソフト:
gcc-arm-none-eabi make といったビルドツール
STM32CubeProgrammer などのフラッシュ焼き焼きソフト
大体どこの誤家庭にも、居間に転がっているようなもので間に合うわけです。手順はとても簡単です。まずは上記リポジトリを git clone しましょう。
git clone https://github.com/blacksphere/blackmagic.git
このリポジトリに含まれているサブモジュールをイニシャルして、makeします。なお、bluepill が積んでいるマイコンは STM32F103C8T3(64kB) で市販の BlackMagic(128kB) よりフラッシュメモリ容量が少ないのだ。そのため「ST-Link」用のオプションを付けるべし。(つまり、ST-LinkもBlackMagic化できるわけですね!)
cd blackmagic
git submodule init
git submodule update
make PROBE_HOST=stlink
拍子抜けするほど簡単である。そうすると src フォルダ以下に以下のバイナリができているはずだ。
blackmagic.bin (本体)
blackmagic_dfu.bin (ブートローダー)
※ なお、makeなんかメンドイ…という方は、このあたり を見ると、なんかあるみたいですw(ST-Link以下が該当のビルド済バイナリです)
バイナリ(.binファイル)が用意できたら、まずはブートローダーを焼きましょう〜。 USB-Serialアダプタを使うのであれば、BluePillのA9,A10がシリアル通信ポートになっているので接続する。GNDもつなごう。BOOT0 のジャンパーを「1」の方向にセットしてBOOTすると、フラッシュモードになる。
焼きソフトは STM32CubeProgrammer を使えば楽ちんできます。「blackmagic_dfu.bin」を「0x800_0000」番地から書き込めばおk。
引き続き、「0x800_2000」番地以降だけをEraseしよう。右側のフラッシュメモリ消去ツールを使います。全セクタを選択しておいてから消去しないセクタだけチェックを外して、「Erase selected sectors」を押せばいい。
後は本体(blackmagic.bin)を「Skip flash erase before programming」で書き込んでしまいましょう! 焼き終わったらBOOT0のジャンパーを元の位置(0)に戻すのも忘れずに!
ドライバのインストール
Windows10は、blackmagic のUSBプラグを突っ込めば、自動で認識してCOMポートができたりする。不明なデバイスになるやつは zadig を使ってlibusbKを突っ込んでやればいいらしい(適当w)。
Linux も こういうときはたいへん楽でありまして、udev のルールを追加してあげればいい。
sudo cp driver/99-blackmagic.rules /etc/udev/rules.d/
コマンドを打って udev をrestart させてもいいですが、意識低い系なので単純に 再起動 で楽をしましょう(笑)。 その後に USB で挿して dmesg すれば…
認識された━━━━(゚∀゚)━━━━!! めでたし!!! ついでに /dev/tty* も見ておきましょう〜。いろいろ増えてますね〜
SWDポートとの接続
デバッグ対象のマイコンボードがARMコアであれば、おそらく SWD用のパッドが出ていると思いますので…
ターゲット アダプタ(bluepill)
SWCLK <--> PA05
SWDIO <--> PB14
と繋いであげましょう。あとは GND も取ること。これ重要。
ちなみに筆者は下の写真のように WioTerminal(ATSAMD51) と接続してみました(^^)
PlatformIOから使ってみよう
プロジェクトの platformio.ini ファイルに追加するだけだ
debug_tool = blackmagic
upload_protocol = blackmagic
ブレークポインタ張って、PlatformIO の F5キー(デバッグ開始)を押せば…
あっさりと ターゲットのマイコンを認識して、デバッグが開始されました…最近のマイコン開発ツールって素人でも優しいですよね…
それでは、デバッグ沼の世界をお楽しみくださいませ〜。
[了]
※アイキャッチの画像は 公式リポジトリ からの引用です。