本文将介绍我在I2C通信中遇到的一个故障案例。
中文说明请参阅网站。
如下图所示,通过I2C通信连接存储器ABC1与存储器ABC2,并在执行写操作后立即执行读操作。结果显示,ABC1通信正常,但ABC2通信未能成功。原因在于tBUF(开始新传输前总线必须保持空闲的时间)的最小值存在差异。
ABC1 tBUF = 1.2μs
ABC2 tBUF = 4.7μs
针对此情况,我们采取了在执行写操作后等待 5μs 再执行读操作的措施。
I2C总线规范 UM10204的 tBUF 时间
Standard-mode 4.7μs
Fast-mode 1.3μs
Fast-mode Plus 0.5μs
根本原因在于,未查阅规格书及数据手册,就错误地认为标准模式下ABC1为1.2μs,因此ABC2也应为1.2μs。
建议大家不要像我这样误以为I2C通信都相同,而应仔细确认数据手册的规格。此外,如果MCU和HAL支持时钟拉伸功能,建议使用该功能。

OSS-ECAL website:
是电子元件抽象层开源软件的缩写。Open-Source Software for Electronic Components Abstraction Layer

我将为您提供对您有用的电子元件的OSS,请随意使用。
此致,敬礼。


被折叠的 条评论
为什么被折叠?



