EHCI で Get Descriptor
とりあえず達成。
Zynq で USB Host で EHCI で GetDescriptor できた。
基本的には u-boot に書いてあるそのままを実行した。
ソースはというと、、、、
uint32_t *qTD_Setup_Data = &qTD_Setup[1024]; qTD_Setup[0] = (uint32_t)qTD_Setup_Data; qTD_Setup[1] = 1; qTD_Setup[2] = (0 << 31) | (8 << 16) | (3 << 10) | (2 << 8) | (1 << 7) ; qTD_Setup[3] = (uint32_t)&dbp[0]; qTD_Setup[4] = qTD_Setup[5] = qTD_Setup[6] = qTD_Setup[7] = 0; dbp[0] = 0x80; dbp[1] = 0x06; // GET DESCRIPTOR dbp[2] = 0; dbp[3] = 1; // DEVICE dbp[4] = 0; dbp[5] = 0; dbp[6] = 64; dbp[7] = 0;
こんなんだから、汎用性はない!!でも動く。
内容はこんな感じ。
xsdb% mrd 0x11d000 8 11D000: 01100112 11D004: 40000000 11D008: 094004BB 11D00C: 02010001 11D010: 00000103 11D014: 00000000 11D018: 00000000
4 バイトごとに反転しているからわかりづらい、、、
0x12 0x01 0x10 0x01
とちゃんと USB の規約にのっとたデータが来てます(当たり前)。ここまでかけちゃうとオレオレ scheme か FORTH で書いてしまいたくなるなぁ。
EHCI を初めて試したが、それにしてもバッファを荒らす。メモリを使っていろんなところに書き込みをします。これ性能出るの?今後はアイソクロナスにもチャレンジしていきたい。MIDI データとか音楽データとかビデオ画像とかね。