USB周辺機器製作に関する情報

以前に書いたUSB機器製作に関するページの情報は古くなってしまいました。
2000年頃に書いた記事(1)
2000年頃に書いた記事(2)
ここ数年の間にUSBモールスキーボード(Mouse+Keybord USB複合デバイス)、携帯黒電話 for FOMA(USB ホストの自作)など、いろいろ作ってきました。
最近経験したUSB機器自作に関する情報を記述したいと思います。

(以下書きかけ)

USBマイコンの選定

USB内蔵マイコンを使う

以前のページではNational SemiconductorのUSBN9602(9603,9604)やPhilipsのPDIUSBD11などの外付けのUSBチップを紹介していましたが、最近ではUSB SIEを内蔵したマイコンがたくさん出ていますので、特別な理由がない限り、上記のようなチップを使う必要はないでしょう。

Cypress EZ-USB

AN2131SC, AN2135SCです。一世を風靡したUSBマイコンです。
解説を書こうとしましたが、現時点でFull-Speed(12Mbps)のデバイスはCypressのHPからも無くなっているのでデータシートも新規入手できそうにありません。
IAR Systems Cコンパイラの4KByteの壁をやぶる方法を編み出したりといろいろいじったものですが、過去のものになってしまいました。

Cypress PSoC 3, PSoC 5

初代PSoC(現PSoC1)はすでにすたれつつありますが、8051コアのPSoC 3、ARMコアのPSoC 5がリリースされました。
USBコントローラ付きマイコンとしての使い勝手はこれから検証していこうと思っています。
内容はこのページに加筆していきたいと思います。
乞うご期待。

Microchip PIC

現時点では一番の選択肢だと思っています。
PIC18F、PIC24F、PIC32FシリーズでUSB/USB OTGをサポートしたチップがあります。
おすすめはPIC24FJxxxGBシリーズです。(xxx:フラッシュメモリのサイズ、64kbyteから256kbyte)。
16ビットマイコンということと、500円程度の価格を考えるとコストパフォーマンスの良いマイコンです。
また、MicrochipのUSBサンプル(MCHPFSUSB Framework)は非常に数が豊富です。HIDやCDC、MassStorageなど、簡単に作れてしまいます。
PIC18Fのフラッシュメモリが16kbyteのもの(PIC18F14K50)はMCHPFSUSB Frameworkの複雑なもの(CDC Deviceなど)を実装するとほとんど一杯になってしまいます。
残念ながらPIC24FxxxGBは入手しにくいです。(オプティマイズさんで半完成キットが変えます。秋月で扱って欲しいものです。私はDigikeyやMicrochipDirectで購入しています。)

Mictochipでのサンプルプログラムをいくつか

開発ツール・サンプルプログラム

MicrochipのMCHPFSUSB Frameworkにたくさんのサンプルが載っています。
たいていのアプリケーションの場合、そのまま流用することで実現できると思います。

HID複合デバイス(Combosite Mouse + Keyboard)

なぜかMicrochip LibraryにはHID複合デバイスがありません。
ソースを見てみたところ、ライブラリ自体に手を入れる必要があり、ちょっと面倒なことが分かりました。
マウス+キーボードの複合デバイスを作成しましたので、ソースを掲載します。[ダウンロード]
現在、PIC24FJ64GB106とPIC18F2550で動作確認をしています。

HID複合デバイス(Combosite CDC + HID)

CDCとHIDの複合デバイスにはIAD(Interface Abstruct Descriptor)を使う必要があり、ちょっとコツが必要です。
サンプルを作成してみましたので、ソースを掲載します。[ダウンロード]

開発環境について

デバッグ

PCと自作デバイスを接続する場合のデバッグには、ソフトUSBアナライザが使えます。
Usb Sniffer for Windows(旧SnoopyPro)は非常によくできたソフトUSBアナライザです。

自作USBデバイス開発の際、うまく動作しない場合、たいていは
・各種デスクリプタに不備がある
・BulkやInterrut Transferのエンドポイントの設定に不備がある
などです。
どこで問題が起こったかを判断するには、上記のSnoopyProのログを見て、どこで止まっているかを見ると良いでしょう。
また、同様の機能を持つ市販の機器のログを取って、自作の機器との違いを比較するのも有効だと思われます。


VIDの問題

以前、どこかでVID(Vendor ID、ベンダID)をPID(Product ID)で区切って切り売りしてくれる会社がありましたが、Vendor IDのResaleはUSB.orgの規約では禁じられているようです。
自作のUSBデバイスを配布したい場合、VIDをどうするかは未解決の悩ましい問題です。

USBホスト(USB OTG)開発

外付けチップとしてはCypressのSL811HST、MaximのMAX3421などがありますが、今さら外付けー?ということで、PIC24FxxxGBシリーズをおすすめします。
MicrochipのMCHPFSUSB FrameworkにもたくさんのUSB Hostのサンプルが載っています。

USBホスト開発のデバッグ

USBホスト(OTG)の場合、上記のソフトUSBアナライザは使えないので、未だにprintfデバッグを多用しています。("printf"と言っても実際にライブラリのprintf関数を使うと処理が重くなるので、Microchipのサンプルにあるuart.cの関数を使ってテキストやHex値を送信します。)

FT2232のボーレート変更(最大3Mbps)

printfデバッグの表示は、マイコンのシリアルポートに出力してUSB-シリアル変換IC/基板を通してPCのターミナルソフトで受信する方法を使います。
この際問題になるのはボーレートが遅いとオーバーヘッドとなってしまい、プログラムの動作速度に影響を与えることです。)
しかし、16MHzのシステムクロックからターミナルソフトで設定できる高速(230,400bps)などを生成しようとすると、ボーレートの誤差が大きくなってしまい、文字化けなどが起こります(Microchipのuart.cサンプルではコンパイル時にWarningが出ます。)
このような場合に有効なのが、1MbpsなどPICが生成しやすいきりの良い高ボーレートを使う方法です。
この際、PC側のUSB-シリアル変換ICのボーレートを1Mbpsに設定する必要がありますが、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に置き換えられます。
この変更を加えた場合、デバイスマネージャで「検索しないで、インストールするドライバを選択する」でドライバを再インストールする必要があります。

変更前

変更後

CP2102のボーレート変更(最大24Mbps?)

もう1つ有名なUSB-UART変換チップにSilicon Laboratories社のCP2102があります。クリスタルなど、外付け部品がほとんど不要な便利なチップです。
このチップはEEPROMを内蔵しており、VID/PIDやターミナルソフトから指定するボーレートと実際のボーレートの関係が保存されていますが、このマップを書き換えることができます。
ホームページからダウンロードできるWindows用ユーティリティ"CP210x Legacy Programming Utilities"に入っている"CP210x Baud Rate Confiuration"にて、以下の画像のように設定すると、ターミナルソフトから300bpsを設定すると、実際のCP2102のTx/Rxピンでは1Mbpsで送受信が行われます。 EEPROMに保存されているので、一旦設定すれば別のPCでもそのまま使えるのでとても便利です。
内部クロック48MHzの半分の24Mbpsまでは設定できますが、ピンのドライブ能力などの関係で実用的かどうかは不明です。
CP210x Baud Rate Configuration
300bpsの行をダブルクリックすると下記の画面が出ます。
CP2102 Baud2
Desired Baud Rateに1000000を設定し、Actual Baud Rateが一致していることを確認します。
OKを押して、前のウィンドウの"Set Configuration"ボタンを押すと書き込まれます。


Last update: 2016/10
ご意見、ご感想はTTRMKRまでお願いします。(迷惑メール対策のため、件名の先頭に[non-SPAM]の文字が自動的に入ると思うので削除しないで後に続けてください)。

pagetop