(100:100) 486 025 261.969666 130.984833 130.984833 43.661611 (間は省略) 446 023 260.018158 130.009079 130.009079 43.336360ここで最初の2つが3.で指定する値である。またその後の数値はVCO値、FSB、MEM、PCIの値である。
(100:100) 477 024 267.089142 133.544571 133.544571 44.514857 600.950569 (間は省略) 439 022 266.676117 133.338058 133.338058 44.446019 600.021263最後にCPUのクロックが出る以外は上と同じ。
out 2E,87 out 2E,87 out 2E,7 論理デバイス番号を out 2F,8 8にする。 out 2E,F1 インデックスF1の in 2F レジスタを読んで、 out 2E,F1 ビット3,4でバスを指定して、 out 2F,xx 書き戻す。でやってみる。ざっと見るとASUSのSMBus切り替えで0は環境センサ、1はクロック、2はSPD、3には何もない?らしい。
Offset 0 - bit 7(R/WC) Byte Done Status |
BlockReadで1バイト受信したときにセットされる。BlockWriteで1バイト転送が終わったときにセットされる。最後の転送が終わったときにもセットされる。1を書くことでクリア。 |
Offset 2 - bit 5(W) LAST BYTE |
BlockReadでこれ以上データを読み込まないときにセットする。 |
Offset 2 - bit 4:2(R/W) SMBus Command |
101:Block このコマンドはSlaveアドレス、コマンド、DATA0、ブロックデータバイトレジスタを使う。BlockWriteにはカウントをDATA0に入れ、BlockReadにはカウントがDATA0に出る。BlockWriteではSRAMアレイの最初のnバイトが書かれる。BlockReadではデータはBlockDataByteに出る。 |
Offset 7 Block Data Byte Register |
BlockWriteでは最初のバイトを書いておく。アドレス、コマンド、バイトカウント送信後、ここのデータが送られる。送信後ByteDoneStatus(0-7)が立つ。更にデータを送るなら、次のバイトをここに書き、ByteDoneStatusをクリアする。BlockReadではバイトカウントを読んで、最初のバイトをここにセットしてSMI#か割り込みを発生させる。この割り込みハンドラでデータを読み、ByteDoneStatusをクリアする。 |
0xE804にデバイスの番号を2倍+1を書く。(クロックジェネレータの場合は0xd3) 0xE803にダミーデータを書く。 0xE802に0x54を書く。 0xE800のビット7がセットされるまで待つ。 0xE805にデータのサイズが出ている。 0xE807を読むとデータが出ている。読んだ後、0xE800に0x80を書いてクリアする。これをサイズ分繰り返す。ブロックライトではアドレスが0xd2で、1バイト目をセットしてから0xE802に0x54を書く。以下0xE807の制御はリードと同様となる。
i2crwa1 rk 69 00 DVA = 69 Reg = 00 SIZE = 18 0000 : A2 BF FF FF FB EF 18 FF 82 02 00 01 00 00 9A C1 0010 : 1A EC 09 00 BA 00 90 07データ24バイトが読める。内容はデータシート参照。詳細設定のFSBは9A C1の部分で指定しており、VCOdv=c1*2+1=387、REFdv=1a=26、VCO=(387+8)/(26+2)=201.98861MHzで、100:100の時のFSBはVCO/2のため、FSB=100.994305MHzである。これはCUSL2のBIOS1005.03で100:100、FSB100にしたときのものである。WCPUIDなどで観測されるとおり、1MHz程高くなっている。(CUSL2のBIOS上で、なぜわざわざ正確でないのかは不明。ベンチ対策?)
i2crwa1 wk 69 00 18 a2 bf ff ff fb ef 18 ff 82 02 00 01 00 00 18 df 1a ec 09 00 ba 00 90 07 DVA = 69 Reg = 00 SIZE = 18 0000 : A2 BF FF FF FB EF 18 FF 82 02 00 01 00 00 18 DF 0010 : 1A EC 09 00 BA 00 90 07
(100:100) 477 024 267.089142 133.544571 133.544571 44.514857 600.950569 421 021 267.065186 133.532593 133.532593 44.510864 600.896667 365 018 267.034058 133.517029 133.517029 44.505676 600.826630 309 015 266.991943 133.495972 133.495972 44.498657 600.731873 253 012 266.931793 133.465897 133.465897 44.488632 600.596535 458 023 266.890869 133.445435 133.445435 44.481812 600.504456 197 009 266.838806 133.419403 133.419403 44.473134 600.387314 402 020 266.838806 133.419403 133.419403 44.473134 600.387314 346 017 266.770294 133.385147 133.385147 44.461716 600.233162 495 025 266.742401 133.371201 133.371201 44.457067 600.170403 141 006 266.676117 133.338058 133.338058 44.446019 600.021263 290 014 266.676117 133.338058 133.338058 44.446019 600.021263 439 022 266.676117 133.338058 133.338058 44.446019 600.021263こんな結果が得られる。VCOの設定値、REFの設定値、VCOクロック、FSBクロック、MEMクロック、PCIクロック、CPUクロックの順に出ている。
(100:100) 486 025 261.969666 130.984833 130.984833 43.661611 303 015 261.938477 130.969238 130.969238 43.656413 431 022 261.903381 130.951691 130.951691 43.650564 (間の50個省略) 319 016 260.113617 130.056808 130.056808 43.352269 428 022 260.113617 130.056808 130.056808 43.352269 446 023 260.018158 130.009079 130.009079 43.336360と56通りの設定を示してくれる。VCOの設定値、REFの設定値、VCOクロック、FSBクロック、MEMクロック、PCIクロックの順に出ている。
_outp( SMBAdd+4, ( dva<<1) + 1); _outp( SMBAdd+3, Regadd); _outp( SMBAdd+2, 0x54); while( 1) { tmp = _inp( SMBAdd); if( tmp & 0x86) break; } if( tmp & 0x06) goto next; size = _inp( SMBAdd+5); for( i=0;i<size;i++){ while( (tmp & 0x86) == 0){ tmp = _inp( SMBAdd); } if( tmp & 0x06){ break; } data[ i] = _inp( SMBAdd+7); _outp( SMBAdd, 0x80); tmp=0; } _outp( SMBAdd+2, 0x20);
_outp( SMBAdd+4, ( dva<<1)); _outp( SMBAdd+3, Regadd); _outp( SMBAdd+5, count); _outp( SMBAdd+7, data[0]); _outp( SMBAdd+2, 0x54); while( 1) { tmp = _inp( SMBAdd); if( tmp & 0x86) break; } if( tmp & 0x06) goto next; for( i=1;i<size;i++){ while( (tmp & 0x86) == 0){ tmp = _inp( SMBAdd); } if( tmp & 0x06){ break; } _outp( SMBAdd+7, data[i]); _outp( SMBAdd, 0x80); tmp=0; } _outp( SMBAdd+2, 0x20);
HANDLE h; h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(h == INVALID_HANDLE_VALUE) { // printf("Couldn't access giveio device\n"); // return -1; } CloseHandle(h);
66:100 66.81 22 BF FF FF FB EF 18 FF 82 02 00 01 00 00 10 F8 11 78 91 88 FA 00 90 07 100:100 100.99 A2 BF FF FF FB EF 18 FF 82 02 00 01 00 00 9A C1 1A EC 09 00 BA 00 90 07 133:133 134.00 26 FF FF FF FF EF 18 FF 82 02 00 01 00 00 8B B2 1F F8 98 88 CA 00 90 07 133.100 134.00 A6 FF FF FF FF EF 18 FF 82 02 00 01 00 00 8B B2 1F F8 90 88 EA 00 90 07ちなみに16,17バイト目がスプレッドスペクトラムの設定、17の上3ビットと18-20がレシオの設定となっている。
66:100 7x 91 88 FA 0011 1111 1010 1000 1000 1001 0001 6 4 6 12 24 100:100 Ex 09 00 BA 0111 1011 1010 0000 0000 0000 1001 2 2 3 6 12 133:133 Fx 98 88 CA 0111 1100 1010 1000 1000 1001 1000 3 3 6 12 24 133:100 Fx 90 88 EA 0111 1110 1010 1000 1000 1001 0000 3 4 6 12 24
http://www10.plala.or.jp/p205tb16/cusl2.html
坂井瑞穂