Learn about EC
最近在用rust为我的TS453B mini写一个风扇控制程序,需要和EC(Embedded Controller)的交互。但是没有找到太多关于EC的资料。
IO端口
TS453B mini使用的是以下端口:
0x6c状态/命令端口0x68数据端口
协议解读
点击这里查看协议全文。
从Idle状态开始总共有8个状态转换。这里简化为4条。
- 首先EC处于空闲状态,即
IBF=0,IOF=0 - 第一步,检测
0x6c,IBF=0时(此时最好OBF=0,否则会取消之前的命令和状态),向0x6c发送命令。这里后续可以直接转入空闲状态。 - 第二步,检测
0x6c,直至IBF,OBF=0,1的时候,可以从0x68读取数据;如果读取后OBF=1,显然还需要继续读取。 - 第三步,检测
0x6c,直至IBF=0的时候(此时OBF=0),可以向0x68写数据。
总结:可以在空闲状态下安全的向0x6c发送命令或者向0x68写数据(触发IBF=1)。如果IBF=1,说明EC尚未处理发送的命令或数据。
另外可以看到如果不加锁的话,多线程读写会有冲突的。
参考
- http://wiki.laptop.org/go/Revised_EC_Port_6C_Command_Protocol
- http://wiki.laptop.org/go/Ec_specification#Old_Port_6c_Command_Protocol
- https://blog.csdn.net/zhao_longwei/article/details/50454779