USB入門
CRC16
AVR Tiny2313でUSBデバイスは出来ている。そこで、こいつを使う
ための Windows用デバイスドライバを書かないといけないのだが、
何分素人なんで、デバイスドライバプログラミングなんてやった事が
ない。
解説書として「WindowsXPデバイスドライバプログラミング[入門と
実践]浜田憲一郎著」を用意した。私の様な素人さんにも解りやす
いらしい。
毎度の事ながら、解説書を読む。
毎度の事ながら、
うぅ~っ、わかんね。
なので、
毎度の事ながら、解説書を何回も読む。
という「毎度の事」を繰り返し、何とか
うっすら分かって来ましたよーっ!
で、うっすらUSBデバイスドライバを書いて見る。何とか認識されて、
Tiny2313のソフトで書かれたエンドポイントに対し送信。
うっすら受信出来ましたよーっ!
とりあえずUSBの通信は成功したが、さすがにTiny2313のメモリ
容量/スペックではUSBを実装するだけで、リソースをの殆どを
使い切っていてるし、所詮ロースピードデバイス。機能もうっすら。
これで何が作れるか、うっすら考えてみよう。
話は変わるが、USBのCRC計算法をググったあげく、当ブログに辿り
着いてしまった、というお気の毒な方がいらっしゃっる様なので、
私の付け焼刃の知識を恥ずかしながら披露する。
"HERO'S Download"から"AVRusb.ZIP"をダウンロード出来る。
この中にUSBの詳しいドキュメントがある。
USBのCRC16を計算するには「ハードウェアCRC16計算回路」
("USBspcs.pdf"に載っている)をエミュレートする。
Cで書くとこんな感じ
WORD UsbCrc16( int count, unsigned char *data )
{
int i, j;
WORD crc = 0xffff;
for( i = 0; i < count; i++ )
{
for( j = 0; j < 8; j++ )
{
if( crc & 0x0001 )
data[ i ] ^= 0x01;
crc >>= 1;
if( data[ i ] & 0x01 )
crc ^=0xA001;
data[ i ] >>= 1;
}
}
crc ^=0xffff;
return crc;
}
引数dataがデータの配列、countがデータ数で、戻り値が求めたCRC。
| 固定リンク | コメント (0) | トラックバック (0)


最近のコメント