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,一经查实,立即删除!

相关文章

使用DelayQueue实现延迟任务

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

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

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

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…

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

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

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

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

师傅们 ~ 2024HW一手资料

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

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

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

互联网医院系统源码解析:如何打造智能数字药店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…

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

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

友好前端vue脚手架

企业级后台集成方案vue-element-admin-CSDN博客在哔站学习,老师说可以有直接的脚手架(vue-element-admin)立马去搜索,找到了这博主这篇文章 介绍 | vue-element-admin​​​​​​ 官方默认英文版: git clone https:/…

红队工具Finger 安装具体以步骤-示例centos

1.git clone https://github.com/EASY233/Finger.git 如果没有 yum install git 2.pip3 install -r requirements.txt 找到finger所在的文件夹 可以用find -name "Finger"进入文件中配置命令 前提要安装python yum install python-pip33.python3 Finger.py -h

使用Spring Boot实现博客管理系统

文章目录 引言第一章 Spring Boot概述1.1 什么是Spring Boot1.2 Spring Boot的主要特性 第二章 项目初始化第三章 用户管理模块3.1 创建用户实体类3.2 创建用户Repository接口3.3 实现用户Service类3.4 创建用户Controller类 第四章 博客文章管理模块4.1 创建博客文章实体类4.2…

类和对象(提高)

类和对象(提高) 1、定义一个类 关键字class 6 class Data1 7 { 8 //类中 默认为私有 9 private: 10 int a;//不要给类中成员 初始化 11 protected://保护 12 int b; 13 public://公共 14 int c; 15 //在类的内部 不存在权限之分 16 void showData(void)…

德国Testing Expo丨知迪科技Vehicle Bus Tool免费软件“剧透”抢先看!

今日,德国斯图加特汽车测试及质量监控展览会(Automotive Testing Expo)在斯图加特会展中心正式开幕。作为汽车测试领域专业性最强、影响力最广泛的展会之一,展会首日盛况空前,面向组件和整车的最新测试、开发和验证技术…

观测云赋能「阿里云飞天企业版」,打造全方位监控观测解决方案

近日,观测云成功通过了「阿里云飞天企业版」的生态集成认证测试,并荣获阿里云颁发的产品生态集成认证证书。作为监控观测领域的领军者,观测云一直专注于提供统一的数据视角,助力用户构建起全球范围内的端到端全链路可观测服务。此…

微观特征轮廓尺寸测量:光学3D轮廓仪、共焦显微镜与台阶仪的应用

随着科技进步,显微测量仪器以满足日益增长的微观尺寸测量需求而不断发展进步。多种高精度测量仪器被用于微观尺寸的测量,其中包括光学3D表面轮廓仪(白光干涉仪)、共聚焦显微镜和台阶仪。有效评估材料表面的微观结构和形貌&#xf…

CSS|01 CSS简介CSS的3种书写方式注释

CSS简介 什么是CSS CSS(Cascading Style Sheet),层叠样式表 或者 级联样式表,简称样式表。CSS的作用 主要用来给 HTML网页 设置外观或者样式。CSS的语法规则 h1 {属性:属性值}注意:1. CSS代码是由选择器和一对括号…

解析MySQL的数据类型:理解每种类型及其应用

MySQL是一种流行的关系型数据库管理系统,被广泛应用于Web应用开发中。在数据库设计的过程中,选择合适的数据类型至关重要,因为它不仅影响存储效率和数据完整性,还影响数据库操作的性能和查询速度。本文将详细介绍MySQL支持的各种数…