Slide 1

Slide 1 text

CMSIS-DAP の 概要と使い⽅ Toshifumi NISHINAGA (CV: ついなちゃん) @tnishinaga 2022-08-28 KernelVM Online 5 https://speakerdeck.com/tnishinaga/kernelvm-online-5-cmsis-dap 1

Slide 2

Slide 2 text

⾃⼰紹介 • tnishinaga(CVついなちゃん) • 前回(kernelvm online 4)でJTAGで armプロセッサをデバッグする発表 した⼈ • https://speakerdeck.com/tnishinaga /kernelvm-online4 2

Slide 3

Slide 3 text

背景 3

Slide 4

Slide 4 text

4 セキュキャンで受講⽣とJTAGデバッガ作りたい! 2021年の講義で使ったIC FT232HL売ってるかな!? 背景

Slide 5

Slide 5 text

5 在庫なし 2022年03⽉頃 世は半導体不⾜継続中

Slide 6

Slide 6 text

6 Raspberry Pi PicoのIC(RP2040)は潤沢。 PicoをCMSIS-DAPデバッガにする プロジェクトがある。これを使おう! https://github.com/ciniml/rust-dap 背景

Slide 7

Slide 7 text

疑問 7 rust-dapはJTAGコマンドが未実装。 実装したいがCMSIS-DAPの仕様を知らない。 どうやれば制御できるの?

Slide 8

Slide 8 text

資料の⽬標 • 以下を共有する • CMSIS-DAPとは何か、どんな機能があるか • CMSIS-DAPの制御⽅法 8

Slide 9

Slide 9 text

armデバッグのおさらい 9

Slide 10

Slide 10 text

この節の⽬的 • armプロセッサデバッグの概要を理解する • 今後の登場⼈物である以下のおさらいをする • JTAG • SWD • ※ armプロセッサデバッグの⽂脈を前提に説明 10

Slide 11

Slide 11 text

プロセッサデバッグの概要 gdb OpenOCD Interface Target gdb server USB JTAG SWD 11 ↑今⽇やるのはここ

Slide 12

Slide 12 text

Interface Processor JTAG armプロセッサデバッグの概要 12 DAP TAP Processor Core SWD JTAG SWD DPACC APACC TCK TMS TDI TDO SWDIO, SWCLK opcode data Core Sight Regist er Debug Unit D P A P

Slide 13

Slide 13 text

JTAG • プロセッサをデバッグする標準的 なインターフェースの1つ • 以下の4 +α本の線を使う • TMS • TCK • TDI • TDO • プロセッサ側のJTAG TAPとデー タをやり取りする 13 Interface JTAG TAP JTAG DPACC APACC TCK TMS TDI TDO D P A P

Slide 14

Slide 14 text

SWD • armプロセッサのデバッグ専⽤イ ンターフェース • 主にマイコンで使う • 以下の2線を使う(JTAGと共通) • SWCLK(TCK) • SWDIO(TMS) • DP/APと直接32bit値を交換する 14 Interface SWD SWD SWDIO, SWCLK D P A P

Slide 15

Slide 15 text

Interface Processor JTAG armプロセッサデバッグの概要 16 DAP TAP Processor Core SWD JTAG SWD DPACC APACC TCK TMS TDI TDO SWDIO, SWCLK opcode data Core Sight Regist er Debug Unit D P A P

Slide 16

Slide 16 text

CMSIS-DAPとは 18

Slide 17

Slide 17 text

この節の⽬的 • CMSIS-DAPとは何かを知る • CMSIS-DAPの特徴的な機能を知る 19

Slide 18

Slide 18 text

CMSIS-DAPとは? • DAPとの通信に特化した機能を 持つデバッグインターフェース ファームウェア • マイコンにCMSIS-DAP firmwareを書き込んで作る • 今回はJTAG/SWDデバッグ機能 に絞って解説 • 他にも⾊々機能がある が使えるかはJTAG/SWD含め実装 依存 20 画像は以下より引⽤ https://arm- software.github.io/CMSIS_5/latest/DAP/h tml/index.html

Slide 19

Slide 19 text

CMSIS-DAPのデバッグコマンド • JTAG • JTAGを直接制御するコマンド • SWD • SWDを直接制御するコマンド • transfer(←注⽬) • CoreSightレジスタに直接ア クセスするコマンド 22 DAP PC CMSIS- DAP JTAG SWD DP AP CoreSight Register

Slide 20

Slide 20 text

transferコマンド • CoreSightレジスタに直接 アクセスするコマンド • 実態はJTAG/SWD制御を CMSIS-DAPインターフェ ース側にオフロードしてる • コマンドに応じてCMSIS- DAPインターフェースが JTAG/SWDを⾃動制御 23 DAP PC CMSIS- DAP JTAG SWD DP AP CoreSight Register transfer

Slide 21

Slide 21 text

CMSIS-DAPの使い⽅ openocdとかpyocdとかで使うだけなので省略 24

Slide 22

Slide 22 text

CMSIS-DAPを直接制御する 25

Slide 23

Slide 23 text

この節の⽬的 • CMSIS-DAPを⾃分で制御できるものにする • ブラックボックスにしない 26

Slide 24

Slide 24 text

CMSIS-DAPはオープンソース • CMSIS-DAPコマンドの仕様 • https://arm- software.github.io/CMSIS_5/latest/DAP/html/group__DAP__Comm ands__gr.html • マイコンのFirmware実装 • https://github.com/ARMmbed/DAPLink • arm公式のfirmware • https://github.com/ciniml/rust-dap • rust実装版 27

Slide 25

Slide 25 text

CMSIS-DAPとの通信 28 PC CMSIS-DAP USB bulk • CMSIS-DAPはUSB bulk通信で 制御 • 仕様に沿ってバイナリコマンド をやり取りする • 仕様書 • https://arm- software.github.io/CMSIS_5/latest /DAP/html/group__DAP__Comma nds__gr.html

Slide 26

Slide 26 text

rustを使った制御例 • Infoコマンドを実⾏するコードを 書いてみる • rusb crateを使ってUSB bulk通信 をやるだけ 29 Infoコマンドの⼊⼒と応答フォーマ ット。以下より引⽤ https://arm- software.github.io/CMSIS_5/latest/DAP/html/grou p__DAP__Info.html

Slide 27

Slide 27 text

コード 30 • open, read, write まで

Slide 28

Slide 28 text

コード 31 • CMSIS-DAPの Infoコマンド

Slide 29

Slide 29 text

実⾏結果 • id=0x01でinfoを⾒る • Hogeが返ってくる • rust-dapの実装依存 32 https://github.com/tnishinaga/cmsis-dap-control- practice/blob/a16e30cf67781ac8b60fc64f7fb4eefe7742edab/src/minimal_example.rs

Slide 30

Slide 30 text

まとめ 33

Slide 31

Slide 31 text

まとめ • CMSIS-DAPはJTAG/ SWD が使えるデバッグインターフェース のファームウェア • 何が使えるかは実装依存 • arm専⽤の通信をオフロードするコマンドがある • CMSIS-DAPはUSB bulk通信で制御できる 34

Slide 32

Slide 32 text

参考資料 • armのページ • CMSIS-DAP Version 2.1.1 • https://arm-software.github.io/CMSIS_5/latest/DAP/html/index.html • About CMSIS-DAP • https://developer.arm.com/documentation/101451/0100/About-CMSIS-DAP • 特殊電⼦回路株式会社(なひたふさん)のページ • SWDって何? • http://www.tokudenkairo.co.jp/jtag/adv2018/08.php • CMSIS-DAPってなに? • http://rx.tokudenkairo.co.jp/cmsisdap/cmsisdap.html 35

Slide 33

Slide 33 text

おまけ 36 https://twitter.com/ciniml/status/1546712514850828288

Slide 34

Slide 34 text

おまけ 37 open source最⾼!!!

Slide 35

Slide 35 text

おしまい 38