CMOS 記憶體和實時時鐘

2021-05-21 19:42:04 字數 2447 閱讀 9345

第15章 cmos 記憶體和實時時鐘 筆記

簡介

系統帶有乙個小型的cmos記憶體,其中儲存著系統斷電時的資料。該記憶體用來記錄軟盤的型別和數目、硬碟大小資訊、記憶體大小以及其他重要的系統資料。cmos晶元還含有乙個實時時鐘(rtc),用來保持當前時間。關掉電源時,rtc由計算機內部的電池供電。電池保持時鐘處於活動狀態,以及保留cmos記憶體內容。如果在斷電時電池無法正常供電,將丟失cmos內容。在bios系統上電自檢(post)期間,大多數bios會識別出這一點。

實時時鐘(rtc)的常用資訊有十個暫存器用來訪問rtc時間和資料。所有的時鐘暫存器採用bcd (二進位制編碼的十進位制)格式。

另外四個暫存器用來儲存時鐘、鬧鐘和cmos記憶體的狀態和控制資訊。狀態和控制暫存器稱作暫存器a、b、c和d 。rtc有許多古怪之處,要求專門的程式設計來保證訪問可靠。使用下面描述的rtc bios來避免這些令人頭疼的問題,我極力推薦這樣做.通過i/o埠70h裝入任何資料或時間暫存器時,必須停止時鐘。這一點可以防止在設定新的日期或時間期間更新暫存器。要停止時鐘,可以將暫存器b的第7位設定為1。更新完成時,將暫存器b的第7位設定為0來啟用時鐘。

警告

中斷在訪問cmos暫存器時必須禁止所有的中斷。訪問乙個cmos暫存器時,埠70h用於選擇使用哪個暫存器。然後通過埠71h讀或寫這個暫存器。如果在兩個i/o埠訪問之間出現了中斷,並且中斷處理程式會訪問cmos,你的**將會讀或寫錯誤的暫存器。

除了禁止中斷之外,還要禁止不可遮蔽中斷(nmi)。nmi主要用於陷入ram奇偶錯誤和數字協處理錯誤。在訪問cmos時很可能出現這些情況。不幸的是,nmi禁止是乙個只寫標誌,所以前面的狀態無法知道。每個人常用的方法是假定nmi是開放的,這就意味著在訪問cmos後總會開放nmi。

在觀察訪問乙個cmos暫存器的步驟時,你必須首先使用cli指令禁止中斷。選擇cmos暫存器時應禁止了nmi,恰巧由埠70h的位7控制nmi,這個埠和指定cmos暫存器的埠相同。cmos訪問完成時,再次寫埠70h,並清除位7,來重新開放nmi。

然後使用sti指令來開放一般的中斷。在下面的程式read_cmos 和 write_cmos 中考慮了以上這些問題。

(有些chipset支援256 bytes的cmos ram,訪問128bytes以後的空間需要開啟chipset的始能register,有些chipset使用72h,73h訪問擴充套件的空間如intel chipset,有些仍然使用70h,71h如sis chipset) 

**例15-1 讀cmos

;----------------------------------

;read_cmos

;讀取指定cmos暫存器的內容

;;呼叫:al=要讀取的cmos位址

;;返回:ah=暫存器的內容

;          開放nmi,如果禁止

read_cmos  proc  near

or al, 80h    ;禁止nmi

cli               ;禁止中斷

out 70h,al   ;要讀取的暫存器

iodelay

in al, 71h    ;返回暫存器的內容

mov ah,al

mov al,0

iodelay

out 70h,al   ;開放nmi

sti               ;開放中斷

retread_cmos endp

**例 15-2 寫cmos

;-------------------------------

; write_cmos

;; 呼叫:al=要寫入的cmos暫存器

;       ah=要寫入的值

;; 返回:nmi開放,如果禁止

write_cmos proc near

cli                ;禁止中斷

or  al,80h    ;禁止nmi

out 70h,al   ;al=要寫的暫存器

mov al,ah

iodelay

out 71h,al   ;寫暫存器

mov al,0

iodelay

out 70h,al   ;開放nmi

sti               ;開放中斷

retwrite_cmos endp

cmos 求和校驗

許多bios**商,例如ami和phoenix,將從10h到2dh的cmos暫存器加起來,並將這個和值字儲存在暫存器2eh和2fh中。暫存器2eh儲存著高位校驗位元組,而暫存器2fh儲存著低位校驗位元組。

網上有很多盛傳的用debug 命令破解cmos密碼的方法,正是基於此原理,利用破壞cmos的校驗值來達到清除cmos密碼的目的。

RTC實時時鐘

rtc的英文全稱是real time clock,翻譯過來是實時時鐘晶元.rtc是pc主機板上的晶振及相關電路組成的時鐘電路的生成脈衝,rtc經過8254電路的變頻產生乙個頻率較低一點的os 系統 時鐘tsc,系統時鐘每乙個cpu週期加一,每次系統時鐘在系統初起時通過rtc初始化。8254本身工作也...

RTC實時時鐘

系統在斷電後 需要rtc電池計時間並在系統啟動後 將這個時間給到系統時間。以此維護系統斷電後與現實時間同步 一般rtc電池需要3v的電壓 若經過擴充套件板連線 需要測量此電壓是否給到主控晶元 然後date命令可以檢視系統時間 date s 2008 08 08 12 00 00 可以通過這個命令修改...

實時時鐘RTC

1.簡述 外圍裝置控制器晶元 ich 內部,整合了實時時鐘電路 rtc 以及兩個cmos組成的靜態儲存器 cmos ram 通常為128b rtc負責計時,由1個32.768khz的石英晶體振盪器驅動,經分頻後用於cmos ram進行每秒一次的時間重新整理 cmos ram中時間資訊如下表所示,前1...