这次我们说一个在利用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首先是建立通信成功了,只是时序未按照规定时序来,利用示波器抓波后得知,读取多个字节操作源码中应答和无应答的操作写反了,这些问题比较噜苏,须要抓波一个时钟一个时钟的去对照,以是大家写的时候好找可靠的资源去参照,可以节省调试的很多事情量。
嵌入式物联网须要学的东西真的非常多,千万不要学错了路线和内容,导致人为要不上去!
无偿分享大家一个资料包,
差不多150多G。里面学习内容、面经、项目都比较新也比较全!
某鱼上买估计至少要好几十。(点击找小助理领取)
扫码进群领资料










