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. VS2017 配置glfw3

    直接下载源码使用VS进行编译. 1. 源码下载地址http://www.glfw.org/download.html, 点击Source Package 2. 打开cmake-3.12.1-win32 ...

  2. TypeSrcript如何引入第三方库 如果加d.ts以及async await如何使用 demo,只有代码,文字后续补充

    https://files.cnblogs.com/files/cappuccino/laya2.rar

  3. Golang知识图谱

    原:https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0?from=timeline 百度脑图重制:http://naotu.bai ...

  4. git clean(转载)

    git clean命令用来从你的工作目录中删除所有没有tracked过的文件. git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以 ...

  5. ThinkPHP3.2.3中M()和D()的区别详解

    在实例化的过程中,经常使用D方法和M方法, 区别在于:M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法. 通俗一点说:1.M实例化参数是数据库的表名, ...

  6. Node bak

    process.on('uncaughtException', function (err) { logger.info('Local Server Exception: ') logger.info ...

  7. 对unicode数据进行部分replace

    unicode = u'\u9879\u76ee\u7ba1\u7406\u90e8' print unicode #项目管理部 unicode = unicode.replace("项目& ...

  8. 线程的条件Condiition

    条件Condition相当于给锁造钥匙,但是这钥匙是一次性的.一个线程拿到钥匙进去,出来之后钥匙没有归还,而是没了. 如下代码: from threading import Thread, Condi ...

  9. postgresql数据库安装及简单操作

    自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选. 本文介绍PostgreSQL的安装和基本用法,供初次使用者上手.以下内容基于Debian操作系统,其他操作系 ...

  10. Java高并发系列 — AQS

    只懂volatile和CAS是不是可以无视concurrent包了呢,发现一个好链接,继续死磕,第一日: 首先,我承认很多时候要去看源码才能更好搞懂一些事,但如果站在巨人肩膀上呢?有了大概思想源码看还 ...