This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
例程路径D:\ti\c2000\C2000Ware_4_00_00_00\driverlib\f28002x\examples\i2c\CCS
我是用的是polling方式对E2PROM进行读写,在E2prom芯片手册中,随机读取时序最后是要求主机发送一个NACK位,但是例程中却没有发送。我查看芯片技术手册,如下图所示,需要在最后一个bit的上升沿发送NACK,请问在FIFO中如何操作呢,如何在FIFO模式下,正确发送NACK位呢
当数据线和时钟线同时被长时间拉低时,数据读取就会出错,我尝试了几次抓取波形,每次读取数据出错的时候就是类似的波形
图中的SCL和SDA同时长时间拉低按照正常情况应该是同时拉高,这个情况是什么造成的呢
长时间拉低就是y轴附近这一段吧?绿色ch2是SCL,蓝色ch1是SDA吧?
截图框中的部分已经说明了生成NACK的方法。我的建议就是使用FIFO接收中断,在最后一帧数据接收之前置NACKMOD位。
你好,问题再进一步定位:程序执行了Send_NACK函数,但是在示波器波形上,NACK却没有及时的发出,从Send_NACK函数执行,到NACK发出中间隔了大概560us。
下图中从上到下依次为时钟线-青色,数据线-蓝色,debug线-绿色,绿色线电平反转代表执行Send_NACK函数,蓝色线是数据线,青色线是时钟线
下图是程序
看起来应该是IIC的时钟延展(clock stretching)问题。
从MCU运行I2C_sendNACK()函数,到NACK位被置位并发出相应的波形,需要一定的时间,为了避免出错,作为receiver的MCU就会拉低SCL。
你之前说数据读取会出错。可是按照IIC的设计,时钟被拉低的时候,传输就会阻塞;收发双方会等待时钟恢复正常后继续收发接下来的位。
我想知道在长时间的低电平恢复之后,数据的格式是否正确?因为波形图片的缩放比例太大,我没有办法判断。
还有一个问题,偶尔显示I2C总线忙碌的原因是什么呢,我已经执行了sendStopCondition函数,也对状态进行了判断,但是偶尔还是会显示总线忙碌
这个现象总是发生在对E2芯片全部读取完毕,延时5ms然后对E2芯片进行写入的时候,会出现总线忙碌
下面是程序
谢谢你啦
还有一个问题:主机发送了NACK和STOP,波形上面只看到了NACK但是没有相应的stop 波形
如下图:有NACK的波形,并且send_NACK和sendStopCondition函数的执行是紧接着,并且有关闭中断,不会被中断打断,那为什么没有相应的STOP波形呢,
下面是程序
对于STP状态,driverlib和TRM中是这样描述的:
所以检测到STP置位只能说明将会有停止条件生成。
延时之后应该增加对于STP位的判断,判断是否为0,即stop状态是否已经产生。
如下图:有NACK的波形,并且send_NACK和sendStopCondition函数的执行是紧接着,并且有关闭中断,不会被中断打断,那为什么没有相应的STOP波形呢,
这个时候STP的状态是什么?NACK后面的数据格式正常吗?