IIC总线编程说明

1.不同iic器件有不同地址,具体可以查看器件的数据手册。

  举例:mpu6050的器件地址有2种,可以通过AD0(地址控制引脚,该引脚控制 IIC 地址的最低位。如果接 GND,则 MPU6050 的 IIC 地址是: 0X68,如果接 VDD,则是 0X69,默认0x68)来控制。地址格式是高7位为器件地址,最后一位表示对器件的操作是读(1)或写(0)。器件地址加读写操作 组成了iic的操作地址。主机对mpu6050读操作时,目标器件的地址是0x68<<1  写操作时,地址为(0x68<<1 )+1。

2.I2C写入序列从主机生成的启动条件开始,然后是7位从机地址和一个写入位(R/W=0)。从机发送一个确认位(ACK=0)并释放总线。主机发送单字节寄存器地址。从机再次确认传输并等待8位数据,这些数据应写入指定的寄存器地址。在从机确认数据字节后,主机生成停止信号并终止写入协议。(图片是qmc5883L的iic写入顺序,sack为slave ack ,mack为master ack)

主机的具体操作是: 1. 主机开始iic start    2.主机发送设备地址+写入操作   3.主机等待从机应答   4.应答后主机发送写入的寄存器地址  5.等待从机应答  6.主机收到应答后发送数据给从机  7.主机等待从机应答   8.主机收到应答后确认写入完成,发出iicstop

3.I2C读取比写入麻烦,需要先告诉需要读哪个从机的哪个地址,从机准备好数据后,再启动读取。具体如下:iic读取由一个字节的I2C写入阶段和I2C读取阶段组成。启动条件iicstart必须在两个阶段之间生成。1. I2C写入阶段为从机寻址,并发送要读取的寄存器地址。2. 在从机确认传输后,主设备再次生成一个启动条件,并将从机地址与一个读位(R/W=1)一起发送。3. 然后,主机释放总线,等待从机读取数据字节。4.在每个数据字节之后,主机必须生成一个确认位(ACK=0),以启用进一步的数据传输。来自主机的NACK停止从从机传输数据。从机释放总线,以便主设备可以产生停止条件并终止传输。寄存器地址会自动递增,并且可以按顺序读出一个以上的字节。一旦新的数据读取传输开始,开始地址将被设置为当前I2C写入命令中指定的寄存器地址。

IIC总线编程说明_第1张图片

 

 

你可能感兴趣的:(IIC总线编程说明)