RTC & CMOS 技術詳解

背景介紹:
以下文章引用自史萊姆論壇
CMOS,(是指互補金屬氧化物半導體——一種大規模應用於集成電路晶片製造的原料)是微機主機板上的一塊可讀寫的RAM芯 片,用來儲存當前系統的硬體配置和用戶對某些參數的設定。CMOS可由主機板的電池供電,即使系統掉電,訊息也不會丟失。

CMOS RAM本身只是一塊存儲器,只有資料儲存功能,而對CMOS中各項參數的設定要通過專門的程序。

早期的CMOS設置程序駐留 在軟碟上的(如IBM的PC/AT機型),使用很不方便。現在多數廠家將CMOS設置程序做到了BIOS晶片中,在開機時通過特定的按鍵 就可進入CMOS設置程序方便地對系統進行設置,因此CMOS設置又被叫做BIOS設置。

早期的CMOS是一塊單獨的晶片MC146818A(DIP封裝),共有64個字節存放系統訊息,見CMOS配置資料表。

386以後的微機一般將 MC146818A晶片集成到其它的IC晶片中(如82C206,PQFP封裝),最新的一些586主機板上更是將CMOS與系統既時時鐘和後備電池集 成到一塊叫做DALLDA DS1287的晶片中。

隨著微機的發展、可設置參數的增多,現在的CMOS RAM一般都有128字節及至256字節 的容量。

CMOS存取方法:
現代PC BIOS要紀錄的資料量大,所以CMOS RAM以128 bytes為單位分成兩塊
要讀取/寫入第一塊的方式就是對IO address 70h寫入索引位址,資料就會出現在71h,
第二塊的讀取/寫入方法依樣畫葫蘆,對IO address 72h寫入索引位址,資料就會出現在73h

Linux系統的實做:
由下而上的看法就是核心要安裝RTC的驅動程式,原始檔在driver/rtc/...
裝好之後/dev/rtc就會出現在檔案系統中,再透過ioctl就可以取得/設定系統時間
使用者端的工具就是date,開發者的函式就是settime()/getrime(),宣告在

CMOS RAM分佈圖:(取自MC146818A Datasheet



留言

匿名表示…
請問RTC可以記錄非時間的資料
作者已經移除這則留言。
作者已經移除這則留言。
可以,只要自己寫程式去讀寫後面的bytes即可
不過要注意checksum的問題
不然每次開機都會被BIOS提示checksum erro

這個網誌中的熱門文章

[自由網路] 如何取得 Google Drive (真實)外連位址 (Direct Link)