我所学到的EC-3(个人学习总结,不能保证正确,欢迎大佬指正)

本文详细解析了ECRAM在电池管理系统中的作用,包括电池信息获取、充电与放电过程控制,以及EC与BIOS的交互机制。重点介绍了电池状态指示、事件通知和自动检测功能,展示了如何通过SMI和SCI进行系统管理和中断控制。
摘要由CSDN通过智能技术生成
  • battery电池

系统会通过ECRAM获取电池电量、温度、电压、充放电功率、电池状态等信息。而ecram的信息是由battery通过smbus device总线驱动连接到ec的smbus总线上battery的spec给出相应的地址以及命令,ec通过相应的地址和命令获取相应信息。

充电过程:AC in &&battery in→ec→precharge mode预充电(小电流)→时间过长→battery dead &&停止充电&&向主机推送battery fail事件→否则会渐渐增大电流直到fastcharge mode快速充电,充满或温度过高停止充电。

放电过程:AC OUT && battery in →放电→电量小于critical low(紧急低电量),则系统处于s0时会发出关键事件给主机进机关机。电池温度过大进行降频处理。

ec导入function led检测,在不同状态下led会发不同的光或者闪烁。

电池事件:电池插入拔出EC发送BattChgEvent通知主机,主机读取ECRAM更新电池信息。电池电量达到battery warrning level时ec发送battwarnevent通知主机,主机会根据用户设定给出提示并选择调用低电量模式。电池达到battery low level会发送battlowevent通知,lowled灯会被点亮。当剩余电量接近于0时ec会发送battcrtevent,主机收到后进行shutdown 如果主机shutdown失败ec会emergency shutdown紧急关机。

EC通过smbus不断获取电池信息,因此电池信息能实时更新,有时候为了新增加函数function的debug会使用 debug tool工具暂停smbus然后植入数据到ecram验证相关函数时候需要,如果需要发送sci会直接将事件填入sci queue,驱动sci发送

  • IDLE &RESET空闲和复位

EC工作模式,IDLE主要在bios更新NVRAM域,reset主要在flash bios的时候。bios在post自检中会多次进入IDLE模式保存系统设置及硬件资源,而NVRAM包含很多区域,有些数据保存在CMOS,有些保存在ROM,很多时候BIOS和EC CODE共用一个rom,此时EC进入IDLE模式可避免抢占冲突

实现机制:BIOS更新NVRAM先给EC发送信号,EC接收信号到,关闭LPC总线的的写保护,EC保存寄存器内容关掉中断只保留唤醒源。然后返回0xFA给BIOS后进入IDLE模式,BIOS接收到后开始更新,如果EC此时没有及时进入状态系统会卡住,因此BIOS接收后最好再delay一会儿,更新完成给66port发送一个命令既可唤醒IDLE。

RESET实现机制:flash bios(重置BIOS)时,BIOS发cmd让EC进入RESET模式,原因是重置BIOS会修改默认参数,因此EC需要重新运行,RESET模式下EC会停掉fetch预取指,转为现取现用。而后EC关闭中断和写保护,并设置为最大散热转速(BIOS此时能耗较大)给BIOS发送0xFA应答后BIOS通过backdoor后门修改修改EC寄存器使EC的PC程序指针(8051架构)指向0起始位置停止EC运行,然后BIOS开始重置,重置完成后通过后门修改EC寄存器让EC reset复位到起始状态(PC指向初始代码段),此时EC会重新运行。

  • KBSMI和KBSCI系统管理和控制中断

SMI指System management Interruption系统管理中断,由设备或软件呼叫SMM功能时使用,令CPU进入SMM模式。SCI指系统控制中断,给支持ACPI(高级配置与电源接口)的操作系统提供管理与定制功能。

基本上进入APCI模式后就很少使用SMI,兵器SMI和SCI互斥,因此进入ACPI模式后EC只会发送SCI,通常EC是使用KBSMI和KBSCI两根线连接到南桥,EC可以配置两根线属性,决定中断方式(电压中断、边缘中断、脉冲中断)。

KBSMI#信号

EC一般在少数测试项才会使用SMI,原理是南桥的GPIO有些具有多功能可以配置成SMI、SCI,BIOS在初始化会将信息发送给相应的平台,EC发送SMI时该线被置位,南桥检测后通过SMI引脚发送给CPU,CPU切换到SMM模式后会宣告给相关引脚返回进入模式,此时可以通过返回引脚来确认SMI为EC触发,而后通过命令让EC读取SMI事件ID,并调用相关的解决方案

KBSCI#信号

Q_EVENT:指系统收到EC的SCI请求后,系统发送命令0x84给EC读取ECRAM值,这个值为Q_EVENT ID(Q:query查询,0x84:QEC:查询EC,因此该位查询EC事件)系统中,然后通过ASL指令(ACPI的语言)根据ID调用相关函数。

EC发出Q_EVENT的原因:如LID、AC/DC等物理状态改变时候。

// AC Status Changed

Method(_Q83)//定义函数(函数名_Q83,没有形参arg)

{
Store(0x83, DBG8)//将0x83赋值给DBG8

Store(0x00, Local0)//将0x00赋值给Local0局部变量0(声明局部变量)

Store(POWS, Local0)//将POWS的值读取到Local0

If(LEqual(Local0,1))//如果Local的值为1,则赋予ACPI表根目录下南桥PCI0总线EC口的ADP1.ACP口

{
Store(1,\_SB.PCI0.SBRG.EC.ADP1.ACP)

} 
else{
Store(0,\_SB.PCI0.SBRG.EC.ADP1.ACP)

}

//通知相关设备更新信息
Notify(\_SB.PCI0.SBRG.EC.ADP1,0x80)
Notify(\_PR.P001,0x80)
Notify(\_PR.P002,0x80)

}

Device(EC)//EC驱动
{
Name(_HID,EISAID("PNP0C09"))//硬件名
Name(_GPE,0x06)//设置引脚
// KB_SCI
...
}
在EC驱动中设置向主机宣告EC的KBSCI在南桥的哪个引脚。SMI南桥和CPU有引脚接入,SCI则通过配置8259/APIC产生推断。BIOS在设置好ACPI_CNTL控制寄存器后将SCI INT信息存入ACPI FADT中,这样子系统就可以获得中断号,进而产生SCI处理中断。

GPE:除Q_EVENT归属EC,其他部分归属BIOS,指ACPI定义的一个通用事件命名空间general-purpose event namespace,与南桥的GP registers通用寄存器对应,包括GPE_STS和GPE_EN对应GPIO的状态和事件触发的电平/边沿触发两种,分别对应method的_L/_E系列的GPIO引脚,因此S0一旦GPIO变化并且SCI使能,就触发SCI。

  • Auto Detect自动检测

指BIOS和EC探测南桥上存在的设备,常见的有网卡wlan,蓝牙Bluetooth,相机camera,无线等等USB设备,接在USB引脚上,由EC控制使能信号,结束探测后按下热键可以执行相应的功能,比如网络不在时热键可能就是检索功能。该功能主要是为了适配不同设备的存在,否则可能会出现漏电,或者笔记本软件报错,也能保持设备前一次开关状态,这样子状态就不需要每次开机时候重新设置状态。

实现原理:上电时usb引脚上的连接状态会显示端口上存在设备,此时就可以检测出设备存在与否。具体步骤:BIOS读取EC的上次上电状态,BIOS发送命令让EC给设备上电,BIOS读取存在状态后向EC回填探测到的设备状态。最后EC根据状态送使能信号,保持设备起始状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值