I3C协议学习总结
I3C可以使用推挽式节省功耗速度更快SDR 单数据传输速率 SCL时钟频率可达到12.5MHz所有符合I3C标准的设备都必须要拥有一个总线特性寄存器1. I3C 协议模式概览 (Section 5)文档首先列出了 I3C 支持的几种主要通信模式SDR (Single Data Rate) 模式这是最基础、默认的模式详见第 5.1 节。HDR (High Data Rate) 高速模式注意I3C Basic 版本不支持此类模式HDR-TSP三元符号纯总线模式。HDR-TSL三元符号兼容总线模式兼容旧设备。HDR-DDR双倍数据速率模式。关键特性I3C 总线始终在 SDR 模式下初始化和配置永远不会直接从 HDR 模式启动。如果需要进入 HDR 模式必须先从 SDR 模式切换。主题 (Subject)章节 (Section)总线配置 / 总线通信5.1.1 / 5.1.2总线空闲 (Idle) 与 自由 (Free) 状态5.1.3.4 / 5.1.3.2动态地址分配 (DAA)5.1.4热插拔机制 (Hot-Join)5.1.5带内中断 (In-Band Interrupt)5.1.6通用命令代码 (CCC)5.1.9错误检测与恢复5.1.103. SDR 模式详解 (Section 5.1)这部分是 I3C 的核心描述了它与传统 I2C 协议的关系默认与基础SDR 模式是 I3C 总线的默认工作状态用于主从设备间的私有消息传输以及进入其他模式或执行通用命令CCC。与 I2C 的兼容性I3C SDR 在规程上与 I2C 非常相似。共存性I3C 设备、I3C 从设备和传统的 I2C从设备 可以同时存在于同一条总线上。互不干扰I2C 主设备发出的流量会被 I3C 从设备忽略。I3C 主设备发出的流量通常不会被传统 I2C 从设备“看见”因为 I3C 的时钟频率更高I2C 设备的**尖峰过滤器Spike Filter**会过滤掉这些高频信号。设备角色与总线拓扑图中展示了一个典型的 I3C 总线结构包含两根信号线SDA数据线和 SCL时钟线。总线上支持四种主要角色I3C Main Master (主控制器) 整个总线的“大脑”负责启动通信、管理总线时序以及分配地址。I3C Secondary Master (辅助控制器可选的) 具有双重身份图中以蓝粉渐变色表示。在平时它是主控制器的从设备但在特定条件下它可以请求接管总线变成临时的主控制器。I3C Slave (I3C 从设备) 纯粹的从设备支持 I3C 的高级特性如带内中断。Legacy I2C Slave (传统 I2C 从设备) 老式的 I2C 设备。I3C 总线设计了兼容模式允许这些设备挂载在同一条线上。一个功能完整的 I3C 总线系统其最小硬件组合只需要 一个主控制器Main Master 和 一个从设备Slave。Secondary Master是可选的。核心机制动态地址分配 (Dynamic Addressing)全员分配 每次系统从掉电状态启动Start-up时主控制器Main Master必须为总线上的每一个设备分配一个唯一的“动态地址”包括它自己。优先级排序 动态地址不仅用于寻址还决定了带内中断 (In-Band Interrupts, IBI) 的优先级。地址数值越小通常优先级越高。信息同步 当主控制器完成地址分配后必须通过 公共命令代码 (CCC) 将这些分配结果同步给总线上的“辅助控制器”确保全场信息一致。对传统 I2C 设备的特殊处理文档提到由于传统的 I2C 设备使用的是固定的静态地址主控制器必须在“上电前”或启动初期通过查表或配置先获取这些 I2C 设备的固定地址以避免地址冲突。1. 管理权谁才是真正的“老大”从前三行职责可以看出Main Master主控制器拥有绝对的统治权Dynamic Address Assignment动态地址分配只有 Main Master 能够主动给全总线设备发“身份证”。Secondary Master 虽然能管仲裁但在初始状态下没有分配地址的权力标记为N。Self Dynamic Address Assignment自我地址分配这是 Main Master 的特权。Hot-Join热插拔当新设备中途加入总线时Main Master 必须支持为其分配地址而 Secondary Master 则是“可选”支持。2. 控制能力Master 与 Slave 的鸿沟表格中间部分展示了 Master无论主副与 Slave 的本质区别SDA ArbitrationSDA 仲裁所有 Master 角色都必须支持仲裁处理多个设备同时想说话的情况而从设备Slave则不需要关心这个。Memory for Slaves Addresses存储从设备信息Master 必须有“记账”能力记住总线上所有从设备的地址和特性寄存器。Slave 只需要管好自己不需要记别人的信息。I3C 设备中的 I2C 特性开关当一个 I3C 设备Slave运行在 I3C 总线上时它必须有选择地“屏蔽”掉一些老旧的 I2C 特性必须禁用的功能 (Not Allowed / Shall disable)Clock Stretch时钟拉伸I2C常用此方法让 Master 等待但在高速的 I3C 中这会导致时序混乱因此严禁使用。50ns Spike Filter50ns 尖峰过滤器在全速 I3C 模式下这个滤除噪声的过滤器会把合法的快速信号也滤掉所以必须关闭。必须支持的功能 (Required)Fm Speed快速模式增强版I3C 设备必须至少兼容 I2C 的 1MHz 速率。不支持的功能 (Not Used)10-bit Extended AddressI3C 仅支持 7 位地址寻址。HS/Ufm Speed这些过时的 I2C 高速/超快模式在 I3C 总线上不被采用。核心逻辑一旦从设备识别到总线上的 I3C 特殊广播地址7h7E它就应该自动关闭那些不被 I3C 兼容的 I2C 特性。如果你把一个只懂 I2C 、完全不懂 I3C 的老芯片Legacy I2C-Only Device挂在 I3C 总线上它必须符合以下三类之一否则会拖累整个总线Index 0带有 50ns 过滤器。这类设备最安全因为它会自动忽略 I3C 的高速切换信号被视为噪声。Index 1不带过滤器但能耐受 I3C 的最高时钟频率。Index 2不带过滤器也不耐受高频。这类设备风险最高可能导致总线锁死。I3C 协议中非常关键的特性寄存器Characteristics Registers没有I3C特性寄存器的设备则不能被连接到普通的I3C总线上。1. BCR (Bus Characteristics Register) —— “总线属性名片”每个 I3C 合规设备都必须拥有一个 BCR。它告诉主控制器该设备在总线通信层面的能力例如该设备是否支持 HDR高数据速率 模式。它是否能请求成为 Master主控如果是辅助控制器。它是否支持 IBI带内中断。它是否支持 Bridge桥接 功能。2. DCR (Device Characteristics Register) —— “设备类型名片”每个 I3C 合规设备也必须拥有一个 DCR。它定义了设备的具体类型。主控制器通过这个寄存器知道自己面对的是什么设备例如它是一个加速度计、陀螺仪还是一个显示控制器这有助于系统自动配置对应的驱动程序实现类似“即插即用”的效果。3. LVR (Legacy Virtual Register) —— “老旧设备虚拟名片”这是专门为传统 I2C 设备准备的。虚拟性 因为老旧的 I2C 芯片硬件里根本没有 I3C 的寄存器所以这些信息通常是“虚拟”的存在于主控制器的软件驱动或固件中。作用 它告诉 I3C 主控制器这个老设备是属于哪种 I2C 类型对应你之前看到的 Table 5 中的 Index 0/1/2以及它是否具有 50ns 过滤器等。为什么这些寄存器这么重要如果不读取这些寄存器主控制器就像在黑盒里操作它不知道某个设备是否能抗住 $12.5\text{MHz}$ 的时钟频率可能会导致老设备死机。它不知道哪个设备有紧急消息要发中断优先级。一句话总结 BCR 决定了“怎么聊”协议特性DCR 决定了“聊什么”设备功能而 LVR 则是为了带上那些“听不懂新语言”的老前辈。任何连接到I3C总线上的I3C设备都有一个只读的寄存器BCR比特位 (Bit)名称 (Name)取值 (Value)详细含义说明BCR [7:6]Device Role(设备角色)2b002b012b10/1100:I3C 从设备 (Slave)01:I3C 主设备 (Master)包括主控和辅助主控10/11:保留给未来 MIPI 规范使用BCR [5]Reserved0保留位默认必须为 0BCR [4]Bridge Identifier(桥接标识)010:普通设备1:桥接设备例如 I3C 转 SPI/UART 的网关BCR [3]Offline Capable(离线能力)010:始终在线必须响应总线命令1:允许不响应命令如处于极低功耗模式但保留动态地址BCR [2]IBI Payload(中断数据载荷)010:随后的带内中断 (IBI) 不带额外数据字节1:随后的 IBI 包含 1 个或多个数据字节由 T-Bit 控制结束BCR [1]IBI Request Capable(中断请求能力)010:不支持发起带内中断1:支持主动发起带内中断请求 (IBI)BCR [0]Max Data Speed Limitation(最大速率限制)010:无额外速度限制1:有限制。主控必须发送GETMXDS指令来确认具体速率限制任何连接到I3C总线上的I3C设备都有一个只读的寄存器DCR比特位 (Bit)名称 (Name)描述与功能 (Description)DCR [7:0]Device ID设备类型代码这是一个 8 位的只读值用于定义设备的具体类别如传感器类型。取值范围0到255共有 255 个可用代码由 MIPI 联盟统一分配。默认值8b0(0x00)Generic Device通用设备未特定分类的设备。常见示例传感器/复合设备具体的数值代表不同的硬件例如*加速度计 (Accelerometer)*陀螺仪 (Gyroscope)*磁力计 (Magnetometer)*复合设备 (Composite Devices)常见的 DCR 代码举例参考 MIPI 规范十六进制值 (Hex)设备类别 (Device Class)0x00通用设备 (Generic Device)0x01传感器总线扩展器 (Sensor Hub / Bus Expander)0x02加速度计 (Accelerometer)0x03陀螺仪 (Gyroscope)0x04磁力计 (Magnetometer)0x41桥接设备 (Bridge)比特位 (Bit)名称 (Name)取值 (Value)详细含义说明LVR [7:5]Legacy I2C Only(传统索引)3b000(Index 0)3b001(Index 1)3b010(Index 2)核心兼容性索引对应之前 Table 5 提到的分类。其主要定义了设备是否带有 50ns过滤器以及对 SCL 时钟频率的耐受度。LVR [4]I2C Mode Indicator(模式指示)010:I2CFm (快速模式增强版最高 1MHz1:I2CFm (快速模式最高 400kHzLVR [3:0]MIPI Reserved(保留/功能描述)15 个可用代码虽为保留位但也可用于描述传感器系统中的设备能力和功能。LVR 的运作机制预先配置 在总线启动前控制层如 CPU 上的驱动程序必须先根据原理图和器件手册手动建立这些老设备的 LVR 信息并告知 I3C Main Master。同步辅助控制器 如果总线上有辅助控制器Secondary MasterMain Master 需要通过 DEFSLVS定义从设备列表这一公共命令CCC把这些 LVR 信息同步给它。安全保护 通过 LVR主控知道某个 I2C 设备是否能承受 I3C 的 SDR 频率。如果不耐受主控在与其它 I3C 设备高速通信时会更加谨慎。I3C总线从启动到传输的整个过程是什么?1. 上电与静态状态 (Power-on Static State)当系统刚上电时I3C 总线处于 I2C 兼容模式。主控行为 Main Master 占据控制权。由于此时总线上所有设备都还没有“动态地址”主控只能通过设备预留的 静态地址如果有的话或者 广播地址 7h7E 来打招呼。从机状态 I3C 从机此时表现得像个 I2C 从机等待被分配身份。2. 进入 I3C 模式与枚举 (ENTDAA)这是 I3C 最具特色的阶段即 动态地址分配 (Dynamic Address Assignment)。广播指令 主控发出公共命令代码 ENTDAA (Enter Dynamic Address Assignment)。地址分发1. 主控通过仲裁机制识别总线上的每一个设备利用设备唯一的 PID、BCR 和 DCR。2. 主控逐一为这些设备指定一个 7 位的动态地址。3. 此时每个设备才真正拥有了在 I3C 总线上“交谈”的合法身份。结束标志 当主控发现没有更多设备响应时结束该流程。3. 特性读取与总线配置 (Characteristics Gathering)分配完地址后主控需要知道每个人的“脾气”和“本事”读取 BCR/DCR 主控会向每个动态地址发送请求读取它们的 BCR看能不能发中断、跑多快和 DCR看它是传感器还是控制器。配置 LVR 如果总线上挂了传统 I2C 设备主控会根据预设的 LVR虚拟寄存器信息确定在后续通信中如何兼容这些老设备。同步 如果有 Secondary Master主控会通过 DEFSLVS 把这份“全家谱”同步给它。4. 正常数据传输阶段 (Data Transport)身份和能力确认后进入常规作业模式。I3C 支持两种主要的传输方式SDR 模式标准数据速率 类似 I2C 但更快最高 12.5MHz。支持传统的读写操作。HDR 模式高数据速率 当需要海量数据交换时主控发出特定的 ENTASx 指令进入 HDR 模式如 DDR 模式此时数据吞吐量翻倍。5. 事件触发与中断 (In-Band Interrupts, IBI)在传输间隙从机不再是被动等待它可以主动发起请求带内中断 (IBI) 传感器如果发现数据异常可以拉低 SDA 线申请中断。热插拔 (Hot-Join) 新加入总线的设备如刚插上的模块可以申请让主控给它分配地址。主控移交 (Mastership Request) 辅助控制器可以请求主控把“指挥权”交给自己。I3C协议中master发送direct CCC也需要先发送广播地址吗即使是直接命令Direct CCC即只想和某一个特定的 Slave 通信Master 也必须先发送广播地址 7h7E。在 I3C 的逻辑中7h7E 不仅仅是一个“群发地址”它更像是一个**“进入 I3C 命令模式”的准入证**。1. 广播地址与写位 (The Wake-up)Master 发出 START然后发送 7h7E W (0xFC)。目的 告诉总线上所有的 I3C 设备包括那个你要找的特定 Slave接下来的内容是 I3C 的公共命令请大家保持关注。响应 所有 I3C 设备都会回复 ACK。2. 发送 Direct CCC 代码 (The Command)紧接着Master 发送 Direct CCC 代码范围在 0x80 - 0xFE 之间。识别 所有 I3C 设备看到代码大于等于 0x80就知道这是一个“点名”指令接下来会有一个特定的目标地址。示例 如果你想读取某个设备的特性寄存器你会发送 0x87 (GETBCR)。3. 重复起始信号与设备地址 (The Target)这是 Direct CCC 与 Broadcast CCC 的核心区别点Master 发出一个 Repeated START (Sr)。紧接着发送 目标 Slave 的动态地址 (Dynamic Address) R/W 位。筛选 此时除了那个被点名的 Slave 之外其他所有 I3C 设备都会意识到“原来不是找我的”从而退出监听回到备战/休眠状态。I3C协议中master如何分配动态地址在 I3C 协议中Master 发送 公共命令代码Common Command Codes, CCC 是管理总线的核心手段。这些命令就像是主控官向全场或特定设备下达的“行政指令”。1. 发送广播地址 (7h7E)所有的 CCC 操作都必须以广播地址 7h7E开头。原因 这个特殊的地址在 I2C 时代是保留地址在 I3C 中它被定义为“通知所有 I3C 设备准备听取命令”。操作 Master 发出 START 信号随后发送 7h7E W写位。由于7‘h7E对于I2C设备是保留地址所以I2C设备不可能拿这个地址作为自己的静态地址所以在I3C总线上I2C设备对0x7E的地址是无感的。2. 发送特定的 CCC 代码 (Command Byte)在地址被确认为广播后Master 紧接着发送 1 个字节的 命令代码。主控Main Master首先向总线发出 ENTDAA (0x07) 公共命令代码 (CCC)。此时所有 I3C 设备包括从机和辅助主控收到命令后都会进入“地址分配准备状态”。3. 仲裁与身份识别 (Arbitration Identification)这是核心步骤。当多个从机同时尝试获取地址时它们必须通过总线仲裁机制来决定谁先“说话”PID (Provisioned ID) 比较 每个 I3C 设备都有一个全球唯一的 48 位 PID。竞争机制 所有未分配地址的从机同时开始在 SDA 线上传输自己的 PID。由于 SDA 是“线与”逻辑只要有一个设备输出 0线就是 0数值越小的 PID 在竞争中越占优势。锁定胜者 经过逐位比较最终只有一个从机能成功将完整的 PID 发送给 Master。4. 读取特性 (BCR/DCR Retrieval)Master 拿到了获胜从机的 PID 后会通过 GETBCR 和 GETDCR 指令读取该设备的 BCR总线特性和 DCR设备特性。这个过程让 Master 明确该从机的“身份”与“能力”。5. 地址分配 (Assignment)Master 根据识别到的设备信息从可用的动态地址池中选择一个地址通过特定的指令发送给该从机。从机接收到地址后切换到该动态地址并进入“已配置”状态从而退出后续的地址分配竞争。常用的几个CCC代码CCC 分为两大类主控通过代码的数值范围来区分广播类 (Broadcast CCC, 0x00 - 0x7F) 这一条指令发出去全场所有设备都要同时执行例如 ENTDAA 开启地址分配。直接类 (Direct CCC, 0x80 - 0xFE) 这类指令后会跟着特定的设备地址只有被点名的设备才响应例如 GETBCR 读取某个从机的特性。序号命令代码 (Hex)命令名称 (Full Name)类型 (Type)核心功能描述 (Functionality)10x07ENTDAA(Enter Dynamic Address Assignment)Broadcast(广播)分配身份证这是主控发出的“报数”指令。所有没有地址的 I3C 设备开始通过自己的 48 位 PID 进行仲裁最终由主控为每个胜出者分配一个唯一的动态地址。20x00(B)0x80(D)ENEC(Enable Events Command)Both(广播/直接)开启权限告诉从机可以开始“说话”了。它用来使能从机的特定功能最常见的是开启带内中断 (IBI)和热接入 (Hot-Join)请求权限。30x87/0x88GETBCR / GETDCR(Get Bus/Device Characteristics)Direct(直接)摸底调查主控针对某个特定地址读取它的“名片”。通过 BCR 了解其通信能力如是否带 Payload通过 DCR 了解其设备类型如是加速度计还是陀螺仪。40x89/0x8ASETMWL / SETMRL(Set Max Write/Read Length)Direct(直接)商定边界主控与特定从机约定单次数据传输的最大长度。这能防止大数据包撑爆从机的缓存确保高速通信时的内存安全。50x06RSTDAA(Reset Dynamic Address Assignment)Broadcast(广播)推倒重来清空总线上所有从机已分配的动态地址。通常在系统发生严重错误、主控重启或需要重新扫描总线设备时使用。I3C协议的带内中断是针对master而言还是slave而言?带内中断In-Band Interrupt, IBI是由从机Slave发起由主机Master响应的。它是 I3C 协议相对于 I2C 最重要的进化之一。在传统的 I2C中如果从机有紧急情况比如传感器检测到数据超标它必须通过一根**额外的硬件引脚GPIO去中断 CPU而在 I3C 中从机直接在现有的数据线SDA**上“举手”示意。1. 从机Slave视角主动权对于 Slave 而言IBI 是一种权利。不再被动 Slave 不需要死等 Master 来轮询Polling自己这大大降低了功耗Slave 可以长时间休眠直到有事才叫醒 Master。发起条件 当总线处于空闲Idle状态时Slave 通过将 SDA 线拉低来向 Master 发出请求。优先级 如果多个 Slave 同时想发中断地址越小的 Slave 优先级越高会赢得仲裁。2. 主机Master视角管理责任对于 Master 而言IBI 是一种义务和配置任务。使能控制 Master 可以通过公共命令CCC来开启或关闭某个 Slave 的中断权限ENEC/DISEC 指令。响应流程Master 检测到 SDA 被拉低知道有人要“插话”。Master 提供时钟SCL让 Slave 把自己的动态地址发出来确认是谁在请示。Master 根据 BCR 寄存器你之前看的那张表的位 [2] 判断这个 Slave 只是打个招呼还是要顺便传几个字节的数据Payload。决策 Master 可以选择立刻读取 Slave 的数据也可以发一个“拒绝NACK”让它稍后再试。I3C协议是否支持10bit寻址或者10bit地址分配
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2466484.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!