April 23, 2008Super Sylphide 進捗状況(16) -- Windows XPでMSD+CDCのUSB compositeが相変わらず動かない年度が替わりまして、オートパイロットシステムSuper Sylphideの開発が別案件に組み込まれたせいもあり、開発スピードをあげる必要が出ています。できれば夏頃に完成させたい予定ですが、予定は未…、いや、がんばらせていただきます。 今回の記事は以前からこのサイトでもとりあげているUSBの複合デバイス(composite device)の話をとりあげてみようと思います。Super Sylphideには計算を担当するDSP以外に、SDカードへのログの記録、そしてセンサ情報の取得など、基本的な処理を担当するマイコンSilicon Laboratories C8051F340が搭載されていますが、これにはUSBの機能が搭載されています。ならばSuper SylphideをUSBでパソコンに繋げて、USBのメモリスティックよろしくログの送受信が簡単にできたり、あるいは通信機能を備えてHIL(Hardware in the loop)試験を簡単に行えたら、どんなに素晴らしいだろうという結論に至りました。そういう理由からUSBには2つの機能、記憶装置として認識させるMSD(Mass Storage Device class)と、通信環境を備えていることを示すCDC(Communication Device Class)、2つの規格に準拠させることにしました。 実はこの部分はGPSロガーと共通の実装であり、今までの開発履歴、『USBでMSD+CDC (Composite Device)』や『WindowsでMSD+CDC (USB Composite Device)』、『USB Composite DeviceでCDCが動作しない』を見ていただくと現状が把握していただけると思います。過去の記事の表題からもわかるとおり、この実装がうまくいっていませんでした。 そこで最近、久しぶりにコードや規格書のおさらいをしてみたところ、規格標準を無視している箇所がいくつか発見されて、これ以上バグがでないだろうという状態まで改善することができました。主な修正点としては以下のものがあげられます。
現在の状態はGPSロガーのファーム、特にMSDの実装とその内部コマンドであるSCSIの実装を見ていただけるとよいと思います。問題の発見にあたっては、USB.orgが提供している準拠度をはかるプログラム USBCV R1.3、並びにSilicon LaboratoriesのUser Forum(特にTsuneoさんという方の情報が的確)やusb.orgのDeveloper Forumが参考になりました。 さて、この状態で意気込んでWindows XPのPCに接続を試みたところ、従来どおり認識はされました。お次はデータのやり取りはできるか、というとことでファイルの読み書きをしてみると、これも従前どおりできました。MSDの機能は正常に動作しています。 残念ながら、今回の実装でも問題を解決するには至りませんでした。USB解析ツールのSnoopyProを使って取得したUSBパケットの流れは以下のとおりです。 CDCのCommunication InterfaceのInterrupt IN Endpoint 0x81とData InterfaceのBulk IN Endpoint 0x82がMSDのBulk IN Endpoint 0x83と心中している様子が伺えます。0x83はその後回復するのですが、0x81と0x82はその後復調していませんでした。これはWindowsのドライバ側の問題であると思うのですが、物理的にプロトコルアナライザによる計測はしてはいない為、真実はわかりません。新たに出たHotfixも色々と試してみてはいるのですが、状況は改善しませんでした。そろそろWindows XP SP3の提供がはじまるそうなので、現在はそれに期待しております。 ※その後、I/O拡張基板の動作確認がとれました。 コメント
はじめまして、 IAD を使ったCDC+HID のcomoposite デバイスをここに投稿しました。ご参考にしていただければ幸いです。 "USB Composite Device" Tsuneo Posted by: Tsuneo : May 10, 2008 10:28 PM>Tsuneoさん コメントする
|
スポンサード リンク
|