« RXマイコンで動くCMSIS-DAPを開発しています | トップページ | 18bitADC装置でほぼ満足のいく性能が出た »

2014.01.21

RXマイコンでCMSIS-DAPができた!

先日から開発していた「RXマイコンでCMSIS-DAP」がついにできました!

とりあえずは動画をご覧ください。

現在、KEILのMDK-ARMからトラ技付録のLPC810ボードに、プログラムをダウンロードしたり、デバッグしたりできるようになりました。

Grsakuralpc810

KEILで使っているときの画面はこんな感じです。

Rxcmsis_7

LPCXpressoでも使いたい・・

ところが、このCMSIS-DAPをLPCXpressoから認識させることはできません。なぜなら、LPCXpressoは特定のVIDとPIDでないと認識しないためです。そこで、ちょっとごにょごにょとしたら・・

Rxcmsis_8

はい。LPCXpressoからでもRX-CMSIS-DAPを認識してLPC810をデバッグできるようになりました。

このCMSIS-DAPデバッガは、LPC810専用ではありません。LPC-Link2に入っているLPC4370などもデバッグできます。

Rxcmsis_9

けっこう苦労した

そりゃCMSIS-DAPだからCortex-Mは全部対応だろ、と言われそうですが、結構難しいのです。デバイスによってCMSIS-DAPで使われるコマンドが違ったりするし、マイナーなものまで使われるので「使わなそうな機能」を端折って実装すると、特定のデバイスで動かないなんてことになります。

開発のときには、KEILのMDK-ARMからデバッガを起動して、送られてくるパケットを見ながらデバッグをしていました。

Rxcmsis_6

CMSIS-DAPの実装でハマッた点を述べておきます。

  1. APからReadするときにはPOST動作となる。つまり、APから読み出すためのコマンドを最初にSWDで転送して、次の転送でDPのRDBUFF(0x0e)を読み出す。
  2. APからReadするとき、最後にDPのRDBUFFを読むようにしておかないと、(つまり、Postのリクエストが中に残っていると)、誤動作する
  3. DAP ReadでWAITやFAULTが返ったときに、33bitのデータ+パリティを読み出してはいけない。(別途コマンドで「常に読み出す」を指定した場合は除く)
  4. DAP ReadでMatchという動作がある。MASKを設定して、読み出したデータでMASKでANDした値が、MatchValueになるまで待つというもの。Match動作のときには読み出した値をホストに送らなくてよい。
  5. デバイスによって、Matchのときの繰り返し回数は異なるので、ちゃんと実装すること。
  6. 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

で動くようにして、今週末の公開を目指します。

|

« RXマイコンで動くCMSIS-DAPを開発しています | トップページ | 18bitADC装置でほぼ満足のいく性能が出た »

コメント

コメントを書く



(ウェブ上には掲載しません)




« RXマイコンで動くCMSIS-DAPを開発しています | トップページ | 18bitADC装置でほぼ満足のいく性能が出た »