ジャンル不定の日記です。

V-USBの配布ファイルをダウンロードした

まだクリスタルが到着してないので実験できないが、
V-USBの配布ファイルをダウンロードしてちょっと中身覗いてみた。

V-USBの本体は中身のusbdrvってのの模様で、これをインクルードしてAPIみたいな感じで使うぽい。
usbdrvのコード読むのは自分にはちと難しい感じだった。
usbconfig.hを変更するだけでusbdrvの設定ができるぽい。

V-USBのサイト記載の回路図は12MHzのクリスタルを使ってマイコン電源は2連ダイオードで下げてたが、
配布ファイル内にも回路図が入っており、2連ダイオード以外に3端子レギュレータや3.6Vツェナーで信号だけ下げる回路も入ってた。
回路図のクリスタルは12MHzではなく16MHzになっており、12MHz,15MHz,16MHz,18Mhz,20MHzのいずれかか、12.8MHzか16.5MHzの内部クロックでもいいぽい。
とりあえずダイオード2個で全体を下げる回路で試してみようと思うが、5V機器と通信するような場合は3.6Vのツェナーの方が良いのかな。
ツェナーが3.3Vではなく3.6Vなのはダイオード式と統一するためかな?
68Ωの抵抗は電源電圧より低くするため?とりあえず68Ωは無いから50Ωで試してみるつもりだが・・・
あと、ダイオード式の回路にはD+のコネクタのところに1MΩの抵抗が追加されてGNDとつながってる。これはなんだろ?保護用?
使用するピンはusbconfig.hで設定できるが、D+はINT0に繋がないとダメぽい。
D-は変更可能で、20ピンのATTiny2313なら最大16ピン使えるのかな?
USBはVID/PIDのペアで識別してドライバが決まってしまうが、VIDを買うのはかなりの高額で無理だが、V-USBには共用で使えるIDがいくつか用意されてる。
必要ならV-USBのサイトでPIDだけを買うこともできるぽい。

V-USBのデバイス制御にはSPIかI2Cが良いかと思ってたが、V-USBのサンプルコードにlibusbを使ったコードがあった。
libusbはドライバ無しでVID/PIDを指定して通信ができるぽい。
libusbはPerlでも使えそうなんで、特殊デバイス用ならこの方法で良さそう。
ホストコマンドでLEDのON/OFFを切り替えるぽいサンプルがあるんで、とりあえずそれ試すかな。

サンプルコードにはUSBマウスのコードも入ってて、別ファイルにUSBキーボードのコードぽいのもあった。
USBメモリかMTPデバイスなんかもやってみたいと思うが、今のところコードが見つかってないんで、プロトコルがわかんないし難しいかも・・・