X86 CMOS
1、cmos簡介。
cmos是主板上一塊可讀寫的RAM芯片。用途:主要用來保存當前系統的硬件配置和操作人員對某些參數的設定。cmos芯片是由一塊紐扣電池供電。因此在關機狀態內部信息也不會丟失。
2、cmos所在的端口。
cmos芯片是掛在cpu的io空間上的.(x86體系是獨立編址的)。cmos擁有兩個端口號分別是70h和71h
端口號 權限 長度 作用
70h 不可讀可寫 8bit 用它來設置cmos中的數據地址
71h 可讀可寫 8bit 用它來設置70h端口地址中的值
3、cmos中的數據地址對照表。(供編程時查)
地址 數據 備注
00H Time - Seconds 硬件時間的秒
01H Alarm - Seconds
02H Time - Minutes 硬件時間的分
03H Alarm - Minutes
04H Time - Hours 硬件時間的時
05H Alarm - Hours
06H Date - Day of the week
07H Date - Day
08H Date - Month
09H Date - Year
0AH Status Register A
0BH Status Register B
0CH Status Register C
0DH Status Register D
0EH Diagnostic Status
0FH Shutdown Status
10H A:
11H Reserved
12H 0
13H Reserved
14H Equipment Installed
15H Base Memory (high byte)
16H Base memory (low byte)
17H Extended Memory (high byte)
18H Extended Memory (low byte)
19H 0 (C:) Hard Disk Type
1AH 1 (D:) Hard Disk Type
1BH Reserved
1CH Supervisor Password
1DH Supervisor Password
1EH ~ 2DH Reserved
2EH CMOS Checksum (high byte)
2FH CMOS Checksum (low byte)
30H Extended Memory (high byte)
31H Extended Memory (low byte)
32H Date - Century
33H Power On Status
34H~3FH Reserved
40H~5FH Extended CMOS
60H User Password
61H User Password
62H~7FH Extended CMOS
4、編程實例
#ifndef _CMOS_H_ #define _CMOS_H_ 1#include <io.h>/* CMOS I/O REG */ #define CMOS_ADDR_REG 0x70 #define CMOS_DATA_REG 0x71/* CMOS INDEX */ #define CMOS_INDEX_SECOND 0 #define CMOS_INDEX_SECOND_ALARM 1 #define CMOS_INDEX_MINUTE 2 #define CMOS_INDEX_MINUTE_ALARM 3 #define CMOS_INDEX_HOUR 4 #define CMOS_INDEX_HOUR_ALARM 5 #define CMOS_INDEX_DAY_OF_WEEK 6 #define CMOS_INDEX_DAY_OF_MONTH 7 #define CMOS_INDEX_MONTH 8 #define CMOS_INDEX_YEAR 9#define CMOS_INDEX_STATUS_A 0xA #define CMOS_INDEX_STATUS_B 0xB #define CMOS_INDEX_STATUS_C 0xC #define CMOS_INDEX_STATUS_D 0xD#define CMOS_STATUS_B_DAYLIGHT 1 #define CMOS_STATUS_B_24HOUR 2 #define CMOS_STATUS_B_BINARY 4static inline uint8_t bcd_to_num(uint8_t a) {return ((a >> 4) * 10 + (a & 0xF)); }static inline uint8_t num_to_bcd(uint8_t a) {return (((a / 10) << 4) + (a % 10)); }static inline uint8_t cmos_read(uint8_t index) {outb(CMOS_ADDR_REG, index);return inb(CMOS_DATA_REG); }static inline void cmos_write(uint8_t index, uint8_t value) {outb(CMOS_ADDR_REG, index);outb(CMOS_DATA_REG, value); }#endif /* _CMOS_H_ */總結
- 上一篇: Power of Three
- 下一篇: SCSI、FC、iSCSI三大协议概述