QMKをICEでデバッグ
ICE?
この記事でいうICEとは、ブレークポイントやウォッチやステップ実行のこと。
ST-LINK?
STMicroelectronicsのICEプローブ。PC→(USB接続)→ST-LINK→(SWD接続)→STM32とつながる。
環境
- STM32F072の評価ボード STM32F072B-DISCO
- ボード上にST-LINKが載っている。
- STM32F072側のFlashに書き込まれているファームウェアは出荷時のデモを想定。もし違っていても、SWDがつながる状態ならOK。SWD接続に必要なA13 / A14ピンを使ってしまうファームもたまによくある。
- ST-LINK側のファームウェアはアップデートしておく。アップデータ
- Ubuntu on WSL2
- Ubuntu on WSL2から
code .
で開いたリモートモードのVSCode
接続
- ボード上にST-LINKが載っている。
- STM32F072側のFlashに書き込まれているファームウェアは出荷時のデモを想定。もし違っていても、SWDがつながる状態ならOK。SWD接続に必要なA13 / A14ピンを使ってしまうファームもたまによくある。
- ST-LINK側のファームウェアはアップデートしておく。アップデータ
code .
で開いたリモートモードのVSCode
評価ボードのST-LINK側のUSB mini-BをPCにつなぐ。ドライバはSTMicroelectronicsから。
評価ボードのジャンパはldd(左側中段)とST-LINK / DISCOVERY(右上)両方とも装着。
インストール(Windows側)
- OpenOCD (ICE用のgdbserver。いろんなICEプローブとマイコンに対応)
-
バイナリを取ってくる
-
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c "bindto 0.0.0.0"
を実行
- openocdがTCPポートをLISTENしはじめたら、ファイアウォールを開ける。gdbを待機しはじめたらOK。
- openocdがgdbを待機せず、すぐ終了してしまう? その場合、STM32F072側のファームウェアをDFUで(つまりSTM32F072側のUSB mini-B経由で)書き込んで出荷時に戻す。
インストール(Ubuntu on WSL2側)
-
gdb-multiarch (ARMをターゲットにできるgdb)
sudo apt install gdb-multiarch
VSCodeのエクステンション Native Debug
ビルド
- バイナリを取ってくる
-
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c "bindto 0.0.0.0"
を実行 - openocdがTCPポートをLISTENしはじめたら、ファイアウォールを開ける。gdbを待機しはじめたらOK。
- openocdがgdbを待機せず、すぐ終了してしまう? その場合、STM32F072側のファームウェアをDFUで(つまりSTM32F072側のUSB mini-B経由で)書き込んで出荷時に戻す。
-
gdb-multiarch (ARMをターゲットにできるgdb)
sudo apt install gdb-multiarch
VSCodeのエクステンション Native Debug
ビルド
~/qmk_firmware
ディレクトリ上で、
make *keyboard*:*layout* OPT=g
これで.build
ディレクトリにデバッグ用の*keyboard*_*layout*.elf
ファイルができる。tasks.json
に設定しておくといい。
A13 / A14ピンの罠
今回*keyboard*
としてretro_75を使ったところ、SWD接続に必要なA14ピンを使ってしまっている。retro_75のconfig.h
の45行目を以下のように書き換えて、A14の代わりにC0ピンを使った。
#define MATRIX_COL_PINS { A5, A4, A3, F0, C15, C14, C13, A6, B11, B10, B2, B1, B0, A7, C0, A15 }
launch.json
の設定
まず、WSL2側から見えるWindows側のIPアドレスを調べる。WSL2側からWindows側のIPアドレスを調べる方法
もし172.26.48.1だとすると、VSCodeのlaunch.json
は以下のとおり。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Attach to OpenOCD",
"type": "gdb",
"request": "attach",
"executable": "${workspaceFolder}/.build/*keyboard*_*layout*.elf",
"target": "172.26.48.1:3333",
"remote": true,
"cwd": "${workspaceFolder}",
"gdbpath": "gdb-multiarch",
"autorun": [
"load"
]
}
]
}
なお、WSL2側から見えるWindows側のIPアドレスは固定ではない模様。だるい。
ブレークポイントを設定
マトリックスをスキャンするたびに実行される場所にブレークポイントを設定する。quantum/matrix.c
のread_cols_on_row()
あたりが手頃。
実行
(gdb) Attach to OpenOCD
をデバッグ開始。
ブレークポイントで止まったよ!
コールスタックも見えるよ!
Author And Source
この問題について(QMKをICEでデバッグ), 我々は、より多くの情報をここで見つけました https://qiita.com/hajimen/items/8dc8c556517a5383fe83著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .