当前位置: 首页 > news >正文

四问带你搞懂 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)&#xff1…...

useRef有什么用?

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

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学习(五)——账号密码的存取》一文已经能满足一般应用的情况。但实际商业应用也会存在如下的情况:用户提交的账号密码,能在本地的保存的账号密码匹配上,或者能在远端服务认证中匹配上&#xff…...

Js如何判断两个数组是否相等?

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

vim-test 支持的 50+ 测试框架全览:从 JavaScript 到 Rust 的完整支持

vim-test 支持的 50 测试框架全览:从 JavaScript 到 Rust 的完整支持 【免费下载链接】vim-test Run your tests at the speed of thought 项目地址: https://gitcode.com/gh_mirrors/vi/vim-test vim-test 是一款让开发者以思维速度运行测试的 Vim 插件&…...

StructBERT中文相似度模型企业应用指南:对接CRM、知识库、智能客服系统的完整集成方案

StructBERT中文相似度模型企业应用指南:对接CRM、知识库、智能客服系统的完整集成方案 1. 企业级文本相似度应用概述 在当今企业数字化运营中,文本相似度计算技术正成为提升业务效率的关键工具。StructBERT中文相似度模型基于百度先进的大模型技术&…...

实战部署指南:高效配置SadTalker音频驱动人脸动画的完整方案

实战部署指南:高效配置SadTalker音频驱动人脸动画的完整方案 【免费下载链接】SadTalker [CVPR 2023] SadTalker:Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 项目地址: https://gitco…...

5分钟掌握MPC Video Renderer:解锁专业级HDR视频渲染的完整解决方案

5分钟掌握MPC Video Renderer:解锁专业级HDR视频渲染的完整解决方案 【免费下载链接】VideoRenderer RTX HDR modded into MPC-VideoRenderer. 项目地址: https://gitcode.com/gh_mirrors/vid/VideoRenderer MPC Video Renderer是一款功能强大的开源DirectSh…...

FlowScope:一款注重隐私的SQL数据血缘分析工具

最近团队接手了一个新的数据仓库项目,这个项目已经开发了很多年,包含了几百个表和几万行 ETL 存储过程代码。 目前我们经常面临的问题包括: 这个字段从哪里来?这张表被哪些存储过程用到了?修改这个字段会影响哪些 ET…...

DDR3自刷新机制在低功耗系统中的优化实践

1. DDR3自刷新机制的核心原理 DDR3内存的自刷新机制是低功耗设计中的关键环节。简单来说,它就像给手机设置飞行模式——系统暂时不需要频繁访问内存时,DRAM芯片会自己管理数据刷新工作,而不是依赖外部控制器持续发号施令。我在设计智能手表项…...

打破音乐枷锁:ncmdumpGUI让你的NCM文件重获自由

打破音乐枷锁:ncmdumpGUI让你的NCM文件重获自由 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你下载的音乐其实并不属于你。当你在网易云音乐客户…...

搜索时代的命名战略:如何在亚马逊规避“品牌失语症”

在亚马逊这个由算法与关键词统治的商业世界里,一个名字的恰当与否,直接决定了品牌是“响亮宣言”还是“沉默失语”。许多名字如同《时代》或《财富》杂志,在传统语境中或许优雅,但在需要极致精准的数字货架上,却可能因…...

QT多线程定时任务实战:QTimer与QThread的高效协作与主线程通信

1. QT多线程定时任务的核心挑战 在开发桌面应用程序时,经常会遇到需要定期执行某些任务的场景,比如每隔5秒采集一次传感器数据、每分钟检查一次系统状态等。这时候很多开发者会直接在主线程中使用QTimer,但这样做有个致命问题:如…...

3090显卡跑ChatGLM-6B LoRA微调:从内存溢出到完美运行的避坑指南

3090显卡实战:ChatGLM-6B LoRA微调显存优化全攻略 当24GB显存的RTX 3090遇上60亿参数的ChatGLM-6B模型,显存管理就像在悬崖边跳舞。本文将分享如何在这块消费级旗舰显卡上完成LoRA微调的全套实战方案,从版本控制到梯度优化,从错误…...