个人中心 - GD32 MCU 开发者社区

2328919156
LV.1
2328919156 LV.1
2026年8月31日
2 评论
活跃 时间:2026-09-08
194 次浏览
0
0
2
雪坤杰宇
时间:2026-09-08

建议按下面几个方向排查

1,先把I2C频率降到100kHz,确认SCL、SDA上拉电阻、电平和上升沿是否正常,24LC64最高支持400kHz,先用标准模式排除时序裕量问题

2,上电后增加一段初始化等待,再进行第一次读取,如果上电前存在EEPROM写操作,还需要确认内部写周期已经结束,不能仅靠固定延时或连续读取两次碰运气,24LC64支持通过ACK轮询判断写周期是否完成

3,重点检查BSP_EEPROM_Receive和BSP_EEPROM_ReadHalfWord的实现,确认发送地址、重复起始、接收字节、NACK、STOP以及超时退出是否完整,特别是读取2字节时的ACK配置和最后一个字节的NACK处理

4,你现在循环中每次调用ReadHalfWord,地址按2递增,建议先改成一次随机读连续读取整个数据区进行对比,如果连续读稳定而逐个HalfWord读不稳定,就可以重点定位到多次事务切换、STOP完成等待或底层状态机处理

5,读取头数据后再读取正常,注释头数据后失败,也可能是前一次读取改变了EEPROM内部地址指针,或者额外的通讯和延时掩盖了初始化问题,不能直接说明必须先读取头数据,需要确认ReadHalfWord每次是否重新发送完整的16位存储地址,而不是依赖上一次读取后的地址指针

6,建议把底层函数返回值、I2C错误标志、超时位置和失败时的总线状态打印出来,同时抓一组成功与失败的完整波形,对比究竟是器件地址无ACK、存储地址阶段异常,还是读取数据阶段异常

暂无内容

相关内容会显示在这里,期待您的分享与发现。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

确定删除吗?
删除后无法恢复,请确认后操作!
编辑