[STM32F0] I2C 在满负载状态下读写偶有停顿像总线在犹豫

[复制链接]
889|18
Uriah 发表于 2025-11-15 07:17 | 显示全部楼层 |阅读模式
I2C 跑满速后读写某些时刻会停一下,像总线短暂在“思考”。逻分看 SDA 有几次拉低时间略长。主机任务不重,怀疑是仲裁或时钟拉伸导致的,但没有特别明确的触发条件。
Clyde011 发表于 2025-11-15 07:19 | 显示全部楼层
如果你用中断模式,可以换成 DMA 试一下。
公羊子丹 发表于 2025-11-15 07:21 | 显示全部楼层
072 的 I2C 对负载还是挺敏感的,你换个设备试下会不会好一点。
周半梅 发表于 2025-11-15 07:21 | 显示全部楼层
时钟拉伸确实是大概率,你检查从机是不是响应慢了。
帛灿灿 发表于 2025-11-15 07:22 | 显示全部楼层
我曾经 SDA 上因为焊点不好导致偶发性长低电平。
童雨竹 发表于 2025-11-15 07:24 | 显示全部楼层
你试试关掉 NOSTRETCH 模式,看能不能复现。
万图 发表于 2025-11-15 07:24 | 显示全部楼层
试试把速度降一点,差异会很明显。
Wordsworth 发表于 2025-11-15 07:25 | 显示全部楼层
I2C 的上拉电阻很关键,你换成 2.2K 或 4.7K 对比一下。
Bblythe 发表于 2025-11-15 07:26 | 显示全部楼层
也可能是主机在切换方向时没处理好 ACK。
Pulitzer 发表于 2025-11-15 07:27 | 显示全部楼层
你抓波形时再放大一点,可能能看到边缘抖动。
 楼主| Uriah 发表于 2025-11-15 07:28 | 显示全部楼层
有些 I2C 设备内部忙时确实会拉住总线,这很正常。
海滨消消 发表于 2025-11-18 16:46 | 显示全部楼层
检查从机代码,在中断或 DMA 完成回调中及时清除时钟拉伸标志
海滨消消 发表于 2025-11-18 16:46 | 显示全部楼层
优化从机数据处理逻辑,减少拉伸时间。
豌豆爹 发表于 2025-11-18 17:47 | 显示全部楼层
在主机代码中启用超时检测
classroom 发表于 2025-11-18 18:48 | 显示全部楼层
可能I2C 速率接近硬件极限,总线电容导致信号边沿变缓,从机响应时间不足。
cr315 发表于 2025-11-18 19:48 | 显示全部楼层
调整 I2C 速率,降低总线速率
duo点 发表于 2025-11-18 17:49 | 显示全部楼层
在 STM32CubeMX 或寄存器中配置 I2C_TIMING,增加 PRESC 分频或调整 SCLH/SCLL 比值,为总线留出更多裕量。
elephant00 发表于 2025-11-18 16:49 | 显示全部楼层
I2C 总线需外部上拉电阻,典型值 4.7kΩ。若电阻过大,RC 充电时间增加,导致信号上升沿变缓,从机可能无法及时响应。
flycamelaaa 发表于 2025-11-18 22:50 | 显示全部楼层
减少中断延迟,考虑使用 DMA 模式 传输数据,减少 CPU 干预,避免软件处理延迟。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

192

主题

8420

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0