トラ技ARMライタは速いのか、遅いのか、
私、なひたふが書いたトラ技ARMライタの記事がトラ技3月号に掲載されました。
※ちなみに、基板を設計したのは私ではありません。
久々の寄稿なので、記事が載るのは嬉しいものです。こっ恥ずかしいのでまだ読んでいませんが。
トラ技ARMライタはCMSIS-DAPをLPC11U35に移植したもので、中身はふつうのCMSIS-DAPです。
Twitterでとんすけさんという方から、STM32F4へのダウンロードが遅いというご指摘があったので、このCMSIS-DAPの速度を測ってみました。
まず、トラ技ARMライタにSTM32F3Discoveryをつなぎます。そして、uVision4を使って適当なサンプルプロジェクトをビルドし、デバッガを起動します。
そのときのパケットをキャプチャしてみました。
CMSIS-DAPのプロトコルでは、データ転送は0x05か、または0x06というコマンドが使われます。0x05はいろいろなレジスタに値を設定したりマスク値を登録したりするときに使われます。0x06は1つのレジスタにたくさんのデータを転送することができるので、こちらのほうが若干高速なはずです。
上のuVision4のパケットでは0x06のほうを使っているようです。
しかし、CMSIS-DAPは、HIDというプロトコルのレポートというパケットに乗せて送っています。このレポートは最短2msの間隔でしか出すことができないようで、しかも、1つのレポートは64バイトなので14個のDWORDしか入りません。
したがって、14×4Byte÷0.002秒 = 28kB/secというのが理論的な最高速度になるはずです。
これは、トラ技ARMライタが悪いのではなく、CMSIS-DAPがHIDに乗せて送るという仕様に由来するボトルネックです。
もちろん、HIDのレポートのサイズを大きくしたり間隔を縮めるようなディスクリプタにすればもっと速くできるかもしれませんが、ホストのソフトが対応していなければなりませんので、たぶんダメでしょう。MDK-ARMもLPCXpressoも、CMSIS-DAPへの対応はまだ完全ではないので、そういう裏技的なことをしたらたぶん動かないと予想されます。
ちなみに、ULINK/MEのパケットも見てみましたが、やはりHIDを使っていて64Byte単位なので、似たり寄ったりだと思います。OUTパケットの間隔が3msなので、CMSIS-DAPより遅いかもしれません。
ST-Linkは、HIDではなくVendor定義のクラスになっています。64B固定ではないので、ちょっと速度が期待できるかもしれません。
結論を言うと、uVision4やLPCXpressoからトラ技ARMライタ(CMSIS-DAP)を使った場合は28kB/sは達成できると思います。
ただ、OpenOCDから使った場合はわかりません。1MiBのダウンロードに8分以上かかったという報告もいただいているので、OpenOCDからCMSIS-DAPに、ブロック転送を使わずに1WORDずつ送っているのかもしれません。
◆追記
その後、とんすけさんのツイートにより、OpenOCD&CMSIS-DAPの転送速度は2kB/sという情報をいただきました。MDK-ARM&CMSIS-DAPのちょうど14分の1になので、ブロック転送を使わずに1Wordずつ送っている可能性が濃厚です。
| 固定リンク
コメント