☰
RK3576 I3C总线实战:从I2C到I3C的10倍性能跃迁与DTS配置指南
2026/9/30 5:18:36 网站建设 项目流程

1. 从 I2C 到 I3C:一次总线协议的代际跃迁

第一次在 RK3576 的 datasheet 里看到 I3C 的时候,我下意识觉得这不过是 I2C 换了个马甲。毕竟名字只差一个字符,引脚还是两根线,SCL 加 SDA,看起来跟用了四十年的 I2C 没什么本质区别。但真正把逻辑分析仪挂上去抓了一轮波形,再对着 DTS 把控制器节点配通之后,我才意识到这个判断错得离谱。I3C 不是 I2C 的小改款,它是 MIPI 联盟主导的一次总线协议代际重构,目标很明确:在保留 I2C 两根线、低引脚成本优势的前提下,把带宽、功耗管理和设备管理能力整体拉高一个档次。

标题里说“快 10 倍”,这个说法需要拆开看。I2C 标准模式 100kHz,快速模式 400kHz,快速模式+ 1MHz,超快速模式 5MHz 但实际生态支持很差。I3C 的 SDR(Single Data Rate)默认就能跑到 12.5MHz,HDR(High Data Rate)模式下理论带宽可以到 33Mbps 以上。拿 12.5MHz 对 1MHz 来算,确实是十倍以上的量级。但“快”只是表象,真正让 I3C 值得关注的是它解决了一堆 I2C 时代遗留的工程痛点:中断引脚泛滥、设备地址冲突、上拉电阻功耗、热插拔支持缺失、带内中断(IBI)无法实现等等。

RK3576 这颗 SoC 在 I3C 支持上做得比较完整,它内部集成了 I3C 控制器,兼容 I2C 模式,可以在同一组引脚上根据设备类型灵活切换。这意味着你在做硬件设计时,可以把传统 I2C 传感器和新的 I3C 器件挂在同一条总线上,通过 DTS 配置区分对待。对于做嵌入式 Linux 的工程师来说,这既降低了硬件改版成本,也给了软件层一个平滑过渡的路径。这篇文章我会从协议特性、RK3576 控制器行为、DTS 配置实操、常见问题排查几个维度,把 I3C 这件事讲透,适合正在选型、调试总线、或者单纯想搞清楚 I3C 到底值不值得上的嵌入式开发者参考。

2. I3C 与 I2C 的核心差异拆解

2.1 为什么 I2C 需要被替代:四个绕不开的工程瓶颈

I2C 诞生于 1982 年,设计初衷是给电视芯片之间做低速控制通信。那个年代没有那么多传感器,没有摄像头模组,没有复杂的电源管理 IC,100kHz 的速率绰绰有余。但四十年过去,手机、平板、车载、工业设备里的传感器数量翻了上百倍,I2C 的短板就暴露得非常彻底。

第一个瓶颈是带宽天花板。I2C 快速模式 400kHz,按 7 位地址加读写位加 ACK 加数据字节来算,实际有效吞吐大概在 30KB/s 到 40KB/s 之间。一个 6 轴 IMU 以 1kHz 输出 12 字节数据,加上寄存器地址和 ACK 开销,400kHz 总线已经接近饱和。如果同时挂上气压计、磁力计、环境光传感器,总线仲裁和排队延迟会直接拖垮实时性。

第二个瓶颈是中断引脚数量爆炸。I2C 器件要通知主机“数据准备好了”或者“有事件发生”,只能靠一根独立的 GPIO 中断线。你有 8 个传感器,就得占 8 个 GPIO。在引脚资源紧张的 SoC 上,这是非常奢侈的消耗。I3C 引入了IBI(In-Band Interrupt,带内中断),设备可以直接在 SDA 线上发起中断请求,不需要额外引脚。这一项就能省下大量 GPIO。

第三个瓶颈是上拉电阻的功耗与速率矛盾。I2C 是开漏输出,靠上拉电阻把线拉高。速率越高,上升沿要求越陡,上拉电阻就得越小,静态功耗就越大。400kHz 下用 2.2kΩ 上拉,总线空闲时如果 SDA 被某个设备拉低,电流就是 VDD 除以 R,3.3V 除以 2.2kΩ 约 1.5mA。多总线系统里这个功耗累积起来很可观。I3C 改用推挽输出(Push-Pull)配合开漏的混合模式,在高速传输阶段用推挽驱动,上升沿由驱动器主动拉高,不再依赖小阻值上拉,功耗和速率矛盾被大幅缓解。

第四个瓶颈是设备地址冲突和热插拔。I2C 的 7 位地址空间只有 112 个可用地址(去掉保留地址),而且很多传感器厂商固定地址或者只给两三个可选地址。挂两个同型号传感器就得用 I2C 多路复用器(比如 PCA9548)来隔离,增加成本和布线复杂度。I3C 引入了动态地址分配(DAA,Dynamic Address Assignment),主机在初始化阶段给每个设备分配唯一地址,从根本上解决冲突。同时 I3C 支持设备热插拔,新设备接入后主机可以重新枚举。

2.2 I3C 的协议层增强:不只是快

I3C 在协议层做了几件 I2C 做不到的事,这些才是它真正的价值所在。

推挽与开漏的混合驱动是 I3C 速率提升的物理基础。I2C 全程开漏,上升沿靠 RC 充电,速率受限于总线电容和上拉阻值。I3C 在 SDR 高速阶段切换到推挽模式,SCL 和 SDA 都由驱动器主动驱动高低电平,边沿陡峭,12.5MHz 才能跑得稳。但推挽模式有个前提:同一时刻只能有一个设备驱动总线,否则就是电源对地短路。I3C 用严格的时序和仲裁机制来保证这一点,仲裁阶段仍然用开漏,仲裁结束后胜出的设备切推挽。

带内中断 IBI让设备可以在不占用额外引脚的情况下向主机发信号。IBI 的机制是设备在总线空闲时拉低 SDA,主机检测到后发起一个特殊的读事务,设备把自己的地址和中断信息发回来。这比 I2C 的“主机轮询”模式高效得多,也比独立中断线省引脚。实际用起来,IBI 的延迟在微秒级,对于大多数传感器事件通知场景完全够用。

动态地址分配 DAA是 I3C 初始化的核心流程。上电后,所有 I3C 设备处于“待分配”状态,主机通过 ENTDAA(Enter Dynamic Address Assignment)命令逐个枚举设备,读取设备的 PID(Provisional ID)和 BCR/DCR 信息,然后分配一个 7 位动态地址。这个过程类似 USB 枚举,但更轻量。DAA 完成后,设备就用新地址通信,不再有冲突问题。

通用命令码 CCC是 I3C 的“管理通道”。主机可以通过 CCC 读写设备的寄存器、设置总线速率、使能/禁用 IBI、进入低功耗模式等。CCC 是 I3C 区别于 I2C 的重要标志,它让总线管理从“纯数据搬运”升级为“带管理平面的通信协议”。

HDR 模式是 I3C 的带宽扩展选项。HDR-DDR 模式下,数据在 SCL 的上下沿都采样,等效速率翻倍。HDR-TSP 和 HDR-TSL 是三元符号编码模式,理论带宽更高,但协议复杂度和生态支持度目前还不如 SDR。实际项目里,SDR 12.5MHz 已经能满足绝大多数传感器和存储器的需求,HDR 更多是给摄像头控制、大容量 EEPROM 这类高带宽场景预留的。

2.3 速率对比:10 倍到底怎么算出来的

把速率这件事说清楚,需要区分“时钟频率”和“有效吞吐”两个概念。

模式时钟频率理论峰值吞吐实际有效吞吐(含开销)
I2C 标准100kHz100kbps约 60-70kbps
I2C 快速400kHz400kbps约 250-300kbps
I2C 快速+1MHz1Mbps约 600-700kbps
I3C SDR12.5MHz12.5Mbps约 10-11Mbps
I3C HDR-DDR12.5MHz25Mbps约 20Mbps
I3C HDR-TSP12.5MHz33.3Mbps约 28Mbps

从 I2C 快速模式 400kHz 到 I3C SDR 12.5MHz,时钟频率提升 31 倍。但 I3C 的协议开销比 I2C 小,因为 I3C 支持批量传输和更紧凑的帧格式,所以有效吞吐的提升倍数比时钟频率倍数更可观。标题说“快 10 倍”,如果拿 I2C 快速+ 1MHz 对 I3C SDR 12.5MHz,再考虑协议效率,10 倍是一个保守但合理的说法。

注意:I3C 的速率优势在单次小数据量传输时体现不明显,因为 DAA 和 CCC 初始化有固定开销。真正拉开差距的是连续批量传输场景,比如从 I3C EEPROM 读大块数据,或者从高采样率 IMU 连续读 FIFO。

3. RK3576 的 I3C 控制器特性与硬件设计要点

3.1 RK3576 I3C 控制器能力概览

RK3576 是瑞芯微面向中高端 AIoT 和边缘计算场景的一颗 SoC,它的 I3C 控制器在规格上属于“够用且务实”的定位。根据公开的 TRM 和内核驱动代码,RK3576 的 I3C 控制器支持以下特性:

  • 兼容 I2C 模式,可以通过 DTS 配置为纯 I2C 控制器使用
  • 支持 I3C SDR 模式,最高时钟频率 12.5MHz
  • 支持动态地址分配 DAA
  • 支持带内中断 IBI
  • 支持通用命令码 CCC
  • 支持推挽和开漏混合驱动
  • 支持总线速率切换(ODR 到 SDR)
  • 内置 FIFO,减少 CPU 中断频率

从驱动层面看,RK3576 的 I3C 控制器在 Linux 内核里对应的是i3c-master框架下的平台驱动,设备树节点需要正确配置寄存器基地址、时钟、中断、引脚复用等参数。内核版本建议 6.1 以上,因为 I3C 子系统在 5.x 后期到 6.x 才逐渐稳定,早期版本对 DAA 和 IBI 的支持有缺陷。

3.2 硬件设计:上拉电阻、总线电容与引脚复用

I3C 的硬件设计和 I2C 有相似之处,但细节要求更严格。

上拉电阻方面,I3C 在开漏阶段仍然需要上拉,但阻值可以比 I2C 高速模式大一些,因为推挽阶段不依赖上拉。典型值在 1kΩ 到 4.7kΩ 之间,具体取决于总线电容和速率。如果总线上只有 I3C 设备,且跑 12.5MHz SDR,建议用 1kΩ 到 2.2kΩ。如果总线上混挂 I2C 设备,上拉阻值要兼顾 I2C 的上升沿要求,通常取 2.2kΩ 比较稳妥。

总线电容是高速传输的隐形杀手。I3C SDR 12.5MHz 对总线电容的要求比 I2C 严格得多。I2C 快速模式允许总线电容到 400pF,但 I3C 在 12.5MHz 下建议控制在 50pF 以内。每增加一个设备、每延长一厘米走线,电容都会增加。实际布线时,I3C 走线尽量短、尽量直,避免过孔和分支。如果必须挂多个设备,考虑用 I3C 多路复用器或者 Hub 来隔离容性负载。

引脚复用是 RK3576 上需要注意的点。RK3576 的 I3C 引脚通常和 I2C、UART、GPIO 等功能复用,需要在 pinctrl 里正确配置。如果引脚复用配置错误,表现为总线无波形或者波形异常。配置时要确认 pinctrl 节点的 function 和 pins 属性,以及电气特性(驱动能力、上下拉)是否匹配。

电平匹配方面,I3C 设备的工作电压通常是 1.8V 或 1.2V,而 RK3576 的 IO 电压可能是 3.3V 或 1.8V。如果电压不匹配,需要电平转换器。I3C 的电平转换比 I2C 更麻烦,因为推挽模式下双向电平转换器的自动方向检测可能跟不上 12.5MHz 的速率。建议优先选择支持 I3C 的电平转换芯片,或者让 SoC IO 电压和 I3C 设备电压一致。

3.3 I2C 与 I3C 混挂总线的设计取舍

实际项目里,经常遇到“新板子想上 I3C,但手头还有一堆 I2C 传感器”的情况。RK3576 支持在同一组引脚上混挂 I2C 和 I3C 设备,但有几个约束需要提前想清楚。

I3C 总线在初始化阶段会进行 DAA,这个过程对纯 I2C 设备是“不可见”的,因为 I2C 设备不响应 I3C 的 CCC 命令。但 I3C 主机在 DAA 期间会发送一些 I2C 设备可能误判的信号,导致 I2C 设备状态异常。常见的做法是:在 DTS 里把 I2C 设备标记为i2c兼容模式,I3C 控制器在枚举时跳过这些地址,不向它们发送 CCC。但总线速率切换时,I2C 设备可能无法跟随高速模式,所以混挂总线的最高速率通常受限于最慢的 I2C 设备。

如果 I2C 设备数量多、速率要求低,而 I3C 设备速率要求高,更稳妥的方案是物理分离:用两组引脚分别做 I2C 和 I3C 总线。RK3576 的引脚资源比较丰富,多分一组 I2C 通常可行。这样 I3C 总线可以跑满 12.5MHz,不受 I2C 设备拖累;I2C 总线按传统方式管理,互不干扰。

实操心得:混挂总线上,I3C 的 DAA 流程可能导致某些 I2C 设备(尤其是老型号 EEPROM 和 RTC)出现误写。如果发现 I2C 设备在系统启动后寄存器被意外修改,优先怀疑 I3C 初始化阶段的信号干扰。解决办法是在 DTS 里给这些设备加上i2c-scl-has-no-pullup或者调整 I3C 控制器的ddr-mode配置,让初始化信号更“温和”。

4. RK3576 DTS 配置实操:从节点定义到设备挂载

4.1 I3C 控制器节点的完整配置模板

RK3576 的 I3C 控制器在 DTS 里的节点定义,需要包含寄存器、时钟、中断、引脚复用、速率等关键属性。下面是一个基于常见实践的配置模板,具体地址和中断号需要根据实际 SoC 手册调整。

i3c0: i3c@2a000000 { compatible = "rockchip,rk3576-i3c", "snps,dw-i3c-master"; reg = <0x0 0x2a000000 0x0 0x1000>; interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru CLK_I3C0>, <&cru PCLK_I3C0>; clock-names = "i3c", "pclk"; resets = <&cru SRST_I3C0>; reset-names = "i3c"; pinctrl-names = "default"; pinctrl-0 = <&i3c0m0_pins>; i3c-scl-hz = <12500000>; i2c-scl-hz = <400000>; status = "okay"; /* I3C 设备挂载点 */ #address-cells = <3>; #size-cells = <0>; /* 示例:I3C 温度传感器 */ temp_sensor: sensor@0 { reg = <0x0 0x0 0x0>; assigned-address = <0x08>; status = "okay"; }; };

几个关键属性需要解释:

compatible里同时写了rockchip,rk3576-i3c和snps,dw-i3c-master,前者是 SoC 专用兼容字符串,后者是 Synopsys DesignWare I3C 控制器的通用兼容字符串。RK3576 的 I3C 控制器基于 Synopsys IP,所以两个都写可以保证驱动匹配的鲁棒性。

i3c-scl-hz是 I3C SDR 模式的目标时钟频率,这里设为 12.5MHz。i2c-scl-hz是兼容 I2C 模式下的时钟频率,设为 400kHz。控制器会根据设备类型自动切换。

#address-cells = <3>是 I3C 子节点的地址格式要求。I3C 设备的reg属性包含三个 cell:第一个是设备类型(0 表示 I3C 设备,1 表示 I2C 设备),第二个是静态地址或 0,第三个是动态地址或 0。这个格式和 I2C 的#address-cells = <1>不同,配置时容易搞错。

assigned-address是给 I3C 设备预分配的动态地址。如果写 0,控制器会在 DAA 阶段自动分配;如果写非零值,控制器会尝试分配指定地址。在设备数量固定、地址规划明确的场景下,预分配可以简化调试。

4.2 引脚复用 pinctrl 配置

RK3576 的 I3C 引脚复用配置在 pinctrl 节点里,需要指定 function 和 pins。下面是一个示例:

&pinctrl { i3c0 { i3c0m0_pins: i3c0m0-pins { rockchip,pins = <1 RK_PB0 5 &pcfg_pull_none_smt>, <1 RK_PB1 5 &pcfg_pull_none_smt>; }; }; };

RK_PB0和RK_PB1是引脚编号,5是复用功能编号,具体值需要查 RK3576 的 pinctrl 手册。pcfg_pull_none_smt表示无上下拉、施密特触发器使能。施密特触发器对高速信号很重要,可以抑制边沿抖动。

注意:I3C 推挽模式下,引脚不能配置内部上拉,否则会和外部上拉冲突,导致上升沿过冲。如果发现波形有振铃,先检查 pinctrl 里是否误配了pcfg_pull_up。

4.3 I2C 设备混挂的 DTS 写法

如果总线上混挂了 I2C 设备,需要在 I3C 控制器节点下用i2c兼容模式声明。下面是一个混挂示例:

i3c0: i3c@2a000000 { /* ... 控制器属性同上 ... */ #address-cells = <3>; #size-cells = <0>; /* I3C 设备 */ i3c_sensor: sensor@0 { reg = <0x0 0x0 0x0>; assigned-address = <0x08>; }; /* I2C 设备混挂 */ i2c_eeprom: eeprom@1 { reg = <0x1 0x50 0x0>; compatible = "atmel,24c02"; }; i2c_rtc: rtc@2 { reg = <0x1 0x68 0x0>; compatible = "nxp,pcf8563"; }; };

I2C 设备的reg第一个 cell 写0x1,第二个 cell 写 I2C 从机地址(比如 0x50、0x68),第三个 cell 写 0。控制器在 DAA 阶段会跳过这些地址,不发送 CCC 命令。

4.4 内核配置与驱动使能

DTS 配好之后,内核配置里需要使能 I3C 子系统相关选项:

CONFIG_I3C=y CONFIG_I3C_MASTER=y CONFIG_I3C_MASTER_DW=y CONFIG_I3C_DEVICES=y

如果用到 I3C 的字符设备接口做用户态调试,还需要:

CONFIG_I3C_CHARDEV=y

编译后,系统启动时可以通过dmesg | grep i3c查看控制器初始化日志。正常情况会看到类似i3c i3c0: registered with 12.5MHz SDR的输出。如果看到probe failed或者timeout,需要检查时钟、复位、引脚复用配置。

5. 调试与问题排查:逻辑分析仪抓波形与常见故障

5.1 用逻辑分析仪验证 I3C 时序

I3C 调试离不开逻辑分析仪。普通 I2C 分析仪通常不支持 I3C 协议解码,需要选支持 I3C 的型号,或者至少能抓到 12.5MHz 以上数字信号的逻辑分析仪。抓波形时,重点看几个阶段:

总线空闲阶段:SCL 和 SDA 都应该是高电平。如果 SDA 被某个设备拉低不放,说明设备状态异常,可能需要复位。

DAA 阶段:主机发送 ENTDAA CCC 后,会有一系列地址分配事务。波形上表现为主机发送 7 位地址加读写位,设备回 ACK,然后主机发送动态地址。如果某个设备不响应,波形上会看到 NACK。

SDR 数据传输阶段:推挽模式下,SCL 和 SDA 的边沿应该很陡,上升时间在纳秒级。如果上升沿明显变缓,说明上拉不足或者总线电容过大。

IBI 阶段:设备拉低 SDA 发起中断,主机响应后发起读事务。波形上表现为 SDA 在空闲时突然拉低,然后 SCL 开始活动。

实操心得:抓 I3C 波形时,逻辑分析仪的采样率至少要是时钟频率的 5 倍以上,12.5MHz SDR 建议用 100MS/s 以上的采样率。采样率不够会看到混叠,误判时序。

5.2 常见问题速查表

现象可能原因排查方向解决方法
控制器 probe 失败时钟未使能检查clocks和clock-names补全时钟节点,确认 CRU 配置
总线无波形引脚复用错误检查 pinctrl function 编号对照手册修正复用值
DAA 超时设备未上电或复位异常测量设备供电和复位引脚确认设备供电时序,加延时
传输 NACK地址不匹配检查assigned-address改为 0 让控制器自动分配
高速传输误码总线电容过大测量走线长度和挂载设备数缩短走线,减少设备,加 Hub
IBI 不触发设备未使能 IBI检查 CCC 配置通过 CCC 使能设备 IBI
I2C 设备异常DAA 信号干扰检查混挂配置分离总线或调整初始化顺序
波形振铃上拉过强或阻抗不匹配检查上拉阻值和 pinctrl增大上拉阻值,禁用内部上拉

5.3 几个容易踩的坑

第一个坑:把 I3C 设备当 I2C 设备配。I3C 设备的reg格式是三个 cell,I2C 是一个 cell。如果配错,控制器会按 I2C 方式访问 I3C 设备,DAA 不执行,设备无法正常工作。表现是 probe 成功但读写失败。

第二个坑:忽略i2c-scl-hz配置。混挂总线上,如果i2c-scl-hz设得过高(比如 1MHz),I2C 设备可能无法响应。建议混挂场景下i2c-scl-hz不超过 400kHz。

第三个坑:DAA 阶段电源不稳。I3C 设备在 DAA 阶段需要稳定供电,如果电源纹波大或者上电时序不对,DAA 会随机失败。建议在设备供电稳定后再启动 I3C 控制器,或者在 DTS 里加post-init-delay。

第四个坑:逻辑分析仪探头电容影响波形。高速 I3C 总线上,逻辑分析仪探头的几 pF 电容就可能让波形变差。调试时如果发现接上分析仪就出错,断开就正常,说明探头负载过重。可以用低电容探头或者缩短探头地线。

6. 选型建议:什么时候该上 I3C,什么时候继续用 I2C

6.1 I3C 的适用场景

I3C 不是万能药,它的优势场景比较明确:

多传感器融合是 I3C 最典型的应用。手机、AR/VR 设备、机器人里动辄十几个传感器,I2C 的地址冲突、中断引脚、带宽瓶颈全都会遇到。I3C 的 DAA 解决地址问题,IBI 解决中断引脚问题,12.5MHz 解决带宽问题,一套组合拳下来,系统复杂度大幅降低。

高采样率传感器比如 6 轴 IMU、ToF 传感器、毫米波雷达,数据率高,I2C 400kHz 根本喂不饱。I3C SDR 12.5MHz 可以轻松应对,HDR 模式还能更高。

低功耗场景里,I3C 的 IBI 让主机可以长时间休眠,设备有事件时才唤醒主机。这比 I2C 的主机轮询模式省电得多。可穿戴设备、电池供电的 IoT 节点,I3C 的功耗优势很明显。

需要热插拔的场景,比如模块化设备、可更换传感器模组,I3C 的动态枚举能力比 I2C 强太多。I2C 热插拔需要额外的检测电路和软件处理,I3C 原生支持。

6.2 I2C 仍然不可替代的场景

但 I2C 也不会被完全取代,以下场景继续用 I2C 更划算:

低速、少量设备的场景,比如一个 RTC 加一个 EEPROM,I2C 400kHz 完全够用,上 I3C 反而增加复杂度和成本。

生态成熟度要求高的场景,I2C 的驱动、工具、调试经验积累了几十年,I3C 的生态还在完善中。如果项目周期紧、团队对 I3C 不熟,用 I2C 更稳妥。

成本极度敏感的场景,I3C 设备的单价目前普遍高于同类 I2C 设备,而且 I3C 控制器 IP 的授权成本也会体现在 SoC 价格上。如果产品对 BOM 成本卡得很死,I2C 仍是首选。

长距离、高噪声的工业场景,I2C 的开漏加外部缓冲器方案在抗干扰和长线驱动上有成熟方案,I3C 的推挽高速模式在长线上反而容易出问题。这种场景可以考虑 RS-485 或者 CAN,而不是硬上 I3C。

6.3 RK3576 平台上的务实选择

回到 RK3576,我的建议是:新设计优先用 I3C,老设计继续用 I2C,混挂场景谨慎评估。

新设计如果传感器数量超过 4 个,或者有高带宽需求,直接上 I3C。RK3576 的 I3C 控制器支持比较完整,DTS 配置也不复杂,前期多花一两天调试,后期省下的是 GPIO 资源、布线复杂度和软件轮询开销。

老设计升级时,如果原有 I2C 总线工作稳定,没必要为了 I3C 而 I3C。可以在新板子上预留 I3C 引脚,等 I3C 设备生态更丰富时再切换。

混挂场景下,如果 I2C 设备是“必须保留”的,建议物理分离总线。如果必须混挂,把 I2C 设备限制在低速、低优先级、不频繁访问的类型,比如 EEPROM 和 RTC,避免它们拖累 I3C 高速设备的性能。

我个人在 RK3576 上跑 I3C 的体会是:DTS 配置本身不难,难的是硬件设计和调试。上拉阻值、总线电容、引脚复用、电源时序,任何一个环节出问题都会表现为“控制器 probe 成功但设备不工作”。逻辑分析仪是必备工具,没有它基本靠猜。另外,内核版本尽量用 6.1 以上,早期版本的 I3C 子系统在 DAA 和 IBI 上有已知缺陷,升级内核能省很多排查时间。最后再分享一个小技巧:如果 DAA 随机失败,可以在 I3C 控制器节点里加i3c-daa-timeout-ms = <100>,把 DAA 超时从默认值调大,给设备更多响应时间,很多“玄学”问题会消失。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询