本文主要叙述,当两个设备进行 IIC 通信时,两个设备的交互流程,即主机的动作和从机的动作。当通过软件编程的方式实现设备间的 IIC 通信时,我们就是按照主机的动作或从机的动作来编写对应的代码。实际上,主机和从机是按照 IIC 通信协议的要求完成相应的动作的( IIC 通信协议在文章IIC通信基础-CSDN博客 中有详细叙述),因此,程序代码就是 IIC 通信协议的提现。下面将分别叙述当两个设备进行 IIC 通信时,主机的动作和从机的动作,为编写对应代码做好准备。
主机的动作
- 主机产生起始信号,通过将 SDA 线在 SCL 线为高电平时由高拉低至低电平来实现。
- 主机发送从机地址(7位)和指示读写方向(1位)(读写方向,0为写,1为读)。
- 主机等待并接收从机的应答信号(ACK)(如果从机准备好通信,从机将 SDA 线拉低作为应答)。
- 主机发送数据字节,每个字节后再次等待并接收从机的ACK信号。
- 在数据传输完成后,主机产生停止信号,通过将 SDA 线在 SCL 线为高电平时由低拉高至高电平来结束通信。
从机的动作
- 从机监测到起始信号后,准备接收主机发送的数据或命令。
- 从机接收主机发送的从机地址,并检查地址是否匹配自己的地址。
- 如果地址匹配,从机通过将 SDA 线拉低来发送 ACK 信号回应主机。
- 从机接收主机发送的每个数据字节,并在接收完成后发送 ACK 信号。
- 在读写操作中,如果从机需要向主机发送数据,它会在主机请求数据时准备数据,并在主机的时钟信号控制下通过 SDA 线发送数据。
- 在读操作中,从机在主机发送停止信号之前,根据主机的请求发送数据,并在发送每个字节后等待主机的 ACK 或 NACK 信号。
总结
IIC 通信中设备的交互流程可用下图表示,下图中流程的顺序是从左到右执行,并排的流程表示同时执行。
注意:
IIC通信中的应答信号是由接收设备在接收到一个字节数据后发送的,以确认数据已正确接收。应答信号是一个低电平脉冲,它在数据字节传输的第9个时钟周期出现。在这个周期中,发送设备释放SDA线,允许接收设备将SDA线拉低,以产生应答信号。如果接收设备成功接收了数据,它会在第9个时钟周期将SDA线拉低;如果接收设备无法接收或选择不应答,它将保持SDA线为高电平。
标签:主机,流程,发送,从机,SDA,IIC,接收,交互 From: https://blog.csdn.net/aElect/article/details/142138006