当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 使用iic进行数据传输时经常会碰到的状况及解决办法

使用iic进行数据传输时经常会碰到的状况及解决办法 时间:2018-09-25      来源:未知

对于很多工程师,iic确实不是一个省油的灯,相比其他的串行总线,iic时序变化更复杂一些。

这次我们说一个在使用iic进行数据传输时经常会碰到的状况及解决办法。

首先先准备调试工具:万用表一台,示波器一台,电烙铁一台。如果用控制器的话只需按照寄存器的操作流程走就可以,这里不做详细赘述,我们主要讲模拟iic需要注意的问题。

在程序调试前,首先确定硬件电路的正确性,iic总线为开漏输出,所以一般需要接上拉电阻,查找电路图,iic总线是否接上拉电阻,如果没接,一般都不能使用iic通信,即使电路板显示接上了,大家还是用万用表测一下,以防万一虚焊或是其他电路故障导致总线下拉,避免不必要的麻烦。

使用iic进行数据传输时经常会碰到的状况及解决办法

在确定硬件电路的正确性之后,将程序烧录到芯片中进行测试。

模拟iic重要是注意延时时间长短,因为iic总线时序是遵从仲裁制度的,如果从机的机器周期比较慢的话,主机延时太短就会出问题,当然延时太长也不好,会导致数据传输速度变慢,这里就需要去用示波器测试了。其实有时候也不用示波器,网上关于各个芯片iic的操作很多,大家去借鉴一下就可以,因为延时这个东西虽然重要,但是不难,所以不要浪费太多时间在这里。

延时确定以后,就可以按照严格的iic读写时序去写了,这里我们列一个比较突出的案例iic的eeprom操作时序来解析。

示意图说明:示意图分阐述了4种不同的操作方式,例如写单个存储单元,写多个存储单元,读单个存储单元和写单个存储单元。对于单个操作而言,上部为MCU通过I2C输出的相关指令,下部为I2C设备的响应。例如写单个存储单元操作时,MCU发出I2C启动,设备地址,写标志位等,而I2C设备输出多个ACK。

读写如果按照以上方式去写的话,结果还是未通信,读不出芯片内部的数据。那就需要使用示波器去抓波形测量了,这里我说一个经常碰到的问题。

在需要从芯片读取多个字节的时候,往往会读不出来,在确定了起始信号和结束信号都没问题之后,请确定应答和无应答位的正确性。

什么是无应答:

无应答为MCU发出,无应答意为MCU不需要从机输出数据,MCU将会停止本次I2C操作。需要说明的是,无应答并不是一种异常情况。

所以在读操作中,后一个数据读取完成后需要主机发送一个无应答信号,告诉从机数据已经读取结束,不需要再读了,发送完无应答信号后,发送停止信号,释放总线。

本人之前做的msp430和zlg7290芯片通信,去读取显示寄存器DpRam内容时,就碰到过,可以往DpRam中写数据,也可以从键值寄存器读数据,但就是不能从DpRam中读数据,这里就可以确定,iic首先是建立通信成功了,只是时序未按照规定时序来,使用示波器抓波后得知,读取多个字节操作源码中应答和无应答的操作写反了,这些问题比较琐碎,需要抓波一个时钟一个时钟的去对照,所以大家写的时候好找可靠的资源去参照,可以节省调试的很多工作量。

上一篇:关于S50卡的开发理解

下一篇:Android滑动效果(一)- Android坐标研究

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部