Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CMSIS-DAPの概要と使い方/KernelVM Online5

CMSIS-DAPの概要と使い方/KernelVM Online5

Kernel VM Online 5の発表資料です。
https://kernelvm.connpass.com/event/256248/

CMSIS-DAPの概要と制御方法について簡単に説明します。

Toshifumi NISHINAGA

August 28, 2022
Tweet

More Decks by Toshifumi NISHINAGA

Other Decks in Programming

Transcript

  1. CMSIS-DAP

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. armデバッグのおさらい
    9

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  14. 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

    View full-size slide

  15. CMSIS-DAPとは
    18

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  21. CMSIS-DAPを直接制御する
    25

    View full-size slide

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

    View full-size slide

  23. 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

    View full-size slide

  24. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. 参考資料
    • 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

    View full-size slide

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

    View full-size slide

  32. おまけ
    37
    open source最⾼!!!

    View full-size slide

  33. おしまい
    38

    View full-size slide