BIOS备忘录之EC常用知识点
BIOS工程师眼中常用的EC知识点汇总:
EC的硬件架构
EC硬件结构上主要分为两部分:Host Domain和EC Domain
Host Domain就是通过LPC与CPU通信的部分(LPC部分需要先执行相关的初始化:比如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循环。
while循环里面有不同间隔的定时器回调函数,比如每1ms, 5ms, 10ms等就执行一次。在回调函数里面判断各种flag(flag由硬件中断或其他函数置起来,比如拔一下AC,按一下hotkey等),执行相应操作。
EC RAM space
比如定义RAM 0x0400用来与EC ASL code交互数据(参看:BIOS之ASL code常用知识点)

比如定义RAM 0x0E00用做debug:在EC code里面通过调用RamDebug(dbgcode)来往0xE00的位置写debug code从而追踪EC code的执行。

EC Register Space
通过EC tool查看寄存器的值,从而判断寄存器的输入输出状态;通常用在通过EC的GPIO来Enable/Disable TP等device(Hotkey的实现原理)
下面的Datasheet和tool截图(GPIO的数据寄存器)表示:
offset 0A = ED (1110,1101)表示GPJ1,GPJ4的输出为低,GPJ0,2,3,5,6,7输出为高 - 每个寄存器(byte)对应一组8个pin,EC code通过调用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常用知识点)
现在看一下BIOS通过60/64,62/66与EC通信:首先PCH端的LPC要初始化相应的端口
BIOS demo code:
1.判断输入buffer是否为空,为空就往64 port写数据(命令):

2.判断输出buffer是否有数据,有就从60 port读数据:

EC code里面的处理:
Hook_64Port(cmd)检测cmd,调用不同的处理函数,然后调用Data_To_Host(data)把数据返给BIOS,BIOS可以从60 port读到这个值。
cmd被BIOS写到64 port,实际上是写到了寄存器KBHIDIR里面,EC返回的data也是被写到寄存器KBHIKDOR里面。
对IO口的操作最底层也是操作寄存器:


P80
一般来说,BIOS可以通过往port80写值来记录代码的运行,往port80写的值会通过LPC总线写到EC的RAM区域:

Power
power sequence:
power sequence描述的是EC为系统不同的模块上电的顺序,比如按power button开机,就执行S5_to_S0的power sequence(包括比如:检查SLP_S4#的信号是否已经被PCH拉高,把PCH的SYS_PWROK拉高表示上电OK等等)。
power信号:
1. 比如系统进S4,PCH会把SLP_S4#拉低来告诉EC系统进S4了。
2. 比如系统进S0 idle,PCH会把SLP_S0#拉低来告诉EC系统进MS了,EC会开启power灯闪烁。
3. PCH把SLP_S4#拉高,表示从S4唤醒,EC需要给系统各模块重新上电(当然EC可以加一下条件,比如检测到Lid close就不给系统上电)
ASL code里面的EC device
通过EC烧写BIOS ROM
通过EC烧写BIOS ROM的原理就是把ROM当成EC的外接存储芯片来烧录,所以在设计原理图的时候需要把SPI ROM同时接到PCH和EC。
BIOS备忘录之EC常用知识点的更多相关文章
- BIOS备忘录之IIC(touchpad)设备
简述BIOS中对IIC device的支持,以touchpad为例. 信息收集 收集平台的硬件信息: 1. IIC controller number(PCH一般包含多个controller,我们使用 ...
- DB2_SQL_常用知识点&实践
DB2_SQL_常用知识点&实践 一.删除表中的数据(delete或truncate) 1 truncate table T_USER immediate; 说明:Truncate是一个能够快 ...
- JAVA常用知识点及面试题总结
1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...
- HTML常用知识点代码演示
1 HTML部分常用知识点 <!-- 版本声明 --> <!DOCTYPE html> <!-- 唯一根元素 --> <html> <!-- 对网 ...
- Java 常用知识点
Java 常用知识点 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...
- Less常用知识点
上篇文章介绍了如何安装Less,我们将所有东西都写在.less里面,最后通过命令将.less转换成.css文件,就可以放入到项目里用了.今天了解一些less常用知识点. 1.变量:声明两个变量,一个是 ...
- YII2常用知识点总结
YII2常用知识点总结 (一)总结性语句 (1)经常看看yii源码比如vendor\yiisoft\yii2\web这个目录(很重要)下的文件中的方法(这些文件中的公共方法,大致看了下基本上都可以通过 ...
- CSS3常用知识点
CSS3常用知识点 1 css3选择器 1.1 属性选择器 /* E[attr~=val] 表示的一个单独的属性值 这个属性值是以空格分隔的*/ .attr2 a[class~="kawa& ...
- javaScript常用知识点有哪些
javaScript常用知识点有哪些 一.总结 一句话总结:int = ~~myVar, // to integer | 是二进制或, x|0 永远等于x:^为异或,同0异1,所以 x^0 还是永远等 ...
随机推荐
- 五、Sql Server 基础培训《进度5-数据类型(知识点+实际操作)》
知识点: ================================================= ============================================= ...
- 进程池原理及效率测试Pool
为什么会有进程池的概念? 当我们开启50个进程让他们都将100这个数减1次减到50,你会发现特别慢! 效率问题,原因: 1,开辟内存空间.因为每开启一个进程,都会开启一个属于这个进程池的内存空间,因为 ...
- 初始化后,composer安装
在项目目录下输入composer install(保证要有composer.json的前提下)
- 8 Oracle语句
1.select name from v$datafile; 用sys方式登陆,查询所有表空间存放的物理路径 2.create tablespace DEMO_TBS datafile 'D:/TBS ...
- Oracle实验手册
oracle安装 安装virtualbox: # yum install gcc kernel-devel kernel-headers # yum install virtualbox-5.... ...
- Linux命令 printf
定长: $ printf '%s\t%s\t%s\t%s\t%s\t\n' $(cat printf.txt) # %s 表示一个不固定长度的字符串:printf不是管道命令,因此需要通过类似cat的 ...
- linux--- python3环境部署篇
环境部署 我们在pycharm上都是自己设置的python3解释器的环境变量,使得代码能够正常执行!可是怎么能让我们的python代码在LINUX上跑起来呢? linux是内置python,可是内置的 ...
- 实际体验Span<T> 的惊人表现
前言 最近做了一个过滤代码块功能的接口.就是获取一些博客文章做文本处理,然后这些博客文章的代码块太多了,很多重复的代码关键词如果被拿过来处理,那么会对文本的特征表示已经特征选择会有很大的影响.所以需要 ...
- 使用阿里云公网ip建立bind,监听客户端连接失败
bind: Cannot assign requested address 网上的众多答案不能解决我的问题 通过ping可以ping通,但是 使用bind代码,这个ip就是不能用的, 使用 ifcon ...
- ZOJ 4070 - Function and Function - [签到题][2018 ACM-ICPC Asia Qingdao Regional Problem M]
题目链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5840 Time Limit: 1 Second Mem ...