以前に書いたUSB機器製作に関するページの情報は古くなってしまいました。
ここ数年の間にUSBモールスキーボード、携帯黒電話 for FOMA(USB ホストの自作)など、いろいろ作ってきました。
最近経験したUSB機器自作に関する情報を記述したいと思います。
(書きかけ)
以前のページではNational SemiconductorのUSBN9602(9603,9604)やPhilipsのPDIUSBD11などの外付けのUSBチップを紹介していましたが、最近ではUSB SIEを内蔵したマイコンがたくさん出ていますので、特別な理由がない限り、上記のようなチップを使う必要はないでしょう。
AN2131SC, AN2135SCです。一世を風靡したUSBマイコンです。
解説を書こうとしましたが、現時点でFull-Speed(12Mbps)のデバイスはCypressのHPからも無くなっているのでデータシートも新規入手できそうにありません。
IAR Systems Cコンパイラの4KByteの壁をやぶる方法を編み出したりといろいろいじったものですが、過去のものになってしまいました。
現時点では一番の選択肢だと思っています。
PIC18F、PIC24F、PIC32FシリーズでUSB/USB OTGをサポートしたチップがあります。
おすすめはPIC24FJxxxxGBシリーズです。(xxx:フラッシュメモリのサイズ、64kbyteから256kbyte)。
16ビットマイコンということと、500円程度の価格を考えるとコストパフォーマンスの良いマイコンです。
また、MicrochipのUSBサンプル(MCHPFSUSB Framework)は非常に数が豊富です。HIDやCDC、MassStorageなど、簡単に作れてしまいます。
PIC18Fのフラッシュメモリが16kbyteのもの(PIC18F14K50)はMCHPFSUSB Frameworkの複雑なもの(CDC Deviceなど)を実装するとほとんど一杯になってしまいます。
残念ながらPIC24FxxxGBは入手しにくいです。(オプティマイズさんで半完成キットが変えます。秋月で扱って欲しいものです。私はDigikeyやMicrochipDirectで購入しています。)
初代PSoC(現PSoC1)はすでにすたれつつありますが、8051コアのPSoC 3、ARMコアのPSoC 5がリリースされました。
USBコントローラ付きマイコンとしての使い勝手はこれから検証していこうと思っています。
内容はこのページに加筆していきたいと思います。
乞うご期待。
MicrochipのMCHPFSUSB Frameworkにたくさんのサンプルが載っています。
たいていのアプリケーションの場合、そのまま流用することで実現できると思います。
HID複合デバイス(Combosite Mouse + Keyboard)
なぜかMicrochip LibraryにはHID複合デバイスがありません。
ちょっと見てみたところ、ライブラリ自体に手を入れる必要があり、ちょっと面倒なことが分かりました。
マウス+キーボードの複合デバイスを作成しましたので、ソースを掲載します。 [ダウンロード]
現在、PIC24FJ64GB106とPIC18F2550で動作確認をしています。
HID複合デバイス(Combosite CDC + HID)
CDCとHIDの複合デバイスにはIAD(Interface Abstruct Descriptor)を使う必要があり、ちょっとコツが必要です。
サンプルを作成してみましたので、ソースを掲載します。 [ダウンロード]
PCと自作デバイスを接続する場合のデバッグには、ソフトUSBアナライザが使えます。
SnoopyProは非常によくできたソフトUSBアナライザです。
自作USBデバイス開発の際、うまく動作しない場合、たいていは
・各種デスクリプタに不備がある
・BulkやInterrut Transferのエンドポイントの設定に不備がある
などです。
どこで問題が起こったかを判断するには、上記のSnoopyProのログを見て、どこで止まっているかを見ると良いでしょう。
また、同様の機能を持つ市販の機器のログを取って、自作の機器との違いを比較するのも有効だと思われます。
以前、どこかでVID(Vendor ID、ベンダID)をPID(Product ID)で区切って切り売りしてくれる会社がありましたが、Vendor
IDのResaleはUSB.orgの規約では禁じられているようです。
自作のUSBデバイスを配布したい場合、VIDをどうするかは未解決の悩ましい問題です。
外付けチップとしてはCypressのSL811HST、MaximのMAX3421などがありますが、今さら外付けー?ということで、PIC24FxxxGBシリーズをおすすめします。
MicrochipのMCHPFSUSB FrameworkにもたくさんのUSB Hostのサンプルが載っています。
USBホスト(OTG)の場合、上記のソフトUSBアナライザは使えないので、未だにprintfデバッグを多用しています。
printfデバッグの出力先としては、マイコンのシリアルポートに出力してPCのターミナルソフトで受信する方法を使います。
この際問題になるのはボーレートが遅いとオーバーヘッドとなってしまい、プログラムの動作速度に影響を与えることです。
しかし、16MHzのシステムクロックから230,400bpsを生成しようとすると、ボーレートの誤差が大きくなってしまい、MicrochipのサンプルではWarningが出ることもあります。
このような場合に有効なのが、PC側のUSB-シリアル変換ICにFTDI社のFT232/FT2232を使用し、ボーレート変換機能を使うことです。
ftdiport.infファイルを変更することにより、FT232/FT2232は、最大3Mbpsの通信が可能です。
例えば、ftdiport.infファイルの変更により、ターミナルソフトを300bpsに設定すると実際にはFTDI Chipは1Mbpsで通信するように設定します。マイコン側も16MHzから容易にぴったり1Mbpsを生成できます。
詳しいことはFTDIの"AN232B-05 Configuring FT232R,FT2232 and FT232B Baud Rates"を参考にしてください。
具体的には、FTDIからCDMドライバをダウンロードし、ftdiport.infの以下のように該当行を変更します。
この例では、4800bps->500kbps, 2400bps->750kbps, 300kbps->1Mbpsに置き換えられます。
この変更を加えた場合、デバイスマネージャで「検索しないで、インストールするドライバを選択する」でドライバを再インストールする必要があります。
変更前
変更後
ご意見、ご感想はTTRMKRまでお願いします。(迷惑メール対策のため、件名の先頭に[non-SPAM]の文字が自動的に入ると思うので削除しないで後に続けてください)。