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. java基础---->String中replace和replaceAll方法

    这里面我们分析一下replace与replaceAll方法的差异以及原理. replace各个方法的定义 一.replaceFirst方法 public String replaceFirst(Str ...

  2. A - The Water Problem

    In Land waterless, water is a very limited resource. People always fight for the biggest source of w ...

  3. 基本的sqlplus命令

    以下是一些sqlpus命令 remark          注释行set headsep     标题分隔符ttitle          头标题btitle          尾标题column   ...

  4. Java9之HashMap与ConcurrentHashMap

    HashMap在Java8之后就不再用link data bins了,而是转为用Treeify的bins,和之前相比,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成.: * This ...

  5. eclipse中的快捷键的使用

  6. mysql中主外键关系

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...

  7. F#周报2019年第4期

    新闻 F# 4.6预览 fuget.org现在显示包依赖从属,你曾经想要了解谁在使用你的类库吗?现在你可以知道了! F#被加入Wikipedia的流式接口页面 采访Erik Schierboom Az ...

  8. VMware Workstation下ubuntu虚拟机无法上网连不上网络解决

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  9. jquery基础学习之AJAX篇(五)

    理解不深,只知道这么用 jquery 中ajax的请求方法 $.ajax({ url:‘http://...’, //请求网址 type:'GET', //请求方法 success:function( ...

  10. cocos2d-x在Android上的编译过程(3):简化Android.mk文件的编写

    在编译动态库时.要求我们要去编写jni/Android.mk文件.告诉编译器编译出来的库时应包括包括编译文件和其它引用库.但对于一个大项目来说,维护这个文件肯定是一件比較繁琐的事情.由于每加一个文件或 ...