BIOS工程師眼中常用的EC知識點匯總:
EC的硬件架構(gòu)
EC硬件結(jié)構(gòu)上主要分為兩部分:Host Domain和EC Domain
Host Domain就是通過LPC與CPU通信的部分(LPC部分需要先執(zhí)行相關(guān)的初始化:比如decode 62/66 68/6c,設置LPC Serial IRQ mode to continus mode等,這樣EC才能通過IO與PCH通信),可以看成ISA的設備卡;
EC Domain可以看成一個51的單片機。
BADRSEL寄存器是在EC初始化的時候設置的,決定了使用tool訪問EC的信息時要通過 4E/4F:
EC的代碼框架
必要的初始化,然后進入一個while循環(huán)。
while循環(huán)里面有不同間隔的定時器回調(diào)函數(shù),比如每1ms, 5ms, 10ms等就執(zhí)行一次。在回調(diào)函數(shù)里面判斷各種flag(flag由硬件中斷或其他函數(shù)置起來,比如拔一下AC,按一下hotkey等),執(zhí)行相應操作。
EC RAM space
比如定義RAM 0x0400用來與EC ASL code交互數(shù)據(jù)(參看:BIOS之ASL code常用知識點)
比如定義RAM 0x0E00用做debug:在EC code里面通過調(diào)用RamDebug(dbgcode)來往0xE00的位置寫debug code從而追蹤EC code的執(zhí)行。
EC Register Space
通過EC tool查看寄存器的值,從而判斷寄存器的輸入輸出狀態(tài);通常用在通過EC的GPIO來Enable/Disable TP等device(Hotkey的實現(xiàn)原理)
下面的Datasheet和tool截圖(GPIO的數(shù)據(jù)寄存器)表示:
offset 0A = ED (1110,1101)表示GPJ1,GPJ4的輸出為低,GPJ0,2,3,5,6,7輸出為高 - 每個寄存器(byte)對應一組8個pin,EC code通過調(diào)用SET_MASK(GPDRJ, BIT(6))來把GPDRJ:bit6置起來即把GPIO GPJ6拉高。
EC code與BIOS code交互
上面提過EC code與EC ASL code之間通過EC RAM Space(62/66)的交互(參看:BIOS之ASL code常用知識點)
現(xiàn)在看一下BIOS通過60/64,62/66與EC通信:首先PCH端的LPC要初始化相應的端口
BIOS demo code:
1.判斷輸入buffer是否為空,為空就往64 port寫數(shù)據(jù)(命令):
2.判斷輸出buffer是否有數(shù)據(jù),有就從60 port讀數(shù)據(jù):
EC code里面的處理:
Hook_64Port(cmd)檢測cmd,調(diào)用不同的處理函數(shù),然后調(diào)用Data_To_Host(data)把數(shù)據(jù)返給BIOS,BIOS可以從60 port讀到這個值。
cmd被BIOS寫到64 port,實際上是寫到了寄存器KBHIDIR里面,EC返回的data也是被寫到寄存器KBHIKDOR里面。
對IO口的操作最底層也是操作寄存器:
P80
一般來說,BIOS可以通過往port80寫值來記錄代碼的運行,往port80寫的值會通過LPC總線寫到EC的RAM區(qū)域:
Power
power sequence:
power sequence描述的是EC為系統(tǒng)不同的模塊上電的順序,比如按power button開機,就執(zhí)行S5_to_S0的power sequence(包括比如:檢查SLP_S4#的信號是否已經(jīng)被PCH拉高,把PCH的SYS_PWROK拉高表示上電OK等等)。
power信號:
1. 比如系統(tǒng)進S4,PCH會把SLP_S4#拉低來告訴EC系統(tǒng)進S4了。
2. 比如系統(tǒng)進S0 idle,PCH會把SLP_S0#拉低來告訴EC系統(tǒng)進MS了,EC會開啟power燈閃爍。
3. PCH把SLP_S4#拉高,表示從S4喚醒,EC需要給系統(tǒng)各模塊重新上電(當然EC可以加一下條件,比如檢測到Lid close就不給系統(tǒng)上電)
ASL code里面的EC device
參看:BIOS之ASL code常用知識點
通過EC燒寫B(tài)IOS ROM
通過EC燒寫B(tài)IOS ROM的原理就是把ROM當成EC的外接存儲芯片來燒錄,所以在設計原理圖的時候需要把SPI ROM同時接到PCH和EC。
- BIOS備忘錄之IIC(touchpad)設備
簡述BIOS中對IIC device的支持,以touchpad為例. 信息收集 收集平臺的硬件信息: 1. IIC controller number(PCH一般包含多個controller,我們使用 ...
- DB2_SQL_常用知識點&實踐
DB2_SQL_常用知識點&實踐 一.刪除表中的數(shù)據(jù)(delete或truncate) 1 truncate table T_USER immediate; 說明:Truncate是一個能夠快 ...
- JAVA常用知識點及面試題總結(jié)
1. String.StringBuffer.StringBuilder三者區(qū)別? (1)三者在執(zhí)行速率上的比較: String<StringBuffer<StringBuilder 原因 ...
- HTML常用知識點代碼演示
1 HTML部分常用知識點 <!-- 版本聲明 --> <!DOCTYPE html> <!-- 唯一根元素 --> <html> <!-- 對網(wǎng) ...
- Java 常用知識點
Java 常用知識點 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...
- Less常用知識點
上篇文章介紹了如何安裝Less,我們將所有東西都寫在.less里面,最后通過命令將.less轉(zhuǎn)換成.css文件,就可以放入到項目里用了.今天了解一些less常用知識點. 1.變量:聲明兩個變量,一個是 ...
- YII2常用知識點總結(jié)
YII2常用知識點總結(jié) (一)總結(jié)性語句 (1)經(jīng)常看看yii源碼比如vendor\yiisoft\yii2\web這個目錄(很重要)下的文件中的方法(這些文件中的公共方法,大致看了下基本上都可以通過 ...
- CSS3常用知識點
CSS3常用知識點 1 css3選擇器 1.1 屬性選擇器 /* E[attr~=val] 表示的一個單獨的屬性值 這個屬性值是以空格分隔的*/ .attr2 a[class~='kawa& ...
- javaScript常用知識點有哪些
javaScript常用知識點有哪些 一.總結(jié) 一句話總結(jié):int = ~~myVar, // to integer | 是二進制或, x|0 永遠等于x:^為異或,同0異1,所以 x^0 還是永遠等 ...
隨機推薦
- 圖文混排--CoreText的簡單運用
常見的在一些微博微信中可以看見一段文字中有不同的字體,字體有不同的顏色,并且可能會有一些笑臉之類的表情,這些可以通過圖文混排做到. 圖文混排可以通過WebView和CoreText做到,其他還有別的方 ...
- NetBios 的結(jié)構(gòu)體詳解
[NetBios 的結(jié)構(gòu)體詳解] NetBIOS是早期的局域網(wǎng)傳輸協(xié)議. 1.結(jié)構(gòu)體. 2.命令 NetBIOS命令的使用方式有兩種,即等待和非等待(或稱為同步與異步)方式. 如果命令碼的高階位是0時 ...
- Android Launcher 研究學習
Launcher是系統(tǒng)啟動后第一個啟動的程序,是其它應用程序的入口,也就是我們的手機程序的桌面程序; 一.Launcher的定義及構(gòu)成: <1>通過查看官方提供的Launcher源碼可以知 ...
- 在magento中定義static block
在magento中如何調(diào)用static block?(系統(tǒng)面板內(nèi)CMS---->static block) 解答:若想在站點頁面的某個地方放點靜態(tài)的內(nè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 中 默認是不會有提示的. 但是我們可以關(guān)聯(lián)DTD 文件, 這樣子就可以出現(xiàn)如下的struts 提示了 1. 首先得先確保自己有Struts2 的Sr ...
- not in 前面/后面存在null值時的處理
表聲明 order_header表中有ship_method列: ship_method_map表中ship_method為主鍵列. 需求 找出order_header表中所有ship_method不 ...
- Git 常用使用技巧
1.創(chuàng)建代碼倉庫 Step 1:先配置下我們的身份吧,這樣在提交代碼的時候Git就可以知道是誰提交的,命令如下: git config --global user.name 'coder-p ...
- zoj 2104 Let the Balloon Rise(map映照容器的應用)
題目鏈接: http://acm./onlinejudge/showProblem.do?problemCode=2104 題目描述: Contest time again! Ho ...
- Linux教程:基礎+中級+運維高級
視頻內(nèi)容40G:Linux基礎視頻.Linux中級視頻.Linux運維高級視頻+贈送 職業(yè)素質(zhì)視頻 +查用服務器安卓文檔 目錄 Linux基礎教程81節(jié) 常用命令.文件管理命令詳解.bash腳本編程. ...
|