SMBus的简介
SMBUS:System Management BUS(系统管理总线)。它是Intel在1995年提出的,主要应用于移动PC和桌面PC系统的低速率通信。SMBUS有两条信号线,分别为SMBCLK与SMBDAT,即时钟线和数据线。它是基于I2C协议而发展出来的,它被用来连接各种设备,包括电源相关设备,系统传感器,EEPROM通讯设备等。起止条件(与I2C类似),当CLK为高电平时,DAT从高电平转换为低电平,表示数据传输信号的开始。当CLK为高电平,DAT从低电平转换为高电平则表示数据传输的结束。
SMBus和I2C的区别
SMBus I2C
最大传输速度 100kHz 最大传输速度400kHz
最小传输速度 10kHz 无最小传输速度
35ms时钟低超时复位通讯 无时钟超时采用硬件复位
固定的逻辑电平 逻辑电平由VDD决定
不同的地址类型 7位、10位和广播呼叫从地址类型
地址广播后的返回ack是必须的 地址广播后返回ack不是必须的
不同的总线协议 无总线协议
SMBus时序分析
SMBus开始和停止信号
SMBus数据传输
SMBus读写流程
SMBUS的读写操作方式,其中操作方式的配置是在偏移位置为02h的寄存器:
读一个字节,需要在偏移位置02h这个寄存器写入0x48,即01001000b,即bit3以及bit6置1,参照数据手册,对于bit6置1来说它标志着一个START信号,对于bit3置1,即bit4:2为010,即表示读一个字节。 读一个字,需要在偏移位置02h这个寄存器写入0x4C,即01001100b,即bit3,bit4,bit6置1,参照数据手册,对于bit6置1来说它标志着一个START信号,对于bit3,bit4置1,即bit4:2为110,即表示读一个字。 写一个字节,与读一个字节是一样的,在02h这个位置写入0x48,那么如何判断是读一个字节和写一个字节,这就需要结合从设备的地址的bit0,为1表示读,为0表示写。 写一个字,与读一个字是一样的,在02h这个位置写入0x4C,那么如何判断是读一个字和写一个字,这就需要结合从设备的地址的bit0,为1表示读,为0表示写。
02H寄存器如下所示:
1.先找到SMBus的基地址寄存器,通过读取基地址寄存器中5:15位的值确定IO空间的基地址。
2.找到SMBus的基地址后,就可以进入到配置空间进行配置。
SMBus每一个寄存器如图所示:
3.IO配置空间基地址偏移0x04h为从设备选择寄存器,1-7位为设备地址,第0位为读写位
4.向0x03h写入要读取的寄存器偏移地址。
5.向0x02h寄存器中写入操作方式。
6.可以在0x05h寄存器和0x06h寄存器中中读取从设备发送的信息或者写入字节到从设备寄存器中。
SMBus读写操作
SMBus读写字节:
读字节: 1.首先在(SMBUS基地址+0x04)的位置写入(从设备号+1),位0置1表示读操作。 2.然后将需要读取数据的那个寄存器(存储着SPD信息的寄存器)的偏移量写入(SMBUS基地址+0x03)这个位置。 3.在(SMBUS基地址+0x02)这个位置写入操作方式,读一个字节则写入0x48。 4.在(SMBUS基地址+0x05)这个位置则可以读出对应寄存器里的数据。 写字节: 1.首先在(SMBUS基地址+0x04)的位置写入(从设备号),位0置零表示写操作。 2.然后将需要写入数据的那个寄存器(存储着SPD信息的寄存器)的偏移量写入(SMBUS基地址+0x03)这个位置。 3. 在(SMBUS基地址+0x05)这个位置写入将要写入指定寄存器的数据。 4. 在(SMBUS基地址+0x02)这个位置写入操作方式,写一个字节则写入0x48。 读两字节: 1.首先在(SMBUS基地址+0x04)的位置写入(从设备号+1),位0置1表示读操作。 2.然后将需要读取数据的那个寄存器(存储着SPD信息的寄存器)的偏移量写入(SMBUS基地址+0x03)这个位置。 3.在(SMBUS基地址+0x02)这个位置写入操作方式,读一个字则写入0x4C。 4.在(SMBUS基地址+0x05)(SMBUS基地址+0x06)这两个位置则可以读出对应寄存器里的一个字的数据。 写两字节: 1.首先在(SMBUS基地址+0x04)的位置写入(从设备号),位0置零表示写操作。 2.然后将需要写入数据的那个寄存器(存储着SPD信息的寄存器)的偏移量写入(SMBUS基地址+0x03)这个位置。 3.在(SMBUS基地址+0x05)(SMBUS基地址+0x06)这两个位置写入要写入对应寄存器里的一个字的数据。 4. 在(SMBUS基地址+0x02)这个位置写入操作方式,写一个字则写入0x4C。
SMBus读写块:
读一个块操作: 1.首先在(SMBUS基地址+0x04)的位置写入(从设备号+1),位0置1表示读操作。 2.然后将需要读取数据的那个寄存器(存储着SPD信息的寄存器)的偏移量写入(SMBUS基地址+0x03)这个位置。 3.在(SMBUS基地址+0x02)这个位置写入操作方式,读一个块为0x54。 4.在(SMBUS基地址+0x05)读出count(块中数据的个数),在(SMBUS基地址+0x07)这个位置可以依次读出块中的数据。 5.在(SMBUS基地址+0x05)这个位置写入0x80,清标志位,然后执行前一步,直到读出整个块的数据。 写一个块描述如下: 1.首先在(SMBUS基地址+0x04)的位置写入(从设备号+1),位0置零表示写操作。 2.然后将需要写入数据的那个寄存器(存储着SPD信息的寄存器)的偏移量写入(SMBUS基地址+0x03)这个位置。 3.在(SMBUS基地址+0x05)写入count(块中数据的个数),在(SMBUS基地址+0x07)这个位置可以依次写入块中的数据。 4.在(SMBUS基地址+0x02)这个位置写入操作方式,写一个块为0x54。 5.在(SMBUS基地址+0x05)这个位置写入0x80,清标志位,然后执行前一步,直到在块中写入count个数据。