RXマイコンでCMSIS-DAPができた!
先日から開発していた「RXマイコンでCMSIS-DAP」がついにできました!
とりあえずは動画をご覧ください。
現在、KEILのMDK-ARMからトラ技付録のLPC810ボードに、プログラムをダウンロードしたり、デバッグしたりできるようになりました。
KEILで使っているときの画面はこんな感じです。
LPCXpressoでも使いたい・・
ところが、このCMSIS-DAPをLPCXpressoから認識させることはできません。なぜなら、LPCXpressoは特定のVIDとPIDでないと認識しないためです。そこで、ちょっとごにょごにょとしたら・・
はい。LPCXpressoからでもRX-CMSIS-DAPを認識してLPC810をデバッグできるようになりました。
このCMSIS-DAPデバッガは、LPC810専用ではありません。LPC-Link2に入っているLPC4370などもデバッグできます。
けっこう苦労した
そりゃCMSIS-DAPだからCortex-Mは全部対応だろ、と言われそうですが、結構難しいのです。デバイスによってCMSIS-DAPで使われるコマンドが違ったりするし、マイナーなものまで使われるので「使わなそうな機能」を端折って実装すると、特定のデバイスで動かないなんてことになります。
開発のときには、KEILのMDK-ARMからデバッガを起動して、送られてくるパケットを見ながらデバッグをしていました。
CMSIS-DAPの実装でハマッた点を述べておきます。
- APからReadするときにはPOST動作となる。つまり、APから読み出すためのコマンドを最初にSWDで転送して、次の転送でDPのRDBUFF(0x0e)を読み出す。
- APからReadするとき、最後にDPのRDBUFFを読むようにしておかないと、(つまり、Postのリクエストが中に残っていると)、誤動作する
- DAP ReadでWAITやFAULTが返ったときに、33bitのデータ+パリティを読み出してはいけない。(別途コマンドで「常に読み出す」を指定した場合は除く)
- DAP ReadでMatchという動作がある。MASKを設定して、読み出したデータでMASKでANDした値が、MatchValueになるまで待つというもの。Match動作のときには読み出した値をホストに送らなくてよい。
- デバイスによって、Matchのときの繰り返し回数は異なるので、ちゃんと実装すること。
- Abortという動作は、ABORTレジスタ(DPのアドレス0)に書き込むことをいう
パケットをずーっと見ていて思ったのは、おそらく、Cortexのデバッグのやり方は、ARM7やARM9の頃と同じく「コード片」を送り込んでいるのだろうなということです。バウンダリスキャンのINTESTコマンドで送り込む代わりに、アクセスポート経由で送り込んでいるのでしょう。
その点はあまり変わっていない気がしました。
機能
結局、真面目にCMSIS-DAPのほとんどの機能を実装しました。
- NXPのLPC810(トラ技のおまけ)
- NXPのLPC4370(LPC-Link2のCPU)
- STMicroelectronicsのSTM F3Discovery
- FreeScaleのFRDM-KL25Z
で動作確認できました。
このRX-CMSIS-DAPは、
- GR-SAKURA
- RaXino
- 究極のRX62Nボード
- 秋月RX621ボード
- Interface付録RX62N
- マルツで売っている青いRX63N
で動くようにして、今週末の公開を目指します。
| 固定リンク
コメント