2025/11/10 11:45 Vibe Code Warning – A personal casestudy

やっほー、ロボ子!今日はRaspberry Pi Pico2を使ったRISC-Vコアのデバッグに関する話題じゃ。

博士、こんにちは。Raspberry Pi Pico2でRISC-Vコアをデバッグですか。面白そうですね!

そうじゃろ!このライブラリを使うと、Raspberry Pi Pico2でRP2350 RISC-Vコア(Hazard3)をデバッグできるらしいぞ。しかも、ステートフルなSWDプロトコル実装ライブラリなんじゃと。

ステートフルSWDプロトコルですか。具体的にはどのようなアーキテクチャになっているんですか?

ふむ、3層構造になっておるらしいぞ。アプリケーション層、デバッグモジュール層(rp2350.c)、デバッグアクセスポート層(dap.c)、シリアルワイヤデバッグ層(swd*.c)じゃ。

なるほど、層構造になっているんですね。それぞれの層が役割を分担しているんですね。

そうそう。RISC-Vのデバッグアーキテクチャも重要じゃ。ハート(hart)の状態がRUNNING, HALTED, RESUMINGと変わるのを監視したり、制御したりできるんじゃ。

ハートの状態を監視・制御ですか。デバッグモジュール(DM)を使うと、レジスタアクセスやシステムメモリアクセスも可能になるんですね。

その通り!抽象コマンドやプログラムバッファ(PROGBUF)も使えるらしい。PROGBUFは、デバッガがRISC-V命令を書き込んで実行できる小規模な命令メモリのことじゃ。

プログラムバッファ、便利そうですね。システムバスアクセス(SBA)というのも気になります。

SBAは、ハートをバイパスしてメモリに直接アクセスするパスのことじゃ。これを使うと、並列アクセスができるから効率的なんじゃ。

なるほど!SWDプロトコルについても教えてください。

SWDは2線式のデバッグインターフェースで、パケット構造はリクエストフェーズ(8bit)、アックノリッジフェーズ(3bit)、データフェーズ(33bit)で構成されてるんじゃ。

結構複雑ですね。Dormant状態からのアクティベーションシーケンスもあるんですね。

そうじゃ。Selection Alert Sequence (128bit) + SWD Activation Code (0x1a)を送る必要があるんじゃ。ちょっと面倒じゃな。

デバッグアクセスポート(DAP)アーキテクチャについても教えてください。

DPレジスタにはDP_IDCODE, DP_CTRL_STAT, DP_SELECT, DP_RDBUFFがあって、APレジスタにはAP_CSW, AP_TAR, AP_DRW, AP_IDRがあるんじゃ。RP2350固有のDP_SELECTエンコーディングを使うらしいぞ。

バンク選択キャッシングでSWDトランザクションを削減できるのは良いですね。

じゃな。デバッグドメインパワーシーケンシングも忘れちゃいかんぞ。DPDとSPDのパワーアップシーケンスが必要なんじゃ。

初期化も大変そうですね。AP選択、CSW設定、Bank 1アクティベーションハンドシェイクが必要なんですね。

RISC-Vデバッグモジュールインターフェースでは、DMCONTROLレジスタでハートを制御したり、抽象コマンドでレジスタアクセスしたり、PROGBUFでデバッグ専用CSRアクセスができるんじゃ。

SBAでは、SBCSレジスタで制御とステータスを管理し、自動読み出しメカニズムで効率的なメモリアクセスができるんですね。

状態管理とキャッシングも重要じゃ。接続状態、DAP状態、ハートごとの状態を追跡して、レジスタ値のキャッシュでSWDトラフィックを削減するんじゃ。

PIOリソースのグローバルトラッキングと自動割り当ても便利ですね。

エラー処理もちゃんとしておるぞ。エラーコードと詳細メッセージで包括的なエラー報告をして、WAIT応答時のリトライメカニズムもあるんじゃ。

APIも充実しているんですね。ターゲットの作成と接続、ハート制御、メモリオペレーション、コード実行、命令トレース、デュアルハートオペレーションができるんですね。

ビルドはCMakeで統合されてて、デバッグレベルも設定できるんじゃ。RISC-Vシングルステップ実行はDCSR.stepビットを使うんじゃと。

命令トレースは反復シングルステップで行うんですか。

そうじゃ。ハートリセットはDMCONTROL.ndmresetで行うらしい。デュアルハートアーキテクチャでは、DMCONTROL.hartselでハートを選択するんじゃ。

制限事項もあるんですね。ハードウェアブレークポイント、マルチドロップSWD、圧縮命令、パフォーマンストラッキング、フラッシュプログラミングルーチンは未サポートなんですね。

まあ、MITライセンスだから、自分で拡張しても良いんじゃぞ。しかし、デバッグって大変じゃな。まるで、私の部屋の片付けみたいじゃ。

博士の部屋はいつもカオスですからね。もしかして、デバッグが必要なのは博士の部屋の方だったりして…?

むむ、それは言わない約束じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。