Host是如何与EC通信的

摘要:
该模式适用于主机读写EC。主机可以根据ACPI协议规范与EC通信。这表明数据已被主机占用,EC可以再次向主机写入更多数据。主机如何通过ACPI规范与EC通信?事实上,它通过0x62、0x66偏移量/端口交换数据。主机通过0x62/0x66偏移量/端口与EC通信,该端口应符合APCI规范;主机还可以通过0x60/0x64偏移量/端口直接与KBC通信。KBC将在收到数据后进一步向EC传输数据。

第一种方式:遵循ACPI规范完成通信,通过LPC的62h、64h偏移/端口。

此种方式适合host对EC进行读写操作。

EC提供256字节的可被系统读写的RAM空间,EC的资源在该RAM空间映射,通过访问对应偏移(0x00~0xFF),即可操作对应的资源。实际上就是外部RAM的前256字节。EC会将键盘、触摸板、电池、温度传感器等一些设备的状态信息保存在此地址范围空间的RAM内存中,不同host的EC规范略有不同。

EC中有三个寄存器,分别为状态寄存器EC_SC、命令寄存器EC_SC和数据寄存器EC_DATA。而状态寄存器和命令寄存器同属于一个寄存器,这几个寄存器遵循着ACPI规范。host可以根据ACPI协议规范来与EC进行通信。

EC寄存器端口分配

寄存器

偏移/端口

R/W

说明

EC_SC

0x66

R

EC状态寄存器

EC_SC

0x66

W

EC命令寄存器

EC_DATA

0x62

R/W

EC数据寄存器

以下是寄存器的详细介绍。

EC状态寄存器(EC_SC(R)),该寄存器是一个只读寄存器,它反映了此时EC接口的状态。下图为该寄存器表。

Host是如何与EC通信的第1张

EC状态寄存器表中各位的具体含义:

Host是如何与EC通信的第2张

OBF(Output Buffer is Full),该状态位置1时,意味着EC已经将一个字节的数据写入了命令/数据端口中,但是此时host还没有读出/取走该数据。当host读取EC的状态寄存器发现该位置1时,host将会从命令/数据端口中取走数据,取走数据后,硬件将自动为该位清零。此时表明数据已经被host取走,EC可以再次向host写入更多的数据了。

IBF(Input Buffer is Full),该状态位置1时,意味着host已经将一字节的数据写入到了EC的命令/数据端口中,但此时EC并未将此字节的数据/命令取走,当EC将测到该标志位为1时,EC将取走主机写入的命令/数据,读取完成后,已经将自动为该位清零。此时host可以向EC写入更多的数据了。

SCI_EVT(System command interrupt_event),当该位置1时,EC检测到一个需要host的控制程序注意的内部事件。

SMI_EVT(System control interrupt_event),当该位置1时,EC检测到一个需要host的管理中断服务程序注意的内部事件。

BURST位置1时,表实EC已经收到了来自host的BURST Enable命令,EC已经停止了正常的处理,等待从host发来的一系列命令。这允许host一次快速读取/写入几个字节的数据/命令而没有命令间的SCIs开销。

CMD标志位置1时,表实数据寄存器中的数据为命令字节,当该位为0时,表实数据寄存器中的数据为数据字节。

EC命令寄存器(EC_SC (W)),这是一个只写寄存器,允许host向EC发出命令。当一字节数据写入后,EC状态寄存器中的IBF和CMD位都为1,表明该数据位命令数据。

EC数据存器(EC_DATA (R/W)),这是一个读写寄存器,该寄存器允许host与EC双向通信。

Host是如何通过ACPI规范来与EC通信的呢,其实是通过0x62、0x66偏移/端口(LPC总线)来进行数据交换。数据交换的形式和步骤如下:

Host是如何与EC通信的第3张

Host是如何与EC通信的第4张

EC提供256字节的可被系统读写的RAM空间,EC的资源在该RAM空间映射,通过访问对应偏移(0x00~0xFF),即可操作对应的资源。

例如主机要获取电池的的电量情况,host可以通过EC命令集来获取,EC命令集如下:

EC命令集

Host是如何与EC通信的第5张

host可以先向EC发送0x80读取EC寄存器命令,紧接在0x80后面的是一个EC的RAM资源的地址偏移,host等待EC的状态寄存器OBF置位时,host可以取走EC_DATA数据寄存器中的内容,改内容即位host请求读取的数据。

第二种方式:利用KBC完成通信,通过LPC的60h、64h偏移/端口。

host与EC通过0x62/0x66偏移/端口来进行通信,是需要遵循APCI规范的;host也可以直接通过0x60/0x64偏移/端口与KBC来进行通信,KBC收到数据后进一步将数据转移给EC。

在此方式下,不仅host可以对EC进行读写操作,而且EC同样可以对host进行读写操作

KBC寄存器端口分配

寄存器

偏移/端口

R/W

说明

 KBC_SC

0x64

R

键盘控制状态寄存器

 KBC_SC

0x64

W

键盘控制命令寄存器

 KBC_DATA

0x60

R/W

键盘控制数据寄存器


       host可以先向EC发送0x80读取EC寄存器命令,紧接在0x80后面的是一个EC的RAM资源的地址偏移,host等待EC的状态寄存器OBF置位时,host可以取走EC_DATA数据寄存器中的内容,改内容即位host请求读取的数据。

读操作: 

 1.往EC的Command Port写入0x80命令 

 2.往EC的Data Port写入需要读取的数据的Offset 

 3.读取EC的Data Port,读到的数据便是结果

  

 写操作: 

 1.往EC的Command Port写入0x81命令

 2.往EC的Data Port写入所写数据的Offset 

 3.往EC的Data Port写入所写数据的值

免责声明:文章转载自《Host是如何与EC通信的》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle读取Blob数据-通过hibernateVSS (Visual Source Safe 2005) 用法详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Modbus,看这个就行了

Modbus基础知识概念 Modbus通信协议由Modicon公司(现在的施耐德电气Schneider Electric)于1979年为可编程逻辑控制(即PLC)通信而发表。目前,Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。Modbus作为目前工业领域应用最广泛的协议,与其他通信协议相比,有以下特点: Mo...

tomcat配置多个web网站的配置详解

假如只有一台服务器,需要配置多个web网站(端口不同我还没试),该怎么样配置tomcat呢,其实很简单,只需要将tomcat 下面的 server.xml  中增加两个甚至是多个<Host>……</Host> 标签即可, 标签的内容如下例子,其中需要注意的是每个web 项目的目录不要在同一个目录下,host标签中的 name 不能...

安装VCenter 6.7的系统要求

原文: https://www.cnblogs.com/ccbloom/p/11137948.html 说来惭愧,我好像不是一个忠贞不渝的人,前几天在服务器装了VMware ESXI 6.0,后来发现VMware ESXI 6.7界面要更加优美一点,所以小羞耻的换掉了。。安装步骤跟ESXI 6.0安装步骤基本一样,为管理方便,安装vCenter 6.7如下...

MySQL-快速入门(11)用户管理

1、权限表 存储用户权限信息表主要有:user、db、host、tables_priv、columns_priv、procs_priv。 1》user表: 记录允许连接到服务器的账号信息,里面的权限是全局级别的。user表有42个字段,这些字段可以分为4类,分别是用户列、权限列、安全列、资源控制列。 2》db和host表 3》tables_priv和col...

定时器67事——捕获比较通道

1、最后老师说的PWM,上升沿比较、下降沿比较时,都是输入一个固定的值(?) 上升沿比较时,小于n,则为高电平;下降沿比较时,大于n,则为高电平,追求某种统一。 2、有4个不同的通道,比如说第一个通道可以设置为上升沿技术,第二个通道可以设置为上升沿和下降沿都计数,这样就可以通过第一个通道的值知道周期,通过第二个通道的值知道脉宽。 3、我们调节ARR可以改变...

nginx 获取源IP 获取经过N层Nginx转发的访问来源真实IP

1. nginx 配置文件中获取源IP的配置项proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr; #一般的web服务器用这个 X-Real-IP 来获取源IPproxy_set_header x-forwarded-for $proxy_add_x_forwarded_f...