如I2C通信不上,可从以下渠道分析:
1. 硬件检查
1). 检查芯片是否BK1080,(此问题在多家出现过.客户用的友商的芯片没换过来)
2) 检查芯片是否虚焊, 电源,地是否按规格书要求接.. MODE脚接地, SEN脚置高或者悬空, DATA 和CLOCK是否被反接.
3) 用万用表或示波器检查电源脚是否有电.
4) 不用关心1080的晶体是否起振, 1080不要晶振数字部分也可以正常工作.
5).用示波器量I2C脚是否有波形. 并注意两个脚是否反了. 如发现高电平不够高, 请加上拉电阻, 根据芯片驱动能力不同,上拉电阻可接1K~47K. 如发现I2C波形毛刺太多,可在I2C两条线上加100P下地电容滤波,但不能太大. 否则会引起波形失真.
2. 软件检查:
1). 用读取chip id的形式来检查, 即读寄存器1, 读出来应为0x1080, 如读chip id 正常则说明I2C底层没问题.
2). 如读回的数据完全不对,如0xff,0xff 或0x00,0x00, 说明I2C根本没通信上,请按上面的硬件检查方法检查电路.
3).如读取chip id只能读到高8位,即读回数据为0x10, 0xff 或 0x10,0x00, 问题应该出在I2C ACK, 因为前面写芯片地址0X80,寄存器地址+读写位0x03时BK1080都正常回了ACK. 当读回0x10时,应该要MCU一方回ACK, 而MCU返回ACK是高电平,导致通信不正常. 此时请检查I2C ACK时序是否正常. 可以与我们的DEMO程序对比一下. 并请特别注意, 在读完前8位0x10后须将DATA口置低, 再置为输入,非常重要. 否则有可能MCU返回的ACK仍然为高.
4). 如I2C写正常, 但读有问题. 您应该用的是硬件I2C模式, BK1080用硬件I2C通信须做一些更改. 请联系我们发一份专业文档给您.
5). 如我们的芯片地址0x80与I2C总线上其它设备有冲突, 解决方法同上, 请联系我们,我们会发一份文档给您.
6). 如读回的数据是0x16,0x128, 恭喜读回的数据是对的. 是您将读回的数据已经转成了10进制显示了.
相关博文:
http://forum.eet-cn.com/BLOG_ARTICLE_9891.HTM
45. BK1080,BK1086/88 I2C波形抓图
http://forum.eet-cn.com/BLOG_ARTICLE_9136.HTM
6.BK1080 I2C通信不上如何解决? BK1080读不到芯片ID怎么办? BK1080 I2C没反映怎么解决?
http://forum.eet-cn.com/BLOG_ARTICLE_9878.HTM
41. BK1080的I2C地址0x80与其它I2C设备地址冲突了怎么办? 如何屏蔽掉0x80这个I2C地址? 怎么修改I2C地址?
用户1406868 2014-8-20 21:15
用户1442022 2014-1-7 20:47
用户1102217 2013-1-16 11:21