IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Host是如何与EC通信的(BIOS通过ACPI协议对EC RAM进行读写) -> 正文阅读

[人工智能]Host是如何与EC通信的(BIOS通过ACPI协议对EC RAM进行读写)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、EC RAM是什么?

EC提供256字节的可被系统读写的RAM空间,EC的资源(包括电池信息、EC版本等信息)在该RAM空间映射,通过访问对应偏移(0x00~0xFF),即可操作对应的资源,BIOS便可以获得RAM。

二、使用步骤

1.高级配置和电源接口(ACPI)规范

在这里插入图片描述
首先查阅ACPI规范中的EC嵌入式控制器的接口规范(文档下载地址),嵌入式控制器包含两个地址位置(0x62,0x66)和三个寄存器:EC_SC(充当两个)和EC_DATA)。EC_SC,嵌入式控制器状态/命令寄存器,充当两个寄存器:一个状态寄存器用于读这个端口,一个命令寄存器用于写这个端口。EC_DATA(嵌入式控制器数据寄存器),作为端口用于在主机CPU和嵌入式控制器之间传输数据。
两个地址位置(偏移/端口)与三个寄存器的对应关系如下:

寄存器偏移/端口R/W说明
EC_SC0x66REC状态寄存器
EC_SC0x66WEC命令寄存器
EC_DATA0x62R/WEC数据寄存器

其中偏移/端口是EC与BIOS相连的LPC的端口地址,通过0x62和0x66端口和通过LPC端口是同一个意思,也就是通过0x66端口BIOS可以获取到EC_S(EC状态寄存器)的值,也可以通过0x66端口BIOS可以发送命令给EC,通过0x62端口BIOS可以取得EC数据寄存器中的值。
EC_SC对应的寄存器地址为0x80,EC_DATA对应的寄存器地址为0x81;

2.EC RAM读写过程

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

1.往EC的Command Port写入0x80命令
所谓的Command Port就是上面所说的0x66偏移端口,BIOS/Host端往0x66偏移端口,找到对应CPU平台的软件编程手册中LPC的基地址,然后再基地址的基础上系上0x66即为这里的Command Port,让该Command Port中先写入数据0x80,意思是我要读取EC的RAM空间的寄存器数据。

2.往EC的Data Port写入需要读取的数据的Offset
所谓的Data Port就是上面所说的0x62偏移端口,BIOS/Host端往0x62偏移端口,找到对应CPU平台的软件编程手册中LPC的基地址,然后再基地址的基础上系上0x62即为这里的DataPort,让该DataPort中先写入RAM空间的偏移地址Offset,意思是我要读取EC的RAM空间中Offset偏移地址的内容。

3.读取EC的Data Port,读到的数据便是结果
所谓的Data Port就是上面所说的0x62偏移端口,BIOS/Host端往0x62偏移端口,找到对应CPU平台的软件编程手册中LPC的基地址,然后再基地址的基础上系上0x62即为这里的DataPort,直接从DataPort中读出8位数据便是我们需要读取的数据。这里读取的地方需要注意,这里需要等待EC的状态寄存器的OBF为置位才能够开始读取,OBF置位代表着EC已经将Offset偏移位置的数据输送到数据寄存器上。

代码如下:

//Read Data from EC Memory from location pointed by Index
UINT8 EcReadMem(UINT8 Offset,UINT8 *Data)
{
	UINT8 cmd =0x80;
	EcWriteCmd(cmd);
	EcWriteData(Offset);
	EcReadData(Data);
	return SUCCESS;
}

写操作:

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

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

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

写操作的前两步除了写入命令端口的数据由0x80改变为0x81外,其他操作几乎与读操作一样,第三步是向EC的Data Port写入相应的数据,这里在写之前也需要等待EC的状态寄存器中中IBF为清零才能开始,IBF清零代表EC的数据寄存器的数据已经清空了。

代码如下(示例):

//Write Data to EC memory at location pointed by Index
UINT8 EcWriteMem(UINT8 Offset,UINT8 Data)
{
	UINT8 cmd = 0x81;
	EcWriteCmd(cmd);
	EcWriteData(Offset);
	EcWriteData(Data);
	return SUCCESS;
}

总结

以上接上了Host/BIOS是如何通过ACPI规范(0x62/0x66端口)对EC RAM空间进行读写的,不同平台的EC接口规范略有不同,EC RAM中256字节的数据代表的含义也要根据不同的EC接口规范来确定。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:05:19  更:2021-08-29 09:07:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 17:49:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码