SMBus协议学习

本文详细介绍了SMBus系统管理总线的工作原理、与I2C的区别,以及其读写流程、时序分析和与设备通信的步骤,包括读写字节、块操作等内容。
摘要由CSDN通过智能技术生成

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个数据。
  • 22
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值