主流主板廠商的超頻軟體均基於頻率發生器硬體實現,多數頻率發生器為 I2C 總線設備。本文介紹 I2C 設備基本原理及超頻核心方法。
關鍵字:I2C、頻率發生器、位元組讀寫、區塊讀寫
DIY 族群追求極致效能,主板廠商推出超頻軟體:聯想 QDI StepEasy、技嘉 EasyTune、微星 Fuzzy Logic、璩泰克 紅色風暴。超頻實質是對頻率發生器輸出的基礎外頻進行調整。
例子:CPU 800MHz (外頻 100MHz × 倍頻 8)。外頻由頻率發生器決定。軟體操作發生器將輸出改為 105MHz,CPU 內頻變 105×8=840MHz,達到超頻目的。
主流頻率發生器供應商:Cypress、ICS、Winbond、PhaseLink。僅支援軟體調整輸出頻率的晶片才能作為超頻基礎。多數發生器以 I2C 總線與主板通訊,故理解 I2C 為超頻原理前提。
I2C (Inter-Integrated Circuit) 為飛利浦 80 年代開發的串行總線,初為音視頻設備設計,今廣泛用於微電子、消費電子、通訊領域。




核心:修改時鐘晶片 I2C 總線上資料暫存器值,免跳線、免重啟達到超頻。為防超頻死機,晶片提供看門狗功能:超頻過程觸發內部計數器,若死機,幾秒後發 reset 重啟;若成功,軟體須在等待期間清除看門狗暫存器讓系統正常運作。

上電/掉電提供復位電平。WDI RESET 腳未採集到翻轉信號時發 200ms 復位脈衝。單晶片 P30 定時發送翻轉信號證明系統正常。外部干擾導致死機時,看門狗自動發復位信號觸發主板重啟。
軟體視角:將 CPU 外頻轉換為參數寫入發生器暫存器。以某晶片為例,公式:
Fcpu = G * (N + 3) / (M + 3)
Fcpu:目標外頻G:定義常數M, N:已知最大/最小值編程搜尋最接近目標頻率的 M、N 值 (參考代碼):
#define G xxx
#define Mmax xxx; #define Nmax xxx
#define Mmin xxx; #define Nmin xxx
void FoundMN(float Fcpu, int *M, int *N) {
float D = 300; // 測試差值
for (*M = Mmin; *M <= Mmax; (*M)++) {
for (*N = Nmin; *N <= Nmax; (*N)++) {
float FREQ = G * (*N + 3) / (*M + 3);
if (fabs(Fcpu - FREQ) < D) {
D = fabs(Fcpu - FREQ);
// 存入最佳 M1, N1
}
}
}
}
寫入暫存器後,若幾秒系統正常,超頻成功。
遵循 I2C 傳輸協議。重點:I2C 資料暫存器讀寫分位元組與區塊模式,視晶片而定。將算得的 M、N 依對應模式寫入暫存器。
; Byte 方式讀
ReadByte Proc Near
push cx
mov dx, SMBus_Port + 04h
inc ch
mov al, ch ; ID 讀命令
out dx, al
IODELAY
call Ct_Chk_SMBus_READY
pop ax
mov dl, 03h
out dx, al
IODELAY; IODELAY
mov dl, 02h
mov al, 48h
out dx, al ; 讀資料
IODELAY
mov cx, 1000h
@@: newiodelay; loop short @B
call Ct_Chk_SMBus_READY
mov dl, 05
in al, dx ; 讀出資料到 AL
IODELAY
ret
ReadByte Endp
; Block 方式寫
WriteBlock PROC NEAR
push cx
call Ct_Chk_SMBus_READY
mov dx, SMBus_Port + 02h
in al, dx
IODELAY
pop cx
mov dx, SMBus_Port + 04h
mov al, ch
out dx, al
IODELAY
mov dx, SMBus_Port + 03h
mov al, cl
out dx, al
xor cx, cx
mov dx, SMBus_Port + 00h
BlockWriteok:
mov al, byte ptr es:[si] ; es:[si+0] = 區塊大小
mov dx, SMBus_Port + 05h
out dx, al
IODELAY
movzx cx, al ; 取得 block 數
inc si ; es:[si+1] = 開始資料
mov dx, SMBus_Port + 07h
WriteBlockdata:
mov al, byte ptr es:[si]
out dx, al
IODELAY
inc si
loop short WriteBlockdata
mov dx, SMBus_Port + 02h
mov al, 54h
out dx, al
IODELAY
xor cx, cx
mov dx, SMBus_Port + 00h
Writefail:
in al, dx
IODELAY
test al, 02h
jnz short writeok
out dx, al
IODELAY
loop short Writefail
Writeok:
ret
WriteBlock ENDP
超頻後系統極不穩定:頻率發生器輸出改變,不只 CPU 外頻變化,主板 SDRAM、PCI、AGP 設備頻率同步變化,這些設備對頻率變化承受力往往弱於 CPU,故常導致死機。