BIOS工程師眼中常用的EC知識(shí)點(diǎn)匯總:
EC的硬件架構(gòu)
EC硬件結(jié)構(gòu)上主要分為兩部分:Host Domain和EC Domain
Host Domain就是通過(guò)LPC與CPU通信的部分(LPC部分需要先執(zhí)行相關(guān)的初始化:比如decode 62/66 68/6c,設(shè)置LPC Serial IRQ mode to continus mode等,這樣EC才能通過(guò)IO與PCH通信),可以看成ISA的設(shè)備卡;
EC Domain可以看成一個(gè)51的單片機(jī)。
BADRSEL寄存器是在EC初始化的時(shí)候設(shè)置的,決定了使用tool訪(fǎng)問(wèn)EC的信息時(shí)要通過(guò) 4E/4F:

EC的代碼框架
必要的初始化,然后進(jìn)入一個(gè)while循環(huán)。
while循環(huán)里面有不同間隔的定時(shí)器回調(diào)函數(shù),比如每1ms, 5ms, 10ms等就執(zhí)行一次。在回調(diào)函數(shù)里面判斷各種flag(flag由硬件中斷或其他函數(shù)置起來(lái),比如拔一下AC,按一下hotkey等),執(zhí)行相應(yīng)操作。
EC RAM space
比如定義RAM 0x0400用來(lái)與EC ASL code交互數(shù)據(jù)(參看:BIOS之ASL code常用知識(shí)點(diǎn))

比如定義RAM 0x0E00用做debug:在EC code里面通過(guò)調(diào)用RamDebug(dbgcode)來(lái)往0xE00的位置寫(xiě)debug code從而追蹤EC code的執(zhí)行。

EC Register Space
通過(guò)EC tool查看寄存器的值,從而判斷寄存器的輸入輸出狀態(tài);通常用在通過(guò)EC的GPIO來(lái)Enable/Disable TP等device(Hotkey的實(shí)現(xiàn)原理)
下面的Datasheet和tool截圖(GPIO的數(shù)據(jù)寄存器)表示:
offset 0A = ED (1110,1101)表示GPJ1,GPJ4的輸出為低,GPJ0,2,3,5,6,7輸出為高 - 每個(gè)寄存器(byte)對(duì)應(yīng)一組8個(gè)pin,EC code通過(guò)調(diào)用SET_MASK(GPDRJ, BIT(6))來(lái)把GPDRJ:bit6置起來(lái)即把GPIO GPJ6拉高。



EC code與BIOS code交互
上面提過(guò)EC code與EC ASL code之間通過(guò)EC RAM Space(62/66)的交互(參看:BIOS之ASL code常用知識(shí)點(diǎn))
現(xiàn)在看一下BIOS通過(guò)60/64,62/66與EC通信:首先PCH端的LPC要初始化相應(yīng)的端口
BIOS demo code:
1.判斷輸入buffer是否為空,為空就往64 port寫(xiě)數(shù)據(jù)(命令):

2.判斷輸出buffer是否有數(shù)據(jù),有就從60 port讀數(shù)據(jù):

EC code里面的處理:
Hook_64Port(cmd)檢測(cè)cmd,調(diào)用不同的處理函數(shù),然后調(diào)用Data_To_Host(data)把數(shù)據(jù)返給BIOS,BIOS可以從60 port讀到這個(gè)值。
cmd被BIOS寫(xiě)到64 port,實(shí)際上是寫(xiě)到了寄存器KBHIDIR里面,EC返回的data也是被寫(xiě)到寄存器KBHIKDOR里面。
對(duì)IO口的操作最底層也是操作寄存器:


P80
一般來(lái)說(shuō),BIOS可以通過(guò)往port80寫(xiě)值來(lái)記錄代碼的運(yùn)行,往port80寫(xiě)的值會(huì)通過(guò)LPC總線(xiàn)寫(xiě)到EC的RAM區(qū)域:

Power
power sequence:
power sequence描述的是EC為系統(tǒng)不同的模塊上電的順序,比如按power button開(kāi)機(jī),就執(zhí)行S5_to_S0的power sequence(包括比如:檢查SLP_S4#的信號(hào)是否已經(jīng)被PCH拉高,把PCH的SYS_PWROK拉高表示上電OK等等)。
power信號(hào):
1. 比如系統(tǒng)進(jìn)S4,PCH會(huì)把SLP_S4#拉低來(lái)告訴EC系統(tǒng)進(jìn)S4了。
2. 比如系統(tǒng)進(jìn)S0 idle,PCH會(huì)把SLP_S0#拉低來(lái)告訴EC系統(tǒng)進(jìn)MS了,EC會(huì)開(kāi)啟power燈閃爍。
3. PCH把SLP_S4#拉高,表示從S4喚醒,EC需要給系統(tǒng)各模塊重新上電(當(dāng)然EC可以加一下條件,比如檢測(cè)到Lid close就不給系統(tǒng)上電)
ASL code里面的EC device
參看:BIOS之ASL code常用知識(shí)點(diǎn)
通過(guò)EC燒寫(xiě)B(tài)IOS ROM
通過(guò)EC燒寫(xiě)B(tài)IOS ROM的原理就是把ROM當(dāng)成EC的外接存儲(chǔ)芯片來(lái)燒錄,所以在設(shè)計(jì)原理圖的時(shí)候需要把SPI ROM同時(shí)接到PCH和EC。
- BIOS備忘錄之IIC(touchpad)設(shè)備
簡(jiǎn)述BIOS中對(duì)IIC device的支持,以touchpad為例. 信息收集 收集平臺(tái)的硬件信息: 1. IIC controller number(PCH一般包含多個(gè)controller,我們使用 ...
- DB2_SQL_常用知識(shí)點(diǎn)&實(shí)踐
DB2_SQL_常用知識(shí)點(diǎn)&實(shí)踐 一.刪除表中的數(shù)據(jù)(delete或truncate) 1 truncate table T_USER immediate; 說(shuō)明:Truncate是一個(gè)能夠快 ...
- JAVA常用知識(shí)點(diǎn)及面試題總結(jié)
1. String.StringBuffer.StringBuilder三者區(qū)別? (1)三者在執(zhí)行速率上的比較: String<StringBuffer<StringBuilder 原因 ...
- HTML常用知識(shí)點(diǎn)代碼演示
1 HTML部分常用知識(shí)點(diǎn) <!-- 版本聲明 --> <!DOCTYPE html> <!-- 唯一根元素 --> <html> <!-- 對(duì)網(wǎng) ...
- Java 常用知識(shí)點(diǎn)
Java 常用知識(shí)點(diǎn) 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...
- Less常用知識(shí)點(diǎn)
上篇文章介紹了如何安裝Less,我們將所有東西都寫(xiě)在.less里面,最后通過(guò)命令將.less轉(zhuǎn)換成.css文件,就可以放入到項(xiàng)目里用了.今天了解一些less常用知識(shí)點(diǎn). 1.變量:聲明兩個(gè)變量,一個(gè)是 ...
- YII2常用知識(shí)點(diǎn)總結(jié)
YII2常用知識(shí)點(diǎn)總結(jié) (一)總結(jié)性語(yǔ)句 (1)經(jīng)常看看yii源碼比如vendor\yiisoft\yii2\web這個(gè)目錄(很重要)下的文件中的方法(這些文件中的公共方法,大致看了下基本上都可以通過(guò) ...
- CSS3常用知識(shí)點(diǎn)
CSS3常用知識(shí)點(diǎn) 1 css3選擇器 1.1 屬性選擇器 /* E[attr~=val] 表示的一個(gè)單獨(dú)的屬性值 這個(gè)屬性值是以空格分隔的*/ .attr2 a[class~='kawa& ...
- javaScript常用知識(shí)點(diǎn)有哪些
javaScript常用知識(shí)點(diǎn)有哪些 一.總結(jié) 一句話(huà)總結(jié):int = ~~myVar, // to integer | 是二進(jìn)制或, x|0 永遠(yuǎn)等于x:^為異或,同0異1,所以 x^0 還是永遠(yuǎn)等 ...
隨機(jī)推薦
- 圖文混排--CoreText的簡(jiǎn)單運(yùn)用
常見(jiàn)的在一些微博微信中可以看見(jiàn)一段文字中有不同的字體,字體有不同的顏色,并且可能會(huì)有一些笑臉之類(lèi)的表情,這些可以通過(guò)圖文混排做到. 圖文混排可以通過(guò)WebView和CoreText做到,其他還有別的方 ...
- NetBios 的結(jié)構(gòu)體詳解
[NetBios 的結(jié)構(gòu)體詳解] NetBIOS是早期的局域網(wǎng)傳輸協(xié)議. 1.結(jié)構(gòu)體. 2.命令 NetBIOS命令的使用方式有兩種,即等待和非等待(或稱(chēng)為同步與異步)方式. 如果命令碼的高階位是0時(shí) ...
- Android Launcher 研究學(xué)習(xí)
Launcher是系統(tǒng)啟動(dòng)后第一個(gè)啟動(dòng)的程序,是其它應(yīng)用程序的入口,也就是我們的手機(jī)程序的桌面程序; 一.Launcher的定義及構(gòu)成: <1>通過(guò)查看官方提供的Launcher源碼可以知 ...
- 在magento中定義static block
在magento中如何調(diào)用static block?(系統(tǒng)面板內(nèi)CMS---->static block) 解答:若想在站點(diǎn)頁(yè)面的某個(gè)地方放點(diǎn)靜態(tài)的內(nèi)容,比如廣告,或者是促銷(xiāo)信息之類(lèi)的,這樣的東 ...
- Anton and Chess
Anton and Chess time limit per test 4 seconds memory limit per test 256 megabytes input standard inp ...
- Struts 關(guān)聯(lián)DTD 文件
Struts 的xml 文件在Eclipse 中 默認(rèn)是不會(huì)有提示的. 但是我們可以關(guān)聯(lián)DTD 文件, 這樣子就可以出現(xiàn)如下的struts 提示了 1. 首先得先確保自己有Struts2 的Sr ...
- not in 前面/后面存在null值時(shí)的處理
表聲明 order_header表中有ship_method列: ship_method_map表中ship_method為主鍵列. 需求 找出order_header表中所有ship_method不 ...
- Git 常用使用技巧
1.創(chuàng)建代碼倉(cāng)庫(kù) Step 1:先配置下我們的身份吧,這樣在提交代碼的時(shí)候Git就可以知道是誰(shuí)提交的,命令如下: git config --global user.name 'coder-p ...
- zoj 2104 Let the Balloon Rise(map映照容器的應(yīng)用)
題目鏈接: http://acm./onlinejudge/showProblem.do?problemCode=2104 題目描述: Contest time again! Ho ...
- Linux教程:基礎(chǔ)+中級(jí)+運(yùn)維高級(jí)
視頻內(nèi)容40G:Linux基礎(chǔ)視頻.Linux中級(jí)視頻.Linux運(yùn)維高級(jí)視頻+贈(zèng)送 職業(yè)素質(zhì)視頻 +查用服務(wù)器安卓文檔 目錄 Linux基礎(chǔ)教程81節(jié) 常用命令.文件管理命令詳解.bash腳本編程. ...
|