2011年12月5日月曜日

USB-IOを動かしてみる(前編)

秋月でUSB-IOなるものをゲットしました。本来の目的は「PIC14K50を動かすための基板を作るのが面倒くさい」ということで、速攻でROMを書き換えてしまおうと思ったのですが、その前に少しだけ動かしてみました。なお、動かすにあたっては、こちらのページを参考にさせていただきました。

この基板をLinuxMint11のマシンに接続して、dmesgコマンドを叩くと、

$ dmesg
(途中略)
[16763.641868] generic-usb 0003:1352:0121.0009: hiddev0,hidraw3: USB HID v1.11 Device [Km2Net Inc. USB-IO2.0] on usb-0000:00:13.2-2.3/input0 $  

となって、hiddev0とhidraw3というデバイスファイルができてそうな雰囲気であることがわかります。

そこで、ターミナルを2つ開いて、

$ sudo bash

として、rootのシェルを2つ起動します。root権限のシェルなのは、/dev/hidraw3 へのアクセスにroot権限が必要なためです。

この状態で一つ目のシェルで

# od -x /dev/hidraw3

として、hidraw3からの出力を監視します。その状態でもう一つのシェルで、

# printf “\x00\x20″ > /dev/hidraw3

とすると、

000xx00 0020 000f 0000 000f 0000 0000 0000 0000
000xx20 0000 0000 0000 0000 0000 0000 0000 0000
*
000xx60 0000 0000 0000 0000 0000 0000 0000 1000

という内容がもう一つのシェルに出力されます。赤文字の部分はレポートID、コマンド、ポート1の値、ポート2の値です。基板上のポート2(J2)を抵抗でGNDに落としてやると、落としたポートに応じて0fの部分が変化しました。(コマンドについてはこちらを見てください。いまひとつわかりにくい仕様ですが、「何バイト目にどんなデータが置かれるか」というフォーマットになっているようです。)

さらに、

# printf "\x00\x0f9\x00\x00\x00\x00\x0fe\x0f\x00\x00\x00\x00" > /dev/hidraw3

として、ポート1のビット0を出力に設定します。ここで一旦USBケーブルを抜いて、差しなおします。その後、監視側の od コマンドを再実行したあと、

# printf "\x00\x20\x01\x01" > /dev/hidraw3

とすると、ポート1のビット0がH出力になるので、そこに接続されたLEDが点灯します。次に、

# printf "\x00\x20\x01\x00" > /dev/hidraw3

とすると、LEDが消灯します。

0 件のコメント: