最新消息:20190717 VPS服务器:Vultr新加坡,WordPress主题:大前端D8,统一介绍入口:关于

【转】浅谈I2C常见的问题

Embedded crifan 1155浏览 0评论

a.完全不能进行读写:

(1) 通信协议不正确:有很多的I2C设备,并不支持所有的I2C协议,同时也不是一个比较标准的I2C设备;软件的通信时序不正确。

(2)I2C设备地址不正确:有很多的I2C设备的地址是可以通过硬件设定的;也有器件资料提供的数据是错误的。

(3)I2C通信线上没有加上拉电阻:由于I2C的从设备的SDA,SCL的PIN是输出开漏的,所以必须加上拉电阻,同时根据I2C设备的数量上拉电阻的大小也会不同。从1K~10K以上,当然不能太大,也不能太小。

(4)I2C设备损坏:有时我们会经常遇到问题时总是认为我们自己在软件上是不是有问题,是不是电路上没有焊接好,实际上都不是,而是器件是坏的。

b.读写失败,不能正确的读写某个地址的数据:

(1)电路干扰:在I2C设备的电源入口处没有加滤波电路,一般入口处加10nF或 0.1uF电容;SDA,SCL线上干扰,没有滤波处理,线上串一几十ohm电阻,对地加几十pF电容;千万别小看这几颗小小的电容!

(2)通信时序:读写是有速度过快,例如在写24C02时,当你用一个字节的方式去写EEPROM时,如果速度过快,前面的数据是不会被写入的,具体的间隔时间没有测试过;由于某种原因,导致读写间过长,例如在通信过程中,被中断打断,同时中断时间过长。

(3)SDA,SCL的输入电平不一致:如果I2C设备既有3.3V也有5V的,上拉电阻最好不要同时接3.3V和5V两组,一定要根据实际情况选择一组。

(4)读写软件的方式的影响:在块读写时,起始的地址和数量是很重要的。例如块写24C02,如果我们想连续写A0页05H~16H地址,我们会发现16H的数据是没有被写入,00H的数据被改了(如果没有记错的话24C02是16字节循环的),原因是在连续读写的过程中,24C02的地址不是从05H自动的加1直到加到16H,而是05H->06H->…->15H->00H。

此文谨献给初级的软硬件工程师,希望在设计使用I2C设备时少走弯路,希望大家补充

转载请注明:在路上 » 【转】浅谈I2C常见的问题

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
61 queries in 0.099 seconds, using 18.90MB memory