(资料图)
一、实际应用开发中遇到的“坑”
(1)不要使用逻辑分析仪的自动分析功能,这款软件BUG太多,波形的分析还是需要自己根据时序来,不要依赖工具;
(2)在I2C的时序通信过程中,从机必然是要有ACK信号回复的,不然整个通信是不可能进行下去。之前以为ACK并非从机发送的,即使没有从机也可以在GM5的引脚上观察到完整的I2C时序图,卡在这里很久。如果没有从机,逻辑分析仪只能抓取到主机两次寻址的波形。
(3)关于I2C从设备地址的问题,之前在开发中是直接把从设备地址写上去,后面发现无论使用任何方法都无法启动设备,一度卡了很久,后面在问题的分析过程中发现原厂的驱动会把地址左移一位。
所以我们需要把设备地址右移一位后再使用:
(4)关于外设的电源供电问题,一定要严格按照说明来,比如RTC module的供电是5V,OLED屏幕的供电是3.3V,那么就不能使用GM5的3.8V VDD引脚进行供电,会提高bug出现的几率或者无法启动外设。可以借用DCPOWER SUPPLY进行供电。 (5)由于我拿到手的RTC和OLED只是外设,没有芯片手册和说明书,所以在确定外设的从设备地址这件事情上耽误了很长时间。但是同一类型的外设的从设备地址也是有规律的,比如时钟RTC的地址一般是0X68,OLED的地址一般是0X3C或者0X3D,红外传感器的地址是0X60。具体的常见I2C从设备地址可以参考文章https://www.arduino.cn/thread-84222-1-1.html,一篇非常完整的总结。
二、I2C开发总结
如果遇到了故障,一般而言排故的方法遵循以下步骤: (1)首先检查硬件本身,如果主设(GM5)或者外设(OLED屏幕和RTC时钟模块)本身就有问题,模块本身烧掉了肯定无法实验成功,所以要确保硬件本身没有问题,对外设的检查可以使用替换法或者读寄存器的地址。 (2)第二步就是检查线路的连接,线路是否正确连接。一般先连线GND,在连接数据线(I2C、SPI通信数据线),确认无误后最后再连线VCC进行供电。同时请确保杜邦线的良好。 (3)最后才是软件层次的检查。先要确保你的参数是正确,比如设备地址;然后是对空间的申请释放、野指针的不当操作、一级指针二级指针的错误使用;对故障的定位需要使用大量log信息打印来锁定故障点在哪里,也可以使用ResearchDownload的DBG功能进行调试。
原文标题:二、I2C开发总结
文章出处:【微信公众号:爱搞研究的阿灿】欢迎添加关注!文章转载请注明出处。