0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

QMKをICEでデバッグ

Last updated at Posted at 2020-10-08

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側のファームウェアはアップデートしておく。アップデータ
  • Windows 11のUbuntu on WSL2
  • Ubuntu on WSL2からcode .で開いたリモートモードのVSCode
  • .wslconfignetworkingMode=mirroredを設定(このためにWindows 11が必要)

接続

評価ボードのST-LINK側のUSB mini-BをPCにつなぐ。ドライバはSTMicroelectronicsから。

評価ボードのジャンパはldd(左側中段)とST-LINK / DISCOVERY(右上)両方とも装着。

インストール(Windows側)

  • OpenOCD (ICE用のgdbserver。いろんなICEプローブとマイコンに対応)
    1. バイナリを取ってくる
    2. openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c "bindto 0.0.0.0"を実行
    3. openocdがTCPポートをLISTENしはじめたら、ファイアウォールを開ける。gdbを待機しはじめたらOK。
    4. openocdがgdbを待機せず、すぐ終了してしまう? その場合、STM32F072側のファームウェアをDFUで(つまりSTM32F072側のUSB mini-B経由で)書き込んで出荷時に戻す。

インストール(Ubuntu on WSL2側)

  • 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ピンを使った。

keyboards/retro_75/config.h
#define MATRIX_COL_PINS { A5, A4, A3, F0, C15, C14, C13, A6, B11, B10, B2, B1, B0, A7, C0, A15 }

launch.jsonの設定

VSCodeのlaunch.jsonは以下のとおり。

.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": "localhost:3333",
            "remote": true,
            "cwd": "${workspaceFolder}",
            "gdbpath": "gdb-multiarch",
            "autorun": [
                "load"
            ]
        }
    ]
}

WSL2にnetworkingMode=mirroredがついたので、普通にlocalhostでGDB serverにつながる。これがない時代は、Windows側のIPアドレスが毎回変わって死ぬほどだるかった。

ブレークポイントを設定

マトリックスをスキャンするたびに実行される場所にブレークポイントを設定する。quantum/matrix.cread_cols_on_row()あたりが手頃。
breakpoint.png

実行

(gdb) Attach to OpenOCDをデバッグ開始。

bp2.png

ブレークポイントで止まったよ!

bp3.png

コールスタックも見えるよ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?