トラ技ARMライタのCMSIS-DAP&USB-CDCファームウェア
トラ技ARMライタ用のCMSIS-DAP&USB-CDCファームウェアを開発しています。
ついにCMSIS-DAPとUSB-CDC(仮想COMポート)が共存したマルチファンクションデバイスができるようになりました。
LPC11U35に書き込むファームウェアとデバイスドライバのINFファイルを以下においておきます。
ただし、現在はまだ作りかけなので、
- ボーレートの変更ができない
- USB→UART方向の転送しかできない
という制約があります。
UART→USB方向の転送はまだできません。
あまり実用的ではないので、急いでアップデートする必要はないと思います。ドライバのインストールは難しいかもしれません。失敗すると元のファームウェアに戻してもドライバを認識させるのが難しいので、本当に急いでアップデートする必要はありません。
いままでも、CMSIS-DAPとUSB-CDCを共存させようとしていたのですが、うまく動かずに悩んでいましたが、ようやく原因がわかってきました。
- HIDはふつうはデバイスドライバが不要なのですが、USB-CDCとのマルチファンクションデバイスにした場合は、CDC側のデバイスドライバがないと、HID側も認識してくれなくなります。
- 現在はインタフェース0がCDCコントロール、インタフェース1がCDCデータ、インタフェース2がHIDです。マルチファンクションデバイスでCDCのように複数のインタフェースを使うデバイスを作る場合、どこが区切りかわかりません。そこで、IAD(インタフェースアソシエーションディスクリプタ)というのを用意して、2個のインタフェースは同一グループだ、と知らせてやります。
- CDC側のドライバで、INFファイルには、
%TrgArmWrDesc% = DriverInstall, USB\VID_0D28&PID_0019&MI_00
というふうに&MI_00をつけます。マルチファンクションデバイスの最初のものという意味なのでしょう。 - デバイス全体のストリングディスクリプタだけではなく、Interface2のHIDのインタフェースディスクリプタのiInterfaceが挿すストリングディスクリプタを「Toragi-LPC Writer CMSIS-DAP」に変えておかないと、MDK-ARM等がCMSIS-DAPとして探してくれなくなるようです。
- PCに挿すと、Device Qualifierディスクリプタを探しに来てSTALLを返していますが、これは異常ではなく正常な動作でした。STALLで問題ありません。このSTALLを返さないように・・という努力は無駄です。
そのような改良を行ったところ、マルチファンクションデバイスとして認識してくれるようになりました。
| 固定リンク





コメント