经过昨天的分析,不知你对时序的分析是否有了一定的进步,今天将继续把IIC中关于读操作的分析,今天我自己进行分析的时候,发现寻址方式挺奇特的,慢慢品~
5、当前地址读取(Current AddressRead)
这个读取的方式是指在一次读或写操作后发起读操作,由于器件在完成一次读写操作后,其内部的地址指针会自动加一,因此当前地址读取可以得到加一后的地址中的数据。比如当上次读或写操作的地址为02时,当前地址读取的内容就是地址03处对应的数据。当数据不存在的时候就会出现图中的情况,等待无响应,然后主机发出停止信号结束通信。
6、随机读取(Random Read)
由上面的Current AddressRead可知读取并不方便,所以有了Random Read这种读取方式
注:Dummy Write——虚写操作,被称为虚写是因为它并没有写入数据,而是通过这种操作将地址指针指向虚写操作中的地址。
流程:进行一次虚写操作——等待从机响应——进行 5 步骤“当前地址读取”的操作。
7、连续读取(Sequential Read)
连续读取操作可以允许读遍整个模块,在Current AddressRead或Random Read完成后才会启动,需要主机在收到读取到的数据后,发出一个收到数据的响应反馈给从机,然后从机继续进行地址累加,从而开始下一个地址的数据读取,依次累加,当地址达到了最大的那个限制地址时,地址将进行翻转,然后可以继续开始读取,这里的连续读操作在上述随机读操作的基础上进行,若不需要读取数据时,主机停止对从机发送收到数据的响应反馈,然后等待无响应发出停止信号:
注:主机对从机发送收到数据的响应反馈,就是时序图中上方的那一串ACK,而下方的ACK,NO ACK都是属于从机反馈。
IIC的时序也分析完了,相信对你以后进行相关的驱动模块程序的编写有所帮助,如果之后时间足够的话,会对相关时序进行程序编写,具体以哪种语言实现,敬请期待未来的相遇!