【Linux】特别篇--SMBus 协议

article/2025/9/14 20:28:31

【Linux】特别篇--SMBus 协议

  • 一、SMBus 简介
  • 二、SMBus 与 I2C 区别
  • 三、SMBus协议分析
    • 3.1 符号含义
    • 3.2 SMBus Quick Command
    • 3.3 SMBus Receive Byte
    • 3.4 SMBus Send Byte
    • 3.5 SMBus Read Byte
    • 3.6 SMBus Read Word
    • 3.7 SMBus Write Byte
    • 3.8 SMBus Write Word
    • 3.9 SMBus Block Read
    • 3.10 SMBus Block Write
    • 3.11 I2C Block Read
    • 3.12 I2C Block Write
    • 3.13 SMBus Block Write - Block Read Process Call
    • 3.14 Packet Error Checking (PEC)
  • 四、SMBus 和 I2C 的使用建议


文章参考教程: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。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/vP1brOwE.shtml

相关文章

SMBUS的介绍与访问

博文是为了总结自己在bios学习上面的点点滴滴,并且加深印象,由于本人水平有限,难免存在不足之处,望指正,同时感谢CSDN提供的平台。本文主要介绍的是SMBUS。 1 SMBUS的简介 特点: SMBUS,System …

java完整开发环境搭建_如何搭建一个完整的Java开发环境

这篇文章主要教大家如何搭建一个完整的Java开发环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课。环境的配置,大概就分三个…

1.1-java开发环境搭建

java开发环境搭建 回到第一章:目录 文章目录 java开发环境搭建前言一、下载jdk1.安装前检查 二、安装jdk1.安装2.配置环境变量3.验证安装 前言 本节内容是搭建java的开发环境。 分为三步:下载jdk;安装jdk;配置环境变量&#xff…

Windows Java开发环境搭建

1.下载安装配置 JDK 8 打开 https://developer.oracle.com/找到 Java8 下载位置,点击下载链接,下载JDK 8 下载后如下图所示,双击安装一直选择选择下一步 2.下载安装 Eclipse点击官网下载 Eclipse下载后就是一个压缩包,只需解压即…

基于Centos7的Java开发环境搭建

基于Centos7的Java服务器搭建 前提:Centos常用命令安装 1. 安装wget yum -y install wget2. 安装gcc yum -y install gcc1. Centos7下的防火墙操作 systemctl status firewalld # 查看防火墙状态 systemctl start firewalld # 开启防火墙 systemctl stop fi…

Java开发环境的搭建与配置

Java开发环境的搭建与配置 1、JDK、JRE、JVM的关系 2、JDK的下载:http://java.sun.com 3、JDK安装:可以自定义安装路径 4、JDK环境变量配置: 鼠标右击【计算机】->【属性】->【高级系统设置】->【高级】->【环境变量】 系统变…

Java开发环境搭建实践

前言 刚刚弄完python的环境搭建,今年打算也要好好学习Java,所以把Java的环境弄起来 搭建过程 jdk下载和安装 下载 官网:Oracle 甲骨文中国 | 云应用和云平台 打开官网 点击产品后下拉找到Java点进去。 下载Java 我就下载最新的jdk把…

程序员福音 【完整的Java开发环境搭建】 系列篇

原文地址 BY Jason 文章目录 原文地址Java开发环境搭建统一问题解决(更新中)1. vim常用操作命令2. 关于Linux防火墙开放端口问题 环境安装目录(更新中)Docker安装容器安装SSHJDK安装MySQL安装Redis安装RabbitMQ安装 Java开发环境…

Windows下Java开发环境搭建

本文以Win7操作系统解压版Eclipse安装版JDK1.7为例,展示如何搭建初级Java开发环境。 第一步:根据自己电脑的操作系统的位数选择相应版本的安装包进行安装: (1)查看自己电脑操作系统位数:找到“计算机”图标…

Java开发环境搭建详细教程(JDK+Eclipse)

前言 学习 Java 编程的第一件事情就是把开发环境搭建起来,这样才能开始快乐的编程学习之旅。然而,很多萌新经常因为种种问题无法搭建好开发环境,导致自己信心受挫,学习兴趣和激情也大减,甚至因此彻底放弃学习 Java 编…

【Java编程进阶】Java开发环境搭建

文章详细讲述了 Java 开发环境的搭建,编写并运行第一个 Java 程序,为后续的 Java 学习做了准备工作。 推荐学习专栏:Java编程进阶之路 文章目录 1. 为什么安装JDK?2. JDK的下载安装3. 配置环境变量4. 第一个Java程序1. 为什么安装JDK? 什么是JDK? JDK是java软件开发包,…

Java开发环境搭建超全详解

在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必须阶段,只有开发环境搭建好了,方可进行开发,良好的开发环境搭建,为后续的开发工作带来极大便利。 对于大公司来说,软件开发环境搭建工…

JAVA开发环境的搭建(最新版)【2019.2.12】

JAVA环境搭建 JAVA(咖啡)这个名字很有意思这里我会教大家来找到泡咖啡需要的用品 一、下载环境包(找到茶杯) 首先,我们需要到Oracle官网去下载开发环境步骤如下 主页操作如下(可能会随着时间的变化网页布局会改变,不要慌&#…

Java开发环境搭建:Windows

Java开发环境搭建:Windows JDK下载安装JDK下载设置环境变量测试是否安装成功 开发工具下载安装:IdeaIdea下载Idea安装 Idea开发JAVA推荐一波 JDK下载安装 JDK下载 JDK官网下载点这里 根据自己的电脑操作系统选择JDK 的安装包。 需要记住安装位置,后面设置环境变量…

Java开发的环境搭建

目录 1>下载并安装JDK 2>下载并安装IntelliJ IDEA Ultimate 3>下载并安装Tomcat 1>下载并安装JDK 下载地址(要注册账号,建议去百度网盘下载): https://www.oracle.com/java/technologies/javase/javase-jdk8-dow…

java开发环境搭建与配置

java开发环境搭建与配置 1.首先鼠标右击我的电脑,找到“属性”,点击进入 2.找到“高级系统设置”,点击进入 3.点击“高级”,再点击“环境变量” 4.选择“系统变量” 用户变量只对当前用户有效,如用户更换&#xff0…

如何搭建Java的开发环境

我们在学习Java之前第一步应该搭建Java的开发环境,那开发环境如何搭建? 安装JDK配置环境变量 下面逐一介绍: JDK的下载与安装 1. 下载 打开浏览器,搜索JDK8(企业用的最多的是JDK7和JDK8,主流是JDK8&a…

Java开发环境搭建01:JDK安装和配置

一、JDK介绍 JDK是 Java 语言的软件开发工具包,是整个Java开发的核心,它包含了Java的运行环境(JVMJava系统类库)和Java工具(javac命令和java命令等)。总之一句话:开发Java程序必须下载并安装该…

Java开发环境搭建(windows版、史上最详细版)

Java开发环境搭建 在本章节中我们将为大家介绍如何搭建Java开发环境。我使用的是windows系统,那就给大家讲一下在windows系统下搭建java的开发环境。 Jdk介绍 JDK(Java Development Kit)是 Java 语言的软件开发工具包,主要用于…

从零学Java(2)之搭建开发环境

目录 从零学Java(8)之变量 从零学Java(7)之数据类型 从零学Java(6)之字面量和常量 从零学Java(5)之关键字和保留字 从零学Java(4)之编程规范 从零学Java&…