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

参看:BIOS之ASL code常用知识点

通过EC烧写BIOS ROM

通过EC烧写BIOS ROM的原理就是把ROM当成EC的外接存储芯片来烧录,所以在设计原理图的时候需要把SPI ROM同时接到PCH和EC。

BIOS备忘录之EC常用知识点的更多相关文章

  1. BIOS备忘录之IIC(touchpad)设备

    简述BIOS中对IIC device的支持,以touchpad为例. 信息收集 收集平台的硬件信息: 1. IIC controller number(PCH一般包含多个controller,我们使用 ...

  2. DB2_SQL_常用知识点&实践

    DB2_SQL_常用知识点&实践 一.删除表中的数据(delete或truncate) 1 truncate table T_USER immediate; 说明:Truncate是一个能够快 ...

  3. JAVA常用知识点及面试题总结

    1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...

  4. HTML常用知识点代码演示

    1 HTML部分常用知识点 <!-- 版本声明 --> <!DOCTYPE html> <!-- 唯一根元素 --> <html> <!-- 对网 ...

  5. Java 常用知识点

    Java 常用知识点 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...

  6. Less常用知识点

    上篇文章介绍了如何安装Less,我们将所有东西都写在.less里面,最后通过命令将.less转换成.css文件,就可以放入到项目里用了.今天了解一些less常用知识点. 1.变量:声明两个变量,一个是 ...

  7. YII2常用知识点总结

    YII2常用知识点总结 (一)总结性语句 (1)经常看看yii源码比如vendor\yiisoft\yii2\web这个目录(很重要)下的文件中的方法(这些文件中的公共方法,大致看了下基本上都可以通过 ...

  8. CSS3常用知识点

    CSS3常用知识点 1 css3选择器 1.1 属性选择器 /* E[attr~=val] 表示的一个单独的属性值 这个属性值是以空格分隔的*/ .attr2 a[class~="kawa& ...

  9. javaScript常用知识点有哪些

    javaScript常用知识点有哪些 一.总结 一句话总结:int = ~~myVar, // to integer | 是二进制或, x|0 永远等于x:^为异或,同0异1,所以 x^0 还是永远等 ...

随机推荐

  1. SetTimer API函数

    位于user32.dll中,可以每隔一段时间执行一段时间执行一件事的时候,可以使用它. 使用定时器,通常告诉Windows一个时间间隔,然后Windows以此时间间隔周期性触发程序. 发送WM_TIM ...

  2. MUI - 复选框、单选框、使用js获取选择值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. PHP指定时间戳/日期加一天,一年,一周,一月

    PHP指定时间戳加上1天,1周,1月,一年其实是不需要用上什么函数的!指定时间戳本身就是数字整型,我们只需要再计算1天,1周它的秒数相加即可! 博主搜索php指定时间戳加一天一年,结果许多的文章给出来 ...

  4. Caused by: java.lang.ClassNotFoundException: Could not load requested class :XXX.XXX.XXX 异常处理

    在ssh整合中:出现的异常 Exception sending context initialized event to listener instance of class org.springfr ...

  5. python全栈开发 * 30知识点汇总 * 180713

    30 re模块2一.正则表达式在线测试 在线测试工具 http://tool.chinaz.com/regex/(一).*?的用法: . 是任意字符 * 是取 0 至 无限长度 ? 是非贪婪模式.合在 ...

  6. 编译安装centos6.9 php7.0 mysql5.6 nginx1.8

    2018年3月15日 11:41:40 注意文章时效! 此文章不是给新用户参考的,没有每一步的操作,请注意! yum -y groupinstall "Development Tools&q ...

  7. css学习_css清除浮动

    若元素没有设置宽高,那元素实际宽高是被内容撑起来, 若元素自己有设置宽高,那实际面积于自己的盒子模型有关 1.清除浮动的本质 清除浮动主要是为了解决父级元素因为子级浮动而引起的内部高度为0的问题. ( ...

  8. 关于vue执行打包后,如何在本地浏览问题

    最近一个人在捣鼓vue,写完项目后发现在npm run dev下可以正常访问,bulid之后却一片空白,查看console出现许多Failed to load resource: net::ERR_F ...

  9. (在命名空间 public 中)存在冲突

    解决方案: http://www.wastedpotential.com/flash-as3-stop-using-automatically-declare-stage-instances/ 修复错 ...

  10. 获取子字符串函数MidStr

    MidStr返回指定范围内的字符串.该函数有三个参数.第一个参数为源字符串,第二个参数为起点(下标从1开始),第三个参数为结束点.通过第二.第三个参数则可指定要复制字符串的范围. function M ...