[STM32G0] I2C通信稳定后仍偶发NACK,逻辑分析仪波形正常

[复制链接]
209|15
童雨竹 发表于 2025-11-4 07:20 | 显示全部楼层 |阅读模式
I2C和EEPROM通信偶尔NACK,频率不高但确实存在。逻辑分析仪显示波形干净,时序也没问题。试过拉高电阻、换线、降速,都没根治。感觉像内部状态机某处卡住。
Clyde011 发表于 2025-11-4 07:25 | 显示全部楼层
I2C真的玄学,我都习惯加重试了。
公羊子丹 发表于 2025-11-4 07:25 | 显示全部楼层
我印象G0的I2C有过类似errata,建议查下。
周半梅 发表于 2025-11-4 07:26 | 显示全部楼层
我换成软件I2C之后问题就没了。
帛灿灿 发表于 2025-11-4 07:27 | 显示全部楼层
有可能是STOP条件没及时释放。
 楼主| 童雨竹 发表于 2025-11-4 07:28 | 显示全部楼层
我觉得像EEPROM忙状态响应不及时。
万图 发表于 2025-11-4 07:30 | 显示全部楼层
加个retry机制一般能掩过去。
Wordsworth 发表于 2025-11-4 07:31 | 显示全部楼层
有时候拉高电阻太大也不行,I2C时序会被拖。
Bblythe 发表于 2025-11-4 07:32 | 显示全部楼层
我试过加一点延时反而更稳定。
Pulitzer 发表于 2025-11-4 07:33 | 显示全部楼层
是不是用了DMA模式?DMA会让ACK丢失。
Uriah 发表于 2025-11-4 07:33 | 显示全部楼层
逻辑波形正常不代表内部寄存器没问题。
solty 发表于 2025-11-5 17:02 | 显示全部楼层
确认上拉电阻阻值是否严格符合EEPROM的驱动能力要求。
stormwind123 发表于 2025-11-5 17:02 | 显示全部楼层
用示波器监测VDD和GND的纹波,确保电压波动在±5%以内。若纹波过大,需在电源引脚添加0.1μF陶瓷电容进行去耦,并检查PCB布局是否导致电源路径过长。
七毛钱 发表于 2025-11-5 19:03 | 显示全部楼层
在I2C传输函数中增加对HAL_I2C_ERROR_AF的检测,并实现重试机制
内政奇才 发表于 2025-11-5 18:04 | 显示全部楼层
若使用STM32CubeMX生成的代码,需检查I2C超时设置。建议将超时时间设置为传输周期的2-3倍,避免因过早触发超时而误判为NACK。
海滨消消 发表于 2025-11-5 17:05 | 显示全部楼层
用逻辑分析仪抓取NACK发生前后的完整波形,重点检查:
起始信号的宽度是否≥4.7μs。
停止信号后是否立即释放总线。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

194

主题

6510

帖子

2

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