四问带你搞懂 I3C
大家都知道 I2C ,它的全称是 Inter Integrated Circuit ,那 I3C 又是什么?
I3C 是 MIPI (Mobile Industry Processor Interface)移动产业处理器接口联盟推出的,全称是 Improved Inter Integrated Circuit ,顾名思义,I3C 就是改进型的 I2C。
I3C 仍然采用 2 根通信线,一根数据线 SDL ,一根时钟线 SCL ,I3C 向下兼容 I2C ,也就是说 I3C 的总线下是可以挂载传统的 I2C 接口的(但是不兼容 10 bit 的 I2C 扩展地址),I3C 的典型应用电路类型如下图所示:
图 1 I3C 的典型应用电路类型
为什么要有 I3C ?
常见的板间通信总线有 I2C 、SPI 、UART 、I2S 等,这类总线常用于 ADC 、DAC 、传感器等外设通信。随着物联网的应用越来越广,涌现各类传感器,比如温度、气压、心率和陀螺仪等。挂载传感器的激增,对传输功耗、性能、速率的要求也相应的提高,这就暴露出了传统总线的部分缺陷,主要问题有以下几点:
一、功耗问题:I2C 、SPI 、UART 设计之初未考虑到功耗问题,而对于物联网多传感器的应用来说,对功耗的要求比较严苛。
二、I2C 、SPI 、UART 都只支持单一的主机。
三、I2C 、SPI 是同步通信,必须由主机(处理器)发起时钟进行通信,从机没办法主动传输数据。
四、I2C 、SPI 一般需增加中断线通知主机来读取数据,随着传感器数量的增加,会占用大量的 IO 口和中断资源。
五、UART 是异步通信,虽然没有三 、四的缺点,但是它是点对点通信,一个总线只能挂一个从设备。
六、对于 I2C 来说,传输速率受限。
基于上述的问题,MIPI 主导并提出了 I3C 总线,可以解决现有的问题。
I3C 跟 I2C 的区别在哪?
下面我将通过一个表格让大家直观地看到它们的区别。
表1 I3C 和 I2C 的区别
通过表格我们不难看出 I3C 的特点有:
- 支持带内中断:
概念:In-Band Interrupt (IBI)。传统的I2C 需要额外的 PIN 线才能实现中断电平请求,会占用 IO 和中断资源,I2C 传感器是需要主机实时读取数据,当有新的数据时, I2C 是无法主动发起通讯要求主机读取的,而 I3C 则是应用了带内中断,它的处理过程由主机和从机共同决定, I3C 传感器可以通过带内中断来让主机读取数据。
过程:I3C 从机将 SDA 线拉低然后等待主机将 SCL 线拉低来回应 ACK ,当主机将 SCL 拉低以后同时将 SCL 时钟提供给从机,从机享有 SDA 的控制权,随后从机通过 SDA 发送带有自己动态地址的数据(带有值为 1'b1 的 RnW 位),即强制要求 1'b1 位为 1,否则主机则认为此次请求无效,在经历了这些过程后,就完成了一次 IBI 请求。
- 支持故障检测:I3C 协议中为主机和从机分别指定了一组必须方法,针对从设备中七种错误类型和主设备中两种错误类型的检测和恢复方法。更详细的介绍可以参考连接:I3C协议Single Data Rate(SDR)模式研读(七):SDR错误检测和恢复方法_sdr common error check pl von s--CSDN博客
- 支持多个主机:接在 I3C 总线上的辅助主机,可以给 I3C 主机发送请求成为当前的主机,需要经过原主机的响应,释放原主机对总线的控制权,由原来的辅助设备承担当前主设备,并控制 I3C 总线。
- 支持热插拔:热插拔即是允许 I3C 从机在主机完成初始化后才接入 I3C 总线,并且可以再为其分配动态地址,这个机制允许从机进入低功耗状态,在有需要的时候才唤醒。
- 支持动态寻址:区别于 I2C 静态地址,动态地址能够解决地址重复的问题。
- 支持多种通信模式:向下兼容 I2C 、SDR 模式、HDR 模式。
那么 I3C 到底是怎么工作的呢?
(下面介绍以 SDR 模式为例)
一、读写数据:
I3C SDR 模式下读写数据与 I2C 很相似,
写数据:
图 2 I3C 写数据时序
我们可以看到 I3C 主机写入数据的第 9 位是作为奇偶校验,而 I2C 的第 9 位是 ACK / NACK ,这个第 9 位被称作 T-bit 位(为“过渡”)。
读数据:
图 3 I3C 读数据时序
在 I2C 中,从机到主机的第 9 个数据位是主机的 ACK / NACK ,相比之下,I3C 则可以通过回传 T-bit 的值来允许从设备结束回传,并允许主机终止读取。
二、动态地址分配的设备要求
为了支持动态地址分配程序,在开始程序之前,连接到 I3C 总线上的每个 I3C 设备都应该以下面两种方式之一来标识:
1. 设备有一个静态地址,(假设主机已经知道该地址)主机可以使用此静态地址,例如 I2C 所规定的地址。
2. 设备具有 48 位的临时 ID 。这 48 位 ID 由以下部分组成。
图 4 I3C 48 位设备 ID 的组成
48位 ID 由三部分组成:
[47:33] 位是 MIPI 制造商 ID (15位),其最高位有效位被丢弃,仅使用15 个最低有效位。
[32] 位:临时 ID 类型选择(一位,1'b1:随机值,1'b0 :供应商固定值)
[31:16] 位:部件 ID :此 16 位字段的含义留给设备供应商定义。
[15:12] 位:实例 ID :此 4 位 字段中的值用来区分一条总线上的不同的 ID。
[11:0] 位:此 12 位字段的含义具有自身定义或者其他含义。例如:更深的设备特征,是什么样的传感器等。
三、带动态地址分配的总线初始化顺序
在此之前我们先了解一下 I3C 的通用命令代码(CCC),它是全局支持的命令,可以直接传输到特定的 I3C 从设备,也可以同时传输到 I3C 所有从设备。CCC 命令协议仅使用 I3C SDR 模式进行格式化,并且始终以 I3C 广播地址 (7'h7E)开头,也就是说,在启动或者重复启动之后,CCC 的命令地址始终都为 7'h7E。
一旦分配了 I3C 从机,所有 I3C 从机都将识别 7'h7E 广播地址和它们自己的动态地址。
而 I3C 的设备要保持通信功能,说明它们都应该在活动状态下,这就涉及到设备状态的配置,即 Enter Activity State 0-3 (ENTAS0 – ENTAS3)。
图 5 ENTAS 的配置时序
在激活后,主机需要一个或全部 I3C 设备清除 / 复位其主机分配的动态地址,清除后,这些设备为动态地址分配程序做好准备,即 Reset Dynamic Address Assignment (RSTDAA)。
图 6 RSTDDA 的配置时序
为地址分配做好准备后,要通过命令允许 I3C 主设备设置或获取一个从设备的最大数据写入长度(以字节为单位)。该最大写入长度不影响广播 CCC 的数据写入长度。设置 / 获取最大写长度值在两个字节传输,最高有效字节(MSb)首先传输。最大写入长度可以设置为的最小值是 8 ,即 Set / Get Max Write Length ( SETMWL / GETMWL)。
仅当从设备实现的任何专用写入消息或者任何扩展写入 CCC 支持每个消息的最大数据字节的可变限制时,才需要此 CCC 。
当然 I3C 的初始化指令还有其他的更多,可以通过阅读指令集了解,参考链接为大家送上:I3C协议通讯详解-CSDN博客
在介绍完上面几个概念以后,相信大家也比较好理解下面这个总线初始化流程图了:
图 7 I3C 总线初始化配置流程图
可能光这么说大家还是觉得有点抽象,下面我将第二点、第三点和代码、波形结合起来方便大家理解。以 NXP LPC865 EVK 板间通信为例子,I3C 初始化配置部分代码如下:
图 7 LPC865 I3C 传输初始化
在发送广播地址后,I3C 回传的设备 ID 如下所示:
图 8 I3C 从机回传48位的设备 ID
四、带内中断和其仲裁机制
在 I3C 中,带内中断有优先级控制,每个从设备的优先级都在其从设备地址中编较低的地址具有较高的优先级,也就是说这个地址更快地被处理,这是 I3C 仲裁机制 的结果,值为 0 的地址优先于值为 1 的地址,我们可以通过下图例子更直观地看出区别。
可以通过对比看出 7'h5F 将赢得仲裁。
图 9 I3C 带内中断仲裁机制
注:图 1、图 5、图 6、图 7 来源于 I3C 总线技术概述。
图 2、图 3、图 4、图 9 来源于 NXP Semiconductor。
参考资料:
I3C协议Single Data Rate(SDR)模式研读(四):总线初始化和动态地址分配模式Bus Initialization and Dynamic Address Assigned Mode_i3c动态地址分配冲突-CSDN博客
i2c我们用得很多,i3c又是什么?_i3c和i2c区别-CSDN博客
I3C协议通讯详解-CSDN博客
I3C协议Single Data Rate(SDR)模式研读(七):SDR错误检测和恢复方法_sdr common error check pl von s--CSDN博客
登录大大通,了解更多详情,解锁1500+完整应用方案,更有大联大700+FAE在线答疑解惑!
相关文章:

四问带你搞懂 I3C
大家都知道 I2C ,它的全称是 Inter Integrated Circuit ,那 I3C 又是什么? I3C 是 MIPI (Mobile Industry Processor Interface)移动产业处理器接口联盟推出的,全称是 Improved Inter Integrated Circuit &…...

fastjson解析自定义get方法导致空指针问题
背景 为了在日志中把出入参打印出来,以便验证链路和排查问题,在日志中将入参用fastjson格式化成字符串输出,结果遇到了NPE。 问题复现 示例代码 public static void main(String[] args) {OrganizationId orgId new OrganizationId();N…...

github新手用法详解
GitHub是一个非常强大的版本控制工具,它为程序员提供了一个便捷的方式来管理代码、协作开发和参与开源项目。但对于新手来说,可能会觉得GitHub的使用有些复杂。因此,本篇文章将详细介绍GitHub的基本用法,帮助新手快速上手并充分利…...

MAC电脑系统清理空间免费版软件CleanMyMac X2024
大家好,我是那个总是被苹果电脑“内存已满”提示搞得焦头烂额的专业博主。如果你也像我一样,在使用Mac时经常遭遇卡顿、慢吞吞的情况,那么今天的Mac清理空间妙招分享绝对适合你! CleanMyMac X全新版下载如下: https://wm.makedi…...

notepad++运行python闪一下就没啦
问题:Notepad直接快捷键运行Python代码,出现闪一下就没了 解决措施: ①点击菜单运行(Run) --> 运行(Run)弹出的对话框 ②把 cmd /k python "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT 粘贴进入这个对话框内 ③点击保存&a…...

基于springboot+vue的课程答疑系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...

【工具类】非 sudo 运行 docker
非 root 运行 docker 命令 sudo groupadd docker sudo usermod -aG docker $USER newgrp docker sudo chown root:docker /var/run/docker.sock sudo chown "$USER":"$USER" /home/"$USER"/.docker -R sudo chmod grwx "$HOME/.docker&quo…...

力扣49.字母异位词分组
题目描述: 49. 字母异位词分组 难度 中等 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea"…...

git操作--->在远程删除了某个分支,但本地使用git branch -r的时候还是会显示某个分支存在是什么原因
💕又迷糊了哈哈,以为自己命令执行错了,结果可能是缓存的原因:💕 😂如果你发现使用 git branch -r 命令显示了一个远程没有的分支,这可能是由以下几个原因造成的:😂 缓存…...

合并Windows电脑的不同分区(不同的盘)的方法
本文介绍在Windows操作系统的电脑中,将磁盘上的不同分区(例如E盘与F盘)加以合并的方法。 最近,想着将新电脑的2个分区加以合并;如下图所示,希望将E盘与F盘合并为一个分区。本文就介绍一下实现这一需求的具体…...

web前端安全性——iframe安全问题
1、概念 iframe安全问题可称作界面劫持,像点击劫持、拖放劫持、触屏劫持。就是我们的点击,拖放,触屏操作被劫持了,而去操作了其它的透明隐藏的界面。 **原理是利用透明层iframe,使用了CSS中的opacity或z-index等属性,…...

从零开始学习Netty - 学习笔记 - NIO基础 - 网络编程: Selector
4.网络编程 4.1.非阻塞 VS 阻塞 在网络编程中,**阻塞(Blocking)和非阻塞(Non-blocking)**是两种不同的编程模型,描述了程序在进行网络通信时的行为方式。 阻塞(Blocking)࿱…...

useRef有什么用?
看一下官网定义 useRef是一个React Hook,它能帮助引用一个不需要渲染的值 这句话透露出一个信息,不需要渲染的值可以用useRef引用,那需要渲染的值用什么引用呢?当然是useState了,需要渲染的值指的就是状态嘛࿰…...

vue3中,ref()、reactive()、computed()、watch() 和 watchEffect()的区别
ref()、reactive()、computed()、watch() 和 watchEffect() 是 Vue 3 中常用的响应式处理函数,它们的主要区别如下: ref():ref() 函数用于将一个普通的 JavaScript 值转化为响应式对象。它返回一个具有 value 属性的对象,我们可以…...

Java基于SpringBoot的校园轻博客系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

webstorm光标变成方块解决办法_webstorm光标变粗不能换行
webstorms光标变了 键盘上的insert是切换的快捷键,敲insert就可以来回切换了...

从计网的角度讲明白什么是网关
网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连…...

如何选择最适合的图纸加密软件?安秉网盾软件用户体验及性价比
安秉网盾图纸加密软件是一款功能强大的图纸加密工具,具有以下特点和优势: 全盘加密:安秉网盾采用先进的加密算法,能对文件、文件夹、磁盘等数据进行全面加密,确保数据在存储和传输过程中的安全性。 监控与审计&#x…...

Spring Security学习(六)——配置多个Provider(存在两种认证规则)
前言 《Spring Security学习(五)——账号密码的存取》一文已经能满足一般应用的情况。但实际商业应用也会存在如下的情况:用户提交的账号密码,能在本地的保存的账号密码匹配上,或者能在远端服务认证中匹配上ÿ…...

Js如何判断两个数组是否相等?
本文目录 1、通过数组自带方法比较2、通过循环判断3、toString()4、join()5、JSON.stringify() 日常开发,时不时会遇到需要判定2个数组是否相等的情况,需要实现考虑的场景有: 先判断长度,长度不等必然不等元素位置其他情况考虑 1…...

Salesforce顾问如何拿到更高的薪水?
顾问的角色已经在Salesforce生态系统存在了一段时间,随着Salesforce针对职业发展的Trailhead培训模块的发布,该角色的热度又达到了新的浪潮。越来越多人走上了Salesforce顾问这条职业道路。 当然其薪资水平也非常可观,据调查,美国…...

关于React中的状态和属性
在React中,状态(State)和属性(Props)是两个核心概念,用于管理组件的数据和传递信息。下面详细描述它们的区别: 状态(State): 定义: 状态是组件内部…...

【面试题】谈谈MySQL的索引
索引是啥 可以把Mysql的索引看做是一本书的目录,当你需要快速查找某个章节在哪的时候,就可以利用目录,快速的得到某个章节的具体的页码。Mysql的索引就是为了提高查询的速度,但是降低了增删改的操作效率,也提高了空间…...

python工具方法 45 基于ffmpeg以面向对象多线程的方式实现实时推流
1、视频推流 参考基于ffmpeg模拟监控摄像头输出rtsp视频流并opencv播放 实现视频流的推流。 其基本操作就是,安装视频流推流服务器,ffmpeg,准备好要推流的视频。 命令如下所示:ffmpeg -re -stream_loop -1 -i 风景视频素材分享.flv -c copy -f rtsp rtsp://127.0.0.1:554/…...

HarmonyOS Stage模型基本概念讲解
本文 我们来说harmonyos中的一种应用模型 Stage模型 官方提供了两种模型 一种是早期的 FA模型 另一种就是就是 harmonyos 3.1才开始的新增的一种模型 Stage模型 目前来讲 Stage 会成为现在乃至将来 长期推进的一种模型 也就是 无论是 现在的harmonyos 4.0 乃至 之后要发布的 …...

python自动化接口测试
前几天,同组姐妹说想要对接口那些异常值进行测试,能否有自动化测试的方法。仔细想了一下,工具还挺多,大概分析了一下: 1、soapui:可以对接口参数进行异常值参数化,可以加断言,一般我们会加http…...

深度学习????????
深度学习是人工智能领域的一个重要分支,它利用神经网络模拟人类大脑的学习过程,通过大量数据训练模型,使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来,深度学习在多个领域取得了显著的进展,尤其在自然…...

人工智能技术学习专栏文章汇总—帮助你入门深度学习
人工智能大潮已来,stay hungry, stay foolish! 人工智能技术学习类文章汇总,帮助你入门深度学习。 人工智能学习与实训笔记(一):零基础理解神经网络-CSDN博客 人工智能学习与实训笔记(二)&am…...

线性代数:向量空间
目录 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2...

Pormise---如何解决javascript中回调的信任问题?【详解】
如果阅读有疑问的话,欢迎评论或私信!! 本人会很热心的阐述自己的想法!谢谢!!! 文章目录 回调中的信任问题回调给我们带来的烦恼?调用过早调用过晚调用的次数太少或太多调用回调时未能…...