EC修炼之道—SMBUS

 

SMBUS在EC firmware中占有重要的地位,我们先来看一下它的应用:(1)电池模块需要它来通信,如SmartBattery IC以及ChargeIC。(2)平台各个温度获取,通过与温度传感器,SMBUSLINK1,或显卡芯片的SMUBS相连,来读取其温度值。(3)CPU及内存调压,使用SMBUS接口的调压芯片,控制它的电压,使其得到更好的performance。(4)监测平板的方向,重力传感器也是SMBUS接口,先调好合适的灵敏度,然后根据其数据,来决定屏幕显示的方向。

 

1 SMBUS硬件接口


EC修炼之道—SMBUS_第1张图片


 

         从此图可以看出,SMBUS由两线组成。SCL是时钟线,由Master来控制,SDA是数据线,Slave设备靠此线来采集数据。

         SMBUS设计采用主从结构,即传输时需要有一个Master设备,一个Slave设备。Master发命令,Slave设备对其命令进行响应。

 

2 SMBUS数据传输

 

可以把SMBUS数据传输粗略地分为字节,字,块的传输。各项又可分为写传输和读传输。如字节传输,我们可以向Slave的某个寄存器写一个字节,也可以从该寄存器读一个字节。其读写时序是不一样的,下面图示为字节的读和写:


EC修炼之道—SMBUS_第2张图片

由图可以看出,写字节和读字节协议是不一样的。

写字节为:

1)起始信号

2)送地址写

3)送寄存器

4)送数据

5)结束信号

读字节为:

1)  起始信号

2)  送地址写

3)  送寄存器

4)  起始信号

5)  送地址读

6)  读数据

7)  结束信号

 

 

2.1 起始信号

当CLOCK线是高电平时,DATA线从高电平向低电平切换,为起始信号。

即:

CLOCK:=1

DATA:=1

DATA:=0

 

2.2 结束信号

         当CLOCK线是高电平,DATA线从低电平向高电平切换,为停止信号。

         即:

         CLOCK:=1

         DATA:=0

         DATA:=1

 

2.3 应答信号

在发送1个BYTE后,第9个时钟周期,当CLOCK线为高电平,采集到的DATA线为低电平时,说明SLAVE设备应答成功,返之没有应答。

即:

         CLOCK:=1

         If(DATA=0)  then

                   ACK

         Else

                   NACK

 

2.4 送数据

SMBUS传输数据时,采用MSB方式,即先送高位再送低位。每次传输数据以字节为一组。即使是块传输协议时,也是一个字节接一个字节地传输N次。因其为串行方式,一次只能传输一个位,所以一个字节要传输8次。传输的数据是以CLOCK为高电平时采集DATA的电平,DATA为高电平,传输的数据为1,否则为0。

假设数据为TransferData,描述如下:

For i:=0 to 7 do

begin

         CLOCK := 0;

         If ((TransferData SHL i)  and $80) then

                   DATA := 1

         Else

                   DATA:=0

                   CLOCK:= 1

End

 

2.5 读数据

读数据和写数据时,数据的采集是一样的。

采集数据放在ReadData中,即:

For i:=7 downto 0do

Begin

         CLOCK:=0

         DELAY_FOR_SLAVE_PREPARE_DATA

         CLOCK:=1

         ReadData = (ReadData or ( DATA SHL i))

end

 

3 EC代码接口

 

Vendor厂商基本上把逻辑代码都已经写好,并留有OEM接口(SMBUS数组)。我们要做的事一般有两件。第一件,在OEM接口填好初始化数据和运行时数据,初始化数据用于设定SLAVE设备使其符合我们平台的需求,或SALVE设备某个寄存器值是固定的,读一次便可一劳永逸,运行时数据用于实时监控SLAVE设备的现有状态。第二件,EC定时读取实时读出的数据,如果触发某个条件,便执行相应的代码,如CPU温度达到调节风扇转速的临界点。


你可能感兴趣的:(EC)