工具/软件:
e2e.ti.com/.../controller.txte2e.ti.com/.../target.txte2e.ti.com/.../libI2C_5F00_C2C.ce2e.ti.com/.../testRoleManager.c
要求:
-
两个基于 AM2634 的卡使用 I2C 进行通信。
-
系统 一个卡用作控制器(主卡) 和 另一个作为目标(从器件) 手动覆盖。
-
角色 可以在运行时动态切换 。
-
通信方式 双向 :
-
控制器发送命令或请求。
-
目标接收、处理和响应
-
所以,对于这个,
最初、当两个卡都上电时、它们都充当 I2C 目标(从器件)。 根据它们的物理位置或 ID、其中一个稍后成为 I2C 控制器(主器件)、另一个仍然是目标。
要检测是否存在其它卡、系统使用两种机制:
-
I2C 上的检测信号消息 :
控制器每 2 秒发送一次检测信号消息。
目标以心跳回复进行响应。 -
基于 GPIO 的连接 :
GPIO 引脚会持续切换。
如果存在对等卡、则另一卡会检测到这种切换。
角色切换逻辑:
-
如果卡在定义的时间段内没有从控制器接收到任何心跳信号、它会将其角色从目标切换到控制器。
-
如果某个卡已经充当控制器并开始接收来自另一个控制器的心跳消息、则该卡会自行降级并切换回目标。
-
只要卡继续从控制器接收有效的心跳信息、即使它具有较低的位置 ID、卡也将保持为目标。
当前状态:
-
该逻辑已通过 CAN 协议成功验证。 角色按照预期逻辑正确切换。
-
不过、通过 I2C:
-
有时角色切换工作 1 或 2 次、然后失败。
-
在某些情况下、切换角色后不会触发回调。
-
有时它根本不起作用。
-
-
该问题似乎与 I2C 事务未被清除或驱动器未正确复位有关。
其他注意事项:
-
libI2C_C2C.cmaster.txtvcc.txt附加了代码文件 () 和日志文件(和)以进行分析。 -
问题是与 I2C 通信和开关有关;同一逻辑在 CAN.e2e.ti.com/.../4503.libI2C_5F00_C2C.ce2e.ti.com/.../4503.testRoleManager.c 上工作正常
-
该测试设置旨在验证开关在集成最终逻辑之前是否正常工作。
问题描述:
-
动态 I2C 角色切换不一致 —有时它会正确发生,但有时它会失败。
-
在上 目标端
writeCount和readCountI2C 事务结构的字段是 未更新 转移值开始。 -
相反、这些字段 保留其初始化值 、即使在事务完成后也是如此。
-
- 使用 AM263x MCU+ SDK 10.00.00、 MCU_PLUS_SDK_am263x_10_00_00_35 版本