i2c 调试OLED之无ACK

时间:2024-05-23 19:20:23

最近在tiny4412上调试一款oled,此oled具有SPI 和I2c两种接口,可以供选择。

SPI接口的很快调试好了。但是I2c接口的却调试了很久没有调试出来。

通过逻辑分析仪抓波形,发现是oled不回复ack信号,导致所有的初始化命名都没有发送出去。

i2c 调试OLED之无ACK

但是为什么没ACK信号呢?

按淘宝店家提供的资料,硬件上已经确认无误。

无奈用公司的小开发去试试,也是用的硬件i2c,竟然可以点亮。但是抓波形,也是没有ack信号。

这里就体现出差别了。不同的芯片I2c控制器,可能对ack信号的处理不太一样,比如tiny4412就必须要有ack信号,否则后面的数据就不发直接丢弃。但是公司的小开发板,对ack信号的要求就不强烈,没有ack它也继续下发信号,因此公司的板子可以正常点亮oled。而我的板子则不能。

那问题回到为什么没有ack。只能查阅oled的芯片手册。

i2c 调试OLED之无ACK

意思是选I2C接口的时候,D2和D1需要短接。

i2c 调试OLED之无ACK

意思是SDA in 和 SDA out 必须短接,否则不会产生ack。那么去检查一下淘宝店设计的电路图。

i2c 调试OLED之无ACK

果然D1和D2中间的r8是NC,板子上什么也没接。气人的是淘宝店家的图上还特意点明R8可以不接,所以也一直在误导我。

因此需要把R8 贴0欧姆电阻,或者直接短接,那么我就直接短接。

i2c 调试OLED之无ACK

ACK正常出现,在tiny4412上也正常点亮。

总结:这么个小模块耽搁了好几天时间,实在不应该,应该早点查看芯片手册,检查原理图。

            逻辑分析仪对调试这种外设很好用,能快速定位到问题所在。

            在查明没有ack的时候,且从机I2C地址配置正确,应该早点怀疑是oled器件本身的问题,查oled器件本身的硬件设计,供电等方面问题。