| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 7.嵌入式控制器EC学习 ACPI规范中的电源管理通道PMC(Power Management Channel) -> 正文阅读 |
|
[系统运维]7.嵌入式控制器EC学习 ACPI规范中的电源管理通道PMC(Power Management Channel) |
文章目录前言在EC中的电源管理通道是定义在ACPI规范中的,是用于主机处理器和嵌入式控制器EC中的通信通道。 一、电源管理通道PMC概述电源管理通道提供了PMDIR, PMDOR, PMCMDR和PMSTR四个寄存器它用于Host与EC两端的通信。Host通过写入数据到PMDIR中,EC通过读取Host写入PMDIR中的数据来完成Host->Ec端的通信。EC通过写入数据到PMDOR中,Host通过读取EC写入PMDOR中的数据完成功能EC->Host端的通信。PMCMDR/PMSTR两个寄存器则能同时被Host和EC读取。电源管理通道的接口框图如下图所示。 二、通过电源管理通道PMC完成EC和BIOS或操作系统通信这里可以先通过我之前的博文《9.嵌入式控制器EC学习 操作系统或BIOS通过KBC(0x60/0x64)和PMC(0x62/0x66)对EC ram进行读写》了解通过PMC对EC Ram的访问。 操作系统或BIOS通过PMC通道与EC通信假设此时操作系统或BIOS通过LPC的PMC通道下发了数据给EC,那么EC又该如何正确的接收下发的数据呢?
当IBF置位时,代表着操作系统或BIOS已经通过PMC通道(0x62/0x66)向EC发送了数据,代码进入CORE_ACPI.C中的Service_PCI2服务函数:
首先通过PMSTS的BIT2判断操作系统或BIOS发送给EC的信息时DATA还是CMD:
如果PMSTS的BIT2为1时,代表发送过来的信息是命令:
在里面通过PMDI寄存器取出操作系统或BIOS发给EC的命令,在将命令右移4位,0x80–0x84这五个命令值右移4位后都为8,查询Port66_Table表:
代码将执行EC_Cmd_8X函数:
查询命令表EC6266Cmd8X_Table:
代码将根据PMCmd中的值进入不同的函数中去执行动作,命令范围在0x80–0x84,通过《ACPI规范》的第十二章内容了解各个命令的作用,这里不再重复讲叙,也可以参照之前的博文《9.嵌入式控制器EC学习 操作系统或BIOS通过KBC(0x60/0x64)和PMC(0x62/0x66)对EC ram进行读写》了解。
如果PMSTS的BIT2为0时,代表发送过来的信息是数据:
在里面通过PMDI寄存器取出操作系统或BIOS发给EC的数据,这里需要参照博文《9.嵌入式控制器EC学习 操作系统或BIOS通过KBC(0x60/0x64)和PMC(0x62/0x66)对EC ram进行读写》,操作系统或BIOS通过PMC对EC进行读写的具体步骤如下: 总结,读写操作都分为三步,第一步都是往PMC的Command Port即0x66写入命令,第二步都是往PMC的Data Port即0x62写入地址偏移,第三步有读写的区别。 所以在代码处理数据时也要判断在哪一步,比如在处理读取EC命令操作(往EC的Command Port写入0x80命令)时,会将PM1Step = _PM1_STEP_1,所以后面EC在PMC通道0x62数据端口接收到的数据就是操作系统或BIOS需要读取数据的偏移地址,代码如下:
此时将根据PMData的数据(偏移)取出ECSpace(即EC ram)指定位置的内容,并将内容写入PMDO寄存器,该寄存器用于EC通过PMC通道发送数据给操作系统或BIOS,当该寄存器写入数据后,OBF会置位,EC再通过SCI中断通知操作系统或BIOS,我们已经把指定偏移的数据写入了输出寄存器了,操作系统或BIOS可以取走需要的数据了。 在处理操作系统或BIOS写操作(往EC的Command Port写入0x81命令)时,此时PM1Step = _PM1_STEP_2,所以后面EC在PMC通道0x62数据端口接收到的数据就是操作系统或BIOS需要写入数据的偏移地址,代码如下:
在EC端的处理代码中,写入操作比读取操作多了一个步骤,因为在读取步骤中,EC在接收到偏移地址后可以立马返回EC ram空间指定偏移位置的内容给操作系统或BIOS,而在写入操作中,EC接收完偏移地址后,EC还需要继续接收内容,所以在写操作中分为了两步进行,EC62_DATA_STEP2用来接收偏移地址,EC62_DATA_STEP3用来往EC ram指定偏移地址写入(Write_MapECSpace)相应的值。 总结本文在《9.嵌入式控制器EC学习 操作系统或BIOS通过KBC(0x60/0x64)和PMC(0x62/0x66)对EC ram进行读写》的基础上进一步分析代码的运行过程。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/15 18:31:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |