【Linux】特别篇--SMBus 协议


文章参考教程:SMBus协议
SMBus协议:官网

一、SMBus 简介

  SMBus 是 I2C 协议的一个子集。

有关I2C协议可以看这篇:
【STM32】标准库与HAL库对照学习教程特别篇–IIC通信原理讲解

SMBus 全称 System Management Bus,即系统管理总线。

  • SMBus 是Intel与Duracell共同制订笔记本电脑所用的智能型电池(SmartBattery)时所研发的接口,首版于1995年发表。
  • SMBus 也被用来连接各种设备,包括电源相关设备,系统传感器,EEPROM 通讯设备等等。
  • SMBus 为系统和电源管理这样的任务提供了一条控制总线,使用 SMBus 的系
    统,设备之间发送和接收消息都是通过 SMBus,而不是使用单独的控制线,这
    样可以节省设备的管脚数。
  • SMBus 是基于 I2C 协议的,SMBus 要求更严格,规定了更多细节与规范。

在这里插入图片描述


二、SMBus 与 I2C 区别

  • VDD 的极限值不一样。I2C 协议的范围很广,甚至讨论了高达 12V 的情况,而SMBus规定了在1.8V~5V。
  • 时钟频率规定不同。I2C 没有时钟频率限制,一般最常见的是100k、400k,而SMBus规定时钟频率必须在10k~100k内。
  • 当设备需要处理内部事情时,可将时钟线拉低,I2C 没有规定拉低时长,而SMBus有规定时限。
    地址应答规定不同。一个 设备接收到它的设备地址后,I2C 协议没有强制要求必须发出回应信号,而SMBus:强制要求必须发出回应信号。
  • 数据格式规定不同。I2C 没有定义数据的格式,格式由设备来定义,而SMBus 协议明确了数据的传输格式。
  • SMBus 有低功耗的版本

三、SMBus协议分析

3.1 符号含义

S (1 bit) : 起始位
Sr (1 bit) : 重复的起始位
P (1 bit) : 停止位
R/W# (1 bit) : Read/Write bit,读写位
A, N (1 bit) : 应答位
Address(7 bits): 地址位,7 位地址
Command Code (8 bits): 命令字节,一般用来选择芯片内部的寄存器
Data Byte (8 bits): 数据字节,8 位;如果是 16 位数据的话,用 2 个字节来表示。
Count (8 bits): 在 block 操作总,表示数据长度
[..]: 中括号表示 I2C 设备发送的数据,没有中括号表示 主机 发送的数据

3.2 SMBus Quick Command

在这里插入图片描述
只是用来发送一位数据:R/W#本意是用来表示读或写,但是在 SMBus 里可以用来表示其他含义。比如某些开关设备,可以根据这一位来决定是打开还是关闭。

3.3 SMBus Receive Byte

在这里插入图片描述

读取一个字节,主设备 接收到一个字节后不需要发出应答信号(上图中 N 表示不回应)。

3.4 SMBus Send Byte

在这里插入图片描述
发送一个字节数据。

3.5 SMBus Read Byte

在这里插入图片描述
先发数据,发出 芯片内部的寄存器地址,再读数据,读取设备寄存器地址储存的1个字节的数据。

3.6 SMBus Read Word

在这里插入图片描述
先发数据,发出 芯片内部的寄存器地址,再读数据,读取设备寄存器地址储存的2个字节的数据。

3.7 SMBus Write Byte

在这里插入图片描述
先发数据,发出 芯片内部的寄存器地址,再写数据,向设备寄存器地址写1个字节的数据。

3.8 SMBus Write Word

在这里插入图片描述
先发数据,发出 芯片内部的寄存器地址,再写数据,向设备寄存器地址写2个字节的数据。

3.9 SMBus Block Read

在这里插入图片描述
先发数据,发出 芯片内部的寄存器地址,再读数据,先读到一个字节(Block Count),表示后续要读的字节数,然后读取全部数据

3.10 SMBus Block Write

在这里插入图片描述
先发数据,发出 芯片内部的寄存器地址,再写数据,先写一个字节(Block Count),表示后续要写的字节数,然后写全部的数据

3.11 I2C Block Read

在这里插入图片描述
I2C 协议的 连续读多个数据,与SMBus 的区别是不需要接收读取总的字节数

3.12 I2C Block Write

I2C 协议的 连续写多个数据,与SMBus 的区别是不需要写入总的字节数
在这里插入图片描述

3.13 SMBus Block Write - Block Read Process Call

在这里插入图片描述
先写一块数据,再读一块数据。

3.14 Packet Error Checking (PEC)

在这里插入图片描述

PEC 是一种错误校验码,如果使用 PEC,那么在 P 信号之前,数据发送方要发送一个字节的 PEC 码(它是 CRC-8 码)。

四、SMBus 和 I2C 的使用建议

因为很多设备都实现了 SMBus,而不是更宽泛的 I2C 协议,所以优先使用SMBus。即使 I2C 控制器没有实现 SMBus,软件方面也是可以使用 I2C 协议来模拟 SMBus。所以:Linux 建议优先使用 SMBus。

在这里插入图片描述

  • 23
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在STM32F767和LTC4015之间进行SMBus通信时,需要先进行一些准备工作。首先,通过STM32F767的配置寄存器设置GPIO引脚的模式和功能,将SMBus的SDA和SCL引脚配置为复用功能,并使能相应的时钟。接下来,需要在STM32F767的控制器中初始化SMBus,并设置SMBus的主从模式、传输速率和地址,以及其他相关参数。 在通信过程中,STM32F767作为SMBus的主设备,通过设置控制器中的寄存器来发送SMBus的开始信号、地址和数据。首先,设置发送开始条件的寄存器,并写入目标设备的地址。之后,向发送缓冲器中写入要发送的数据,并设置好发送相关的标志位。当标志位被置位后,SMBus开始发送数据,并在发送过程中会检测目标设备的应答。 对于LTC4015来说,作为SMBus的从设备,它需要初始化自己的SMBus控制器,并设置好从设备地址以及其他相关的参数。当STM32F767向LTC4015发送数据时,LTC4015会接收到数据,并进行相应的处理。例如,如果STM32F767发送的是一个命令,LTC4015会读取该命令,并执行相应的动作。如果STM32F767发送的是数据,则LTC4015会接收并存储这些数据。 在通信完成后,STM32F767可以通过检查传输状态寄存器的标志位来确认通信是否成功。如果通信成功,可以继续发送下一个数据帧;如果失败,可以进行重新尝试或者进行错误处理。 总之,通过STM32F767和LTC4015之间的SMBus通信,可以实现主设备和从设备之间的数据交换和控制指令的传递,从而对LTC4015进行配置和控制。这样的通信方式可以让我们更加灵活地操作LTC4015,并实现更多的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修成真

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值