一、iic通信核心要点

浅谈iic时序-LMLPHP

在iic通信中,进行数据传输的时候,遵循在scl时钟线高的时候保持sda电平稳定,这个电平值就是要写入的值,然后,在scl时钟线拉低的时候去改变sda上的值,达到自己想要输出的值

所以说,一般scl高电平的时候,sda都是稳定的电平

但是,起始信号、结束信号、重开信号(SR)不同,他们可以也必须是在scl高电平的时候改变,以此来彰显不同

二、读写寄存器的时序

1、写寄存器

浅谈iic时序-LMLPHP

2、读寄存器

浅谈iic时序-LMLPHP

三、过程中各种信号解释

首先,不管是读还是写寄存器,开始都是需要走下面这一步流程,目的是为了确定从机地址,然后要操作从机哪个地址的寄存器

start信号,7位从机地址+写,(从机ACK),要操作的寄存器地址,(从机ACK)

(1) start信号:scl高电平的时候,SDA输出一个下降沿

(2) stop信号:scl高电平的时候,SDA输出一个上升沿

(3) restart信号

restart信号被用于主机向从机读取的时候,因为这其中存在一次传输方向的变换,所以需要进行一次方向的变换。前面我也提到了,不管是想给从机写还是想从从机读取,最开始都是一个写入方向,写入从机地址,写入要通信的寄存器地址。因此,如果是要往从机写数据,那好,方向不变,已然是写这一个方向,就用不到restart信号,但如果需要读,那么方向就变了,从原来的写变成读,就需要用到restart信号。

start 和 restart 信号的区别:restart需要占据一个时序,也就是一个上升一个下降这样一个时序周期,而start不需要,它只要是scl时钟线是高电平就行

浅谈iic时序-LMLPHP浅谈iic时序-LMLPHP

(4) ack和nack信号

ack也占一个时序,nack也占一个时序

ack和nack的区别:ack表示不再需要后续,nack表示已经结束,在连续读取寄存器的时候需要,另外,nack只有主机主动发送这一种情况,从机发送的都是ack

(5) 其他需要注意的点:

iic两条总线也就是数据线和时钟线,都是需要上拉的,就像下面这样

浅谈iic时序-LMLPHP

如果之前是低电平,直接配置成输出模式,因为有上拉电阻的存在,他就会直接输出1,但我们可能傻傻的认为,它还没输出1呢,用的时候要小心,另外,这种变化操作都在scl低电平的时候去做,切记,切记!

06-10 21:39