RK3568驱动指南|第十五篇 I2C-第183章 SMBus总线介绍

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。


【公众号】迅为电子

【粉丝群】258811263(加群获取驱动文档+例程)

【视频观看】嵌入式学习之Linux驱动(第十五篇 I2C_全新升级)_基于RK3568

【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板


第183章 SMBus总线介绍

183.1 什么是SMBus总线?

SMBus(System Management Bus)是由Intel在1995年发布的一种基于I2C总线的串行总线协议。它最初被设计用于在电脑系统内部连接智能电池和其他系统管理设备。

SMBus与I2C总线非常相似,它们都采用两线式串行通信。SMBus使用SMBDAT和SMBCLK作为数据线和时钟线,与I2C的SDA和SCL很相似,如下图所示:

SMBus的主要特点如下所示:

电气特性:

(1)采用开漏输出,需要外部上拉电阻

(2)电压范围:0V到5.5V

(3)最大时钟频率:100kHz

通信协议:

(1)主从式通信,一个主设备控制多个从设备

(2)地址空间:7位或10位

(3)支持读/写操作

(4)支持块传输和字节传输

(5)支持多种事务类型,如快速命令、写字节、读字节等

功能特性:

(1)简单、低成本、低功耗

(2)面向系统管理应用,如电源管理、温度监控等

(3)与I2C高度兼容,可以复用I2C硬件

时序特性:

(1)Start和Stop条件与I2C相同

(2)地址和数据传输时序也与I2C相似

(3)但有一些特殊的时序,如快速命令、块传输等

183.2 SMBus和I2C的区别

(1)速度范围:

I2C支持从10kHz到3.4MHz不等的速度范围,覆盖了更广泛的应用场景。

SMBus则只支持10kHz到100kHz的速度范围,主要面向低速的系统管理应用场景。

(2)ACK应答:

I2C不强制从机发送ACK应答,这样可以提高灵活性。但如果从机没有应答,主机可能会产生错误。

SMBus要求从机必须发送ACK应答,这可以确保主机能够检测到从机是否存在,避免误操作。

(3)时间限制:

SMBus规定,从机不能将SCL线拉低超过35ms,否则会复位正在进行的通信。

I2C没有这样的时间限制,主机和从机可以自主控制SCL线的状态。

(4)其他区别:

SMBus有一些专门为系统管理设计的命令和事务类型,如快速命令、块传输等。

SMBus的地址空间相比I2C更小,只支持7位或10位地址。

SMBus在电气特性上也有一些差异,如电压范围等。

183.3 SMBus总线软件实现

在Linux内核中,I2C和SMBus是共用的总线架构,通过i2c-core子系统进行管理和抽象,在i2c.h头文件中定义了i2c_algorithm结构体中,具体内容如下所示:

struct i2c_algorithm {/* 如果 I2C 适配器算法无法执行 I2C 级别的访问,则应将 master_xfer 设置为 NULL。如果 I2C 适配器算法可以执行 SMBus 访问,则应设置 smbus_xfer。如果设置为 NULL,则将使用通用的 I2C 消息来模拟 SMBus 协议 *//* master_xfer 函数应该返回成功处理的消息数量,或者在出现错误时返回一个负值 */int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,int num);/* 用于执行 SMBus 传输操作的函数指针adap: I2C 适配器addr: 从设备地址flags: 传输标志read_write: 读/写标志command: SMBus 命令码size: 传输数据的大小data: 用于存储传输数据的联合体 */int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,unsigned short flags, char read_write,u8 command, int size, union i2c_smbus_data *data);/* 用于确定适配器支持的功能的函数指针 */u32 (*functionality) (struct i2c_adapter *);#if IS_ENABLED(CONFIG_I2C_SLAVE)/* 用于注册和注销从设备的函数指针 */int (*reg_slave)(struct i2c_client *client);int (*unreg_slave)(struct i2c_client *client);
#endif
};

其中smbus_xfer函数用于实现SMBus特有的一些操作,如快速命令、写字节、读字节等。

当I2C控制器工作在SMBus模式时,会通过smbus_xfer函数来执行SMBus的特殊事务。

183.4 SMBus总线API函数

函数1:i2c_smbus_read_byte(const struct i2c_client *client)

函数原型: s32 i2c_smbus_read_byte(const struct i2c_client *client)

功能: 从当前位置读取一个字节的数据,不设置地址

参数: client - I2C设备的客户端结构体

返回值: 读取到的数据,失败返回负数

函数2:i2c_smbus_write_byte(const struct i2c_client *client, u8 value)

函数原型: s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value)

功能: 向当前位置写入一个字节的数据,不设置地址

参数: client - I2C设备的客户端结构体, value - 要写入的数据

返回值: 成功返回0,失败返回负数

函数3:i2c_smbus_read_byte_data(const struct i2c_client *client, u8 command)

函数原型: s32 i2c_smbus_read_byte_data(const struct i2c_client *client, u8 command)

功能: 读取指定地址的一个字节的数据

参数: client - I2C设备的客户端结构体, command - 要读取的地址

返回值: 读取到的数据,失败返回负数

函数4:i2c_smbus_write_byte_data(const struct i2c_client *client, u8 command, u8 value)

函数原型: s32 i2c_smbus_write_byte_data(const struct i2c_client *client, u8 command, u8 value)

功能: 向指定地址写入一个字节的数据

参数: client - I2C设备的客户端结构体, command - 要写入的地址, value - 要写入的数据

返回值: 成功返回0,失败返回负数

上述4个函数是smbus总线通信的常用数据接收和发送函数,而在前面的章节中已经编写了I2C总线的通信驱动,如果要使用smbus总线进行通信,只需要将前面编写的驱动函数中的i2c_transfer函数根据功能替换为上面四个函数即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商业模式的6大要素,新零售起盘策划公司,顶层设计方案服务商

在当今的商业世界中,企业通过不同的商业模式来实现自身的发展和利润。下面介绍六种常见的商业模式。 坐标:厦门,我是易创客肖琳 深耕社交新零售行业10年,主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 1、互联…

常用知识点问答

目录 描述 Nginx location转发时root和alias指定路径的区别? LVS Haproxy Nginx负载均衡都有哪些常用的调度算法?(每种要求不少于5个) Nginx 4层反向代理和7层反向代理有什么区别?以及如何配置? 如何实现Nginx负载均衡的高可用…

使用DelayQueue实现延迟任务

有时候,我们需要在当前时间点往后延迟一定时间,再执行任务,该怎么实现呢? 1. 延迟任务方案 延迟任务的实现方案有很多,常见的有四类: DelayQueueRedissonMQ时间轮原理JDK自带延迟队列,基于阻塞…

实验室必备神器:PFA气体装置,精准控制每一丝气体!

PFA气体吸收装置是一种高效的气体处理设备,主要用于捕获、存储和转移各种气体样本,特别是在需要高纯度气体的应用场合中表现出色。以下是关于PFA气体吸收装置的详细介绍: 一、特点与优势 1. 高效吸收:采用先进的物理和化学吸收技术…

C++ double free

C double free 原因 原因 局部指针重复释放 指针非 NULL时释放一次,且 function结束时又free一次循环越界,导致内存越界

01:Linux的基本命令

Linux的基本命令 1、常识1.1、Linux的隐藏文件1.2、绝对路径与相对路径 2、基本命令2.1、ls2.2、cd2.3、pwd / mkdir / mv / touch / cp / rm / cat / rmdir2.4、ln2.5、man2.6、apt-get 本教程是使用的是Ubuntu14.04版本。 1、常识 1.1、Linux的隐藏文件 在Linux中&#xf…

ubuntu虚拟机安装

Ubuntu18.04安装教程(VMware)

小型气象站是干什么用的?组成?

小型气象站是一款小型的可监测气象环境参数的气象监测仪器。一般可监测空气温湿度,光照强度,大气压力,总辐射,降雨量,风速,风向等参数。通过监测到的这些参数便于人们生产生活参考。 常规的小型气象站主要…

MATLAB将两个折线图画在一个图里

界面如图 输入行数和列数,点击开始填入数据,其中第一列为x值,后面几列,每一列都是y坐标值,填好后点击画在同一张图里即可。点击置零就把所有数变成0,另外也可以选择节点样式。 .mlapp格式的文件如下 夸克…

离线运行Llama3:本地部署终极指南

4月18日,Meta在官方博客官宣了Llama3,标志着人工智能领域迈向了一个重要的飞跃。经过笔者的个人体验,Llama3 8B效果已经超越GPT-3.5,最为重要的是,Llama3是开源的,我们可以自己部署! 本文和大家…

师傅们 ~ 2024HW一手资料

各位师傅们,2024HW来了! 从2026年开始,随着我国对网络安全的重视,涉及单位不断增加,越来越多单位和个人都加入到HW当中。 2024HW就在眼前, 那么还有不了解或者还没投简历面试的朋友们,需要注意…

有哪些手持小风扇品牌推荐?五大手持小风扇诚意推荐!

在炎炎夏日,一款便携且高效的手持小风扇无疑是消暑的必备神器。为了帮助大家轻松应对酷暑,我们精心挑选了五大手持小风扇品牌进行诚意推荐。这些品牌不仅拥有出色的降温效果,更在外观设计、便携性、续航能力及操作便捷性上表现卓越。接下来&a…

AI学习指南机器学习篇-随机森林模型应用与Python实践

AI学习指南机器学习篇-随机森林模型应用与Python实践 人工智能(AI)和机器学习(ML)的发展已经深入到了我们的日常生活中。在这种情况下,了解不同的机器学习算法和工具变得越来越重要。随机森林是一种强大且灵活的机器学…

华为HCIP Datacom H12-821 卷22

1.单选题 下面关于验证一个接收到的Hello报文是否合法描述错误的是: A、所接收的Hello报文中RouterDeadIntera1字段必须和接收端口的配置一致 B、如果接收端口的网络类型为,点对点类型或者虚链路,则不检查NetworkMask字段 C、如果接妆端口的网络类型是广播型点到多点…

互联网医院系统源码解析:如何打造智能数字药店APP?

在互联网技术飞速发展的今天,医疗行业也在不断与之融合,互联网医院系统应运而生。特别是智能数字药店APP的兴起,使得医疗服务变得更加便捷、高效。本文将深入解析互联网医院系统源码,探讨如何打造一个智能的数字药店APP。 一、互…

KICAD针对线宽布线操作

如果在刚开始没有设置好布线宽度,KiCad Pcbnew 在布好线后经常会需要修改布线宽度。 下面有几种常用的修改多端线宽的方法 1、快捷键修改整个网络的线宽。 按 I 键选中整条网络,再按 E 键,即可修改整网络的线宽。 2、修改多条线的…

仿论坛项目--初识Spring Boot

1. 技术准备 技术架构 • Spring Boot • Spring、Spring MVC、MyBatis • Redis、Kafka、Elasticsearch • Spring Security、Spring Actuator 开发环境 • 构建工具:Apache Maven • 集成开发工具:IntelliJ IDEA • 数据库:MySQL、Redi…

合同网协议实现无人机分布式任务分配的原理介绍和代码逻辑框架

无人机任务分配领域中的合同网协议(Contract Net Protocol, CNP)算法是一种基于协商机制的协作方法,该算法模拟了人类商业活动中的招标-投标-中标过程,通过节点之间的招投标机制进行任务分配,旨在使系统以较低的代价、…

RAG简要教程

RAG(Retrieval-Augmented Generation) RAG(Retrieval-Augmented Generation)是一种增强大型语言模型(LLM)性能的方法。它结合了信息检索(Retrieval)和文本生成(Generati…

厉害了,Pinokio!所有AI工具,一键安装,全部免费!整合AI绘画、AI视频、AI语音...

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 去年夏天,写了一篇在 Mac 上部署 Stable Diffusio…