I2C通信(MCU作为主机、读取器件数据)学习总结

这次项目使用AC781作为主控芯片,因为是第一次接触这个芯片,并不清楚该芯片的使用,而且一直以来对I2C也不是很理解,因此以为要实现该芯片和器件的I2C通信会非常复杂,但在接触该芯片的一些基本例程代码几天后,发现该芯片的硬件I2C所有的通信协议已经配置好,我们只需要调用读函数,直接使用即可。因此,对于该芯片,直接使用硬件I2C对I2C的学习意义并不大。所以我尝试使用模拟I2C进行该芯片与器件的通信,而且,这几天我以为该芯片使用I2C会很难进行配置,因此不断去学习I2C的协议,对I2C的理解也不断得到加深。


I2C的通信原理:(MCU作为主机、器件作为从机,MCU读取从机发出的数据)

数据传输完整过程如下图所示:(蓝色为MCU发出,橙色为器件发出)

I2C通信(MCU作为主机、读取器件数据)学习总结_第1张图片

 

假设:器件为发送端A,AC781为接受端M

通信步骤:M发送起始信号,A接收到后开始向M传输一个8位数据,M接收到8位数据后向A发送应答信号(ACK),然后A再向M发送下一个8位数据,当M接收完

最后一个8位数据后,M向A发送NACK信号,A停止发送,M再向A发终止信号,则传输终止。

 

 

 

 

IIC注意点:

1:SDA引脚要注意配置为输入或输出模式(即配置GPIO口)

①M向A发送起始信号、终止信号、ACK、NACK信号时需配置为输出模式。

②M接收A的数据信号时需要配置SDA为输入模式。

 

2:数据的有效性

传输数据时只能在SCL为低电平时才能改变SDA数据电平,在SCL为高电平时SDA数据电平必须保持稳定。

 

3:从设备地址问题

虽然MCU发送从机地址共为8位,实际上,从机地址只有高7位。最低位(即第0位)为设置“读”或“写”位,①当最低位为1时:设置主机接收数据、从机发送数据  ②当最低位为0时:设置为主机发送数据,从机接收数据。

 

4:I2C的中断模式和非中断模式(查询模式)

对I2C总线来说,工作在中断和非中断模式在时序上是相同的,只不过在非中断模式下是通过检测ACK信号来判断从设备响应了,在中断模式下是通过中断信号来判断从设备响应了,一般是读主CPU侧的iic控制器的中断标志来判断的。

 

5:传输过程中的数据位数问题

在传输过程中,数据都是8位数据,定义数组变量存储数据时要定义8位变量。

 

6:开始时序和结束时序

开始:SCL为高时,SDA由高电平变为低电平

结束:SCL为高时,SDA由低电平变为高电平

你可能感兴趣的:(单片机)