Other Parts Discussed in Thread: AM62L
器件型号: AM62L
我正在开发基于 TI AM62L、使用 K3 供应商内核的 BeagleBadge 6.12.57-vendor-edge-k3。 我正在进行扩展 drivers/i2c/busses/i2c-omap.c 、因此 AM62L I2C 适配器可以注册 Linux I2C 从器件后端、并且仍然会暂时充当 I2C 主器件/启动器。
即时测试设置在同一电路板上使用两个 AM62L OMAP I2C 实例:
- J6 是
/dev/i2c-1、控制器实例20010000.i2c - J7 是
/dev/i2c-3、控制器实例20020000.i2c - J6 和 J7 物理短接在一起
- Linux
i2c-slave-testunit用作目标/从器件后端 - 未连接用于该测试的外部 I2C 器件
经验证的工作案例:
- J6 目标位于
0x30、J7 启动器:真 SMBus block-proc-call 工作正常 - J7 target at
0x30、J6 initiator:true SMBus block-proc-call 工作正常 - 重复启动版本读取在单目标反向拓扑情况下有效
剩余的故障情况是两个适配器同时支持目标:
- J6 目标在处
0x30 - J7 目标在处
0x31
在两个目标都注册并绑定后、任一启动方向都会超时:
i2ctransfer -f -y 3 W1@0x30 0x00 i2ctransfer -f -y 3 R1@0x30 i2ctransfer -f -y 1 W1@0x31 0x00 i2ctransfer -f -y 1 R1@0x31
所有四个命令都超时、即使每个单目标拓扑都工作正常。
已测试的驱动程序更改:
- 添加了 OMAP/
reg_slaveunreg_slave管道 - 在返回到从器件监听模式之前清除过时的主器件状态
- 当带有已注册从属后端的适配器启动主传输时、从从属 IRQ 掩码切换到正常主 IRQ 掩码
- 在 AM62L/IP-v2 上、
I2C_IRQENABLE_CLR由于I2C_IRQENABLE_SET仅设置位、因此在写入下一个角色所需的中断屏蔽之前清除
上次更改确实消除了以前的过时 IRQ 掩码问题:
- 之前:失败的双侦听器日志显示已累积
ie=0x661f - 现在:日志显示已清除的掩码、如
ie=0x61f和ie=0x601f Transmit underflow不再观测到器件
但双重侦听器的情况仍然在两个方向上都超时。
相关的当前内核状态为:
components/ti-linux-kernel:eb09330dc065Clear OMAP IRQ enables before role mask writescomponents/armbian-build:b17e72e32Add OMAP IRQENABLE clear patch- 已测试伪迹:
6.12.57-S22fb-D0000-Pb163-C2876Hb496-HK01ba-Vc222-Be8e3-R448a - 已引导的内核:
Linux beaglebadge 6.12.57-vendor-edge-k3 #27 SMP PREEMPT Tue May 5 16:45:44 UTC 2026 aarch64 GNU/Linux
问题:
对于 AM62L OMAP I2C IP-v2、当同一物理 I2C 总线上的两个控制器都处于目标/从监听模式、但其中一个控制器可能暂时成为主器件时、是否还需要额外的序列?
具体来说:
- 当将支持目标的适配器从从从监听模式切换到主模式时、除了
I2C_IRQENABLE_CLR清除、清除状态、设置MST和随后恢复从监听模式之外、是否还有另一个必须重置的寄存器或 FIFO 状态? - 是否预计具有自身地址启用的 OMAP I2C 控制器会干扰另一个控制器对同一总线上不同目标地址的事务?
-
OA当适配器启动主传输时、应该禁用/目标寻址、然后再恢复? - 将两个 OMAP I2C 实例用作同一物理总线上的多控制器参与者时、是否存在 AM62L 特定的限制?
附加/粘贴的复制日志包括:
- 确切的命令
uname -a- 目标后端状态
- 每个的退出状态
i2ctransfer dmesg包含omap_i2c、、Transmit underflowArbitration lost、超时、、slave irqisr-master、和master-enter
目标不是调试 Linux 从设备测试单元后端本身。 单目标情况证明了目标模式和真 SMBus 块 proc-call 在两个方向上都有效。 只有当两个 OMAP 适配器同时在短接的 J6/J7 总线上注册为支持目标的侦听器时、才会出现此问题。
内核补丁位于 https://github.com/just-kitting/ti-linux-kernel/tree/badge-snake
