文章摘要:
目前各大主板供應商使用的超頻軟件都是基於頻率發生器這一硬件實現 的,而大部分頻率發生器都是了I2C總線上的一個設備,本文介紹了I2C 設備的基本原理及超 頻的基本方法和原理。
關鍵詞:I2C,頻率發生器,字節讀寫,塊讀寫
Over- clock basic theory
Luo xi, Zhang Hong-wei
518027 R&D Department QDI Business Legend(shenzhen) Electrolic Inc.
ABSTRACT:
Almost all the over-clock software provided by mainboard manufactory is based on the clock generator which is the basic hardware on mainboard. And almost all clock generators are I2C devices. This document focus on how the I2C device works and the basic theory of over-clock software.
Key words: I2C, clock generator, Byte read/write, Block Read/Write
隨著計算機的快速發展,越來越多的DIY們希望 更充分地發揮計算機及其部件的性能,"搾取"包括CPU在內的各種設備的資源。在 這種情況下,各主板廠商提供的超頻軟件就應運而生了。這些應用軟件包括聯想QDI的 StepEasy(超頻梭),技嘉的EasyTune,微星的Fuzzy Logic,碩泰克的紅色風暴。本文將在這 個方面結合自己在這方面的實踐經驗,介紹超頻軟件的實現原理。
1.前言
實 際上,所有超頻軟件超頻的實現都離不開頻率發生器的硬件支持,也就是說超頻實際上是對 頻率發生器(clock generator)輸出的基本外頻進行超頻。如當CPU頻率為800兆,即外頻為 100兆,倍頻為8倍時,其外頻實際上是由頻率發生器的輸出頻率決定的。當用軟件操作頻率 發生器使其輸出頻率改變為105兆時,CPU的內頻將運行在105乘以8,即840兆的頻率上,這樣 就實現了超頻使用CPU的目的。
當前主板使用的頻率發生器主要供應商有Cypress, ICS,Winbond,PhaseLink等,而這些廠商生產的頻率發生器有支持軟件改變輸出頻率的,也 有不支持的。因此超頻軟件必須是基於可以使用軟件改變輸出頻率的頻率發生器的基礎上的 。
主板上的頻率發生器大部分都是以I2C總線的方式與其他主板設備進行通訊,也就 是說頻率發生器是一個I2C設備,要了解超頻的基本原理首先必須了解I2C總線的基本原理。
2. I2C總線基本原理
I2C(inter-integrated circuit)總線是一種由飛利浦公 司開發的串行總線,產生於80年代,最初為音頻和視頻設備開發,現在在微電子通信控制, 消費電子產品,通信等領域都得到了廣泛的應用。
2.1 I2C總線的特點
I2C總 線包括一個兩端接口,通過一個帶有緩沖區的接口,數據可以被I2C發送或接受。控制和狀態 信息則通過一套內存映射寄存器來傳送。
I2C總線最主要的優點是其簡單性和有效性 。它只需兩線(一串行數據線:SDA,及一串行時鐘線:SCL)。每個連線到總線的器件以單 一不同的地址,用軟件來存取。由於接口直接在組件之上,因此I2C總線占用的空間非常小, 從而減少了電路板的空間和芯片管腳的數量,降低了互聯成本。總線的長度可高達25英尺, 並且能夠以10Kbps的最大傳輸速率支持40個組件。I2C總線的另一個優點是,它支持多主控 (multi-mastering),其中任何能夠進行發送和接收的設備都可以成為主總線。它以串行8位 為主,雙向傳送的方式進行數據傳輸。一個主總線能夠控制信號的傳輸和時鐘頻率。主控器 可以作為主發送器或主接收器。
舉例如圖1:
圖1 I2C總線舉例
2.2 總線數據傳輸開始及停止
以下分別為所需的開始及停止條件。開始條件 :當SCL線在高位時,SDA線由高轉換至低。停止條件:當SCL線在高位時,SDA線由低轉換至 高。
開始及停止條件通常由主控器產生,如圖2所示。
圖2 數據傳輸開始 和停止條件
2.3 數據傳輸確認
數據傳送附上確認位是必要的。與確認有關的 時鐘脈沖是由主控器發出。當確認時鐘脈沖期間,發送那方要釋放SDA線(高電平)。當確認 時鐘脈沖時,接收那方一定將SDA線拉低,因此在這時鐘脈沖高位時,它維持在穩定的低位, 如圖3所示。
圖3 數據傳輸的 確認狀態
2.4 數據傳輸過程
每一個放上SDA線的字節為8位長。每一次傳送的 字節數量沒有限制。每字節必須有一確認位跟隨。數據傳送以最高有效位為先。
在開 始條件之後,一個從屬地址被送出。這個地址是7位長,然後是第8位,它是一個數據方向位 (讀/寫)--"0"代表發送(寫入),"1"代表需求數據(讀入)。數 據傳送通常以主控器所發出的停止條件(P)結束,如圖4,5,6所示。
圖4 數據傳輸過 程
圖5 對應具有 7位地址的從屬接收器的主發送器的地址,轉換方向不變化
圖6 從屬器第一 字節之後主控器立即讀
3 超頻基本原理
超頻軟件基本原理簡單而言是通過修 改時鐘芯片(CLOCK Chip)I2C總線上數據寄存器的值,從而無須跳線,無須重新啟動就能達 到超頻的目的。同時,為了防止超頻後系統死機,時鐘芯片還提供了“看門狗 (watchdog)”地功能。如下圖,在超頻過程中,會同時觸發時鐘芯片內部的計數器, 如果死機,系統會在幾秒後發出reset信號,使系統重新啟動。如果超頻成功,在這等待的幾 秒內,軟件必須清除設置看門狗的寄存器,使系統繼續正常工作。
圖7:時鐘芯片管 腳圖
3.1 復位與看門狗電路
當電源上電、掉電時,該芯片都可提供復位電平 ,並且當其WDI RESET管腳不能采集到翻轉信號時,就會發送200ms的復位脈沖。單片機控制 器采用P30腳定時向看門狗電路發送電壓翻轉信號,以示系統正常工作。當由於外部干擾或其 他原因導致死機時,看門狗電路會自動發出復位信號,從而觸發主板復位電路使系統重新啟動 。
3.2 M和N的選擇
要實現超頻,從軟件的角度來看就是將CPU的外頻轉換成一 定的參數,並將這些參數寫入到頻率發生器的寄存器中去。在這裡,首先將CPU外頻轉換成兩 個值M和N。以某種芯片為例,根據公式 Fcpu=G*(N+3)/(M+3)就可以得出M和N的值,在這個公 式中Fcpu的值為我們想要超的外頻大小,G為一個定義好的常數, M和N的最大值和最小值也 已知。因此很容易通過編程從而得出當前想要超的外頻所對應的M和N的值。以下是我們用C語 言寫的一段小代碼以供參考(注:實現方法很多):#define G xxx
#define Mmax xxx
#define Nmax xxx
#define Mmin xxx
#define Nmin xxx
void FoundMN(float Fcpu,int*M,int*N)// Fcpu為輸入參數,為想得到的外頻值
{ //M,N為輸出參數,為該外頻值對應的值
…
D=300; // 定義D為一個測試的值
for( M=Mmin; M<=Mmax; M++ )
{
for( N=Nmin; N<=Nmax; N++ )
{
FREQ=G*(N+3)/(M+3); // 測試由當前的 M,N得出的外頻值
if ( fabs((Fcpu-FREQ)) < D )//看得出的外頻值 是否與想超的外頻值更接近
{
D = float(fabs((Fcpu-FREQ)));// 更新外頻值與想超的外頻值之間的
//差值
M1=M; N1=N; //將M,N值存入M1,N1
}
}
}
}
接著把M和N的值寫入相應的寄存器了,如果幾秒種後系統工作正常,超頻就成功了。
4. 軟件設計
軟件設計必須遵循I2C總線的傳輸協議,上面已經列出了,在這 裡不再重復,必須強調一下I2C總線數據存儲器的讀寫分為Byte和Block的讀寫,按照不同的 時鐘芯片而定。而軟件設計就是將前面我們已經得出的想要超的CPU外頻所對應的兩個參數M 和N,根據不同的時鐘芯片對應的Byte或Block的讀寫方式寫入I2C總線數據存儲器裡。以下為 I2C總線數據存儲器的Byte,Block讀寫源程序:
;Byte方式讀:
ReadByte Proc Near
push cx
mov dx,SMBus_Port +04h ;將I2C總線基地址讀入段寄存器
inc ch
mov al,ch ;ID 讀的命令
out dx,al
IODELAY ;IO延時
call Ct_Chk_SMBus_READY ;檢測I2C總線是否准備好
pop ax
mov dl,03h
out dx,al
IODELAY //IO延時
IODELAY //IO延時
mov dl,02h
mov al,48h
out dx,al ;讀數據
IODELAY ;IO延時
mov cx,1000h
@@:
newiodelay
loop short @B
call Ct_Chk_SMBus_READY ;檢測I2C總線是否准備好
mov dl,05
in al,dx ;讀出數據到AL寄存器
IODELAY ;IO延時
ret
ReadByte Endp
; ************************************************************
;Block方式寫:
WriteBlock PROC NEAR
push cx
call Ct_Chk_SMBus_READY ;檢測I2C總線是否准備好
mov dx,SMBus_Port + 02h
in al,dx ;基地址加上02h
IODELAY ;IO延時
pop cx
mov dx,SMBus_Port + 04h
mov al,ch
out dx,al
IODELAY ;IO延 時
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 ; IO延時
movzx cx,al ; 獲取讀取的block數
inc si ;es:[si+1]=開始寫數據
;R09A mov cl,byte ptr es:[si]
mov dx,SMBus_Port + 07h
WriteBlockdata:
;R09B mov al,byte ptr cs:[si]
mov al,byte ptr es:[si]
out dx,al
IODELAY ;IO延時
inc si
loop short WriteBlockdata
mov dx,SMBus_Port + 02h ;開始以block方式寫
mov al,54h
out dx,al
IODELAY ;IO延時
xor cx,cx
mov dx,SMBus_Port + 00h ;檢查狀態
Writefail:
in al,dx
IODELAY ;IO延時
;R09A or al,al ;檢查狀態
;R09A jz short Writeok
test al,02h
jnz short writeok
out dx,al ;清除狀態
IODELAY ;IO延時
loop short Writefail
Writeok:
ret
WriteBlock ENDP
5 後記
實際上,主板設備在超頻後的使用是極不穩定的,這是因為頻率發生器的輸出頻率改 變後,不僅是CPU外頻發生了變化,包括主板上其他設備包括SDRAM,PCI設備,AGP設備的使 用頻率都發生了變化。而這些設備對頻率變化的承受程度有可能比CPU弱許多,因此,超頻後 經常導致死機等現象發生。
引或用參考文獻:
1)“I2C總線介紹” 作者 : 彭秀峰
2)“The I2C-BUS Specification Version 2.1” 作者: Philips Semiconductors 1/2000