RT1064 设备的 I2C2 接口连接到模块 A。在 400kHz 频率下出现通信异常,但在 100kHz 频率下工作正常。
1. 将同一系列中不同型号的模块 B 以 400kHz 的频率连接没有问题。
2. 从波形上看,这相当于主机时钟在连接到模块 A 后被拉伸然后恢复时发生的异常情况。
PS:将该设备的 I2C 驱动程序移植到另一台 1064 设备上,测试模块 A,在 400k 功耗下未发现问题。
原因可能是什么?
图 1 模块 A 逻辑分析仪在 400kHz 下的异常波形
图 2:模块 A 在 100kHz 下的逻辑分析仪波形
图3:模块B在400kHz时的波形
你好@foreverwlh2025 ,
根据您的观察,该问题似乎更有可能是由于两级 ADUM1251 隔离链路导致的 400 kHz I2C 时序裕量不足,而不是模块 A 本身的异常。
即使上升时间在规格范围内,在 RT1064 上,我们仍然建议检查 LPI2C 主侧 400 kHz 配置,特别是 MCFGR2[FILTSCL/FILTSDA] 和 MCCR0/MCCR1,因为 RT1064 上的主同步延迟不仅受上升时间的影响,还受数字滤波器和定时参数设置的影响。
我们建议您阅读项目中实际使用的配置,并将其与 RT1064 参考手册第 47 章中的表 47-5“LPI2C 示例时序配置”进行比较。
请特别检查以下设置是否与您所选时钟条件的示例值相符:
希望对你有帮助
顺祝商祺!
5月
补充信息:昨天在定位方面取得了一些进展:
我们的硬件扩容计划如下:
主板:RT1064--- ADUM1251 3.3V 至 5 V
子板:ADUM1251-模块A 5V转3.3V
经验证,在硬件链路的两层中添加 ADUM1251 后,模块 A 的通信出现异常。但移除 ADUM1251 后,通信在 400k 处恢复正常。造成这种情况的原因可能是什么?
PS:我们的硬件工程师认为 ADUM1251 只会增加通信延迟,不会产生其他影响。
HI
补充信息
1.我们的两位硬件工程师使用示波器检查了故障波形,上升时间符合要求,在 100ns 以上。
2. 我将 I2C 初始化和读写功能驱动程序移植到另一种 RT1064 设备,并测试了模块 A,没有发现任何问题。
下图显示了另一个设备模块 A 的测试逻辑分析仪的波形。
怀疑:
1.如果时钟在拉伸后恢复异常,还有哪些其他原因可能导致这种情况?
2. 是否有专门的功能来设置上次回复中提到的 MCFGR2 等设置?我没有看到在 I2C 初始化过程中需要设置任何接口。
----如果上升时间满足要求,我们是否就不需要考虑这些寄存器设置了?
非常感谢您对我们产品的关注以及对我们社区的使用。
我认为这很可能不是 A 模块的问题,而是该特定 RT1064 LPI2C2 总线上的 400 kHz 时序裕量问题。
在 RT1064 上,LPI2C 时序受总线上升时间、总线负载、上拉电阻和毛刺滤波器延迟的影响。
RT1064RM 参考手册指出,上升时间越大,同步延迟就越高。(参见第 47.3.1.4 章)时序参数)
主故障滤波器 MCFGR2[FILTSCL/FILTSDA] 必须设置,使其延迟保持在最小 SCL 低/高周期以下,RT1064 在 MCCR0/MCCR1 中提供了 400 kbps 定时设置的示例。请查看表 47-5。LPI2C 示例时序配置
因此,如果模块 A 使总线边沿稍微变慢或改变有效负载,则总线可能在 400 kHz 时发生故障,但在 100 kHz 时仍然可以工作。
希望对你有帮助
顺祝商祺!
5月
RT1064 参考手册中没有列出 400 kbps 的 10 MHz LPI2C 功能时钟。
虽然可以使用此时钟生成 400 kbps 波特率,但应根据 I2C 规范仔细验证自动生成的定时参数,特别是 tLOW、tHIGH、建立/保持定时和数据有效定时。
为降低设计风险,建议使用经过验证的时钟源,例如 48 MHz,如参考手册所示。
以下是打印配置。可能需要调整哪个参数?
PS:显然是由于自动接口分配造成的
你好@foreverwlh2025 ,
希望对你有帮助
顺祝商祺!
5月
当前的 I2C 时钟是基于 SDK2_13_0-EVK-MIMXRT1064 板 \ boards \ evkmimxrt1064 \ river_deamples \ lpi2c 目录中的示例配置进行配置的。
#define LPI2C_CLOCK_SELECT (0U)
#define LPI2C_CLOCK_DIVIDER (5U)
CLOCK_SetMux(kCLOCK_Lpi2cMux, LPI2C_CLOCK_SELECT);
CLOCK_SetDiv(kCLOCK_Lpi2cDiv, LPI2C_CLOCK_DIVIDER);
我该如何修改才能获得精确的 8MHz 或 48MHz 频率?(时钟树似乎看不见)
我尝试将频率修改为 60MHz 和 8MHz,但仍然无效。下图中的红色方框显示的是修改后打印的值,这些值与手册中的值不同。
你好@foreverwlh2025 ,
配置 I2C 时钟有多种方法。
建议您尝试 8 MHz 和 60 MHz,因为这两个时钟设置相对容易实现。
我正在使用 SDK 演示版:
"evkmimxrt1064_lpi2c_edma_b2b_transfer_master"
方法一:将 LPI2C 时钟源配置为 60 MHz
只需将时钟分频器设置为 0 即可。
方法二:将 LPI2C 时钟源配置为 8 MHz
使用 MCUXpresso IDE 时钟工具并按如下所示进行配置。选择 OSC_CLK 作为时钟源,并将分频器设置为 3,这将为 LPI2C (I2C) 模块生成 8 MHz 时钟。
希望对你有帮助
顺祝商祺!
5月
如图所示,我尝试修改寄存器设置以匹配参数,但在 60MHz 下性能没有提升;即使是性能良好的模块在 8MHz 下也无法正常工作。