都合により、I2Cのブロックリードを試す。本当はクロックジェネレータをいじりたかっただけなのだが、どうやら今使っているマザーボードにのっているクロックジェネレータはバイトリードを受け付けてくれなかったのだ。やり方はわかっていて、
0x5004にデバイスの番号を2倍+1を書く。(クロックジェネレータは0xd3)
0x5003にダミーデータを書く。
0x5002に0x54を書く。
0x5005にデータのサイズが出てくる。
0x5002をとりあえず読む。
0x5007を読むたびにデータが順に出てくる。
とりあえずものを作ってみた。 Windows95のDOS窓だけで動作確認している。読むだけなので、システムへの影響はほとんどない。
I2CBLK.EXE
やはり、再配布は禁止しておく。
おっと、プログラムソース(ブロックリードの主要部分)は次の通り。ああ、やっぱり簡単。
#define SMBAdd 0x5000 _outp( SMBAdd+4, ( dva<<1) + 1); _outp( SMBAdd+3, 0); _outp( SMBAdd+2, 0x54); while( 1) { tmp = _inp( SMBAdd); if( tmp & 0x06) break; } if( tmp == 0x04) goto next; size = _inp( SMBAdd+5); tmp = _inp( SMBAdd+2); for( i=0;i<size;i++){ data[ i] = _inp( SMBAdd+7); } printf("DVA = %02X\n", dva); printf("SIZE = %02X\n", size); dump( data, size); next:;
_outp( SMBAdd+4, ( dva<<1)); _outp( SMBAdd+3, Regadd); _outp( SMBAdd+5, count); tmp = _inp( SMBAdd+2); for( i=0;i<count;i++){ _outp( SMBAdd+7, data[i]); } _outp( SMBAdd+2, 0x54); while( 1) { tmp = _inp( SMBAdd); if( tmp & 0x06) break; }
http://www10.plala.or.jp/p205tb16/i2cblk.html
坂井瑞穂