关于对IIC的自我认识和解释

设备:主设备和从设备(主机、从机)

模式:主设备数据发送、主设备数据接收。
           从设备数据接收、从设备数据发送。

起始信号START和停止信号STOP均由主设备控制发出。
数据线(SDA)由高到低 且 时钟线(SCL)为高时  为起始信号
数据线(SDA)由低到高 且 时钟线(SCL)为高时  为停止信号

SCL:IIC串行总线上的主设备对SCL有绝对控制:设置SCL时钟线为OUT
SDA:主设备为写模式时设置SDA为数据输出模式即OUT
              主设备为读模式时设置SDA为数据输入模式即IN 



主机发送模式下 数据发送设备连接的I2C_SDA引脚,由主设备设置为输出模式 控制该引脚的数据输出寄存器,引脚高低电平的输出对应数据1和0 
主机接收模式下 数据接收设备数据线引脚,由主设备设置为输入模式 读取对应引脚的数据输入寄存器数据值并且保存给数据载体(可以说变量也可以是数组)

数据有效性:
在数据手册上的I2C单元中
数据传输阶段 所有的SCL为高的时间都要比SDA线上的蓝色红色线的时间短,而黄色的线代表数据变化阶段。SCL高时SDA稳定 SCL低时SDA变化则SCL为高时数据有效。关于对IIC的自我认识和解释_第1张图片

设备于时钟线变化时的动作
时钟线为低时 数据发送器发送数据到SDA上 (此时SDA的电平在低电平时间内大部分时间段处于电平变化状态,是不稳定的)
时钟线为高时 数据接收设备从SDA上接收数据 (此时的数据也可以认为是有效数据 他是稳定的 而且会被接收)
如此8次后 即8Bit=1Byte发送和接收完毕

应答信号和非应答信
SDA线接收和发送8bit数据完毕后,SCL线状态由主设备设置为低。(人为控制SCL引脚输出0)


主发从收:
                该模式下的应答或者非应答信号由从设备发出,主设备拉高SDA和拉高SCL,之后会一直保持SCL的电平以保证数据的有效性,不保持SDA的电平(只设置I2C_SDA=1和SDA_IN模式)并且一直等待足够多的时间总线上的从设备将SDA数据线电平拉低并且被主设备读取到SDA低电平,以此完成一次ACK应答。如果过了时间主设备读取到的SDA还是高电平则为一次NACK,此时主设备发送STOP信号结束通信。


主收从发:
                在该模式下,应答或者非应答信号由主设备发出,着就简单的多了,SDA_OUT模式后,直接发送一次ACK或者NACK(即设置I2C_SCL=1,I2C_SDA=0或者I2C_SCL=1,I2C_SDA=0).

你可能感兴趣的:(经验分享,stm32)