打卡第三十集-软件模拟IIC上
IIC总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
IIC总线简单来说就是一根线来控制时钟(SCL)和一个线来发送数据(SDA)。两个线按照一定的传输协议来进行传输数据。由于只有一根线来读写数据,也就意味着同一时间只能有一个发送设备。(这里我们将产生时钟信号的设备称为主机,一条IIC总线同一时间只会有一个主机)

IIC协议分析

主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始
主机接着发送一个命令字节。该字节由 7 位的外围器件地址和 1 位读写控制位 R/W组成(此时 R/W=0为写)
相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0)
主机收到从机的应答信号后开始发送第一个字节的数据
从机收到数据后返回一个应答信号 ACK
主机收到应答信号后再发送下一个数据字节
当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信
主机发送启动信号后,接着发送命令字节(其中 R/W=1)
对应的从机收到地址字节后,返回一个应答信号并向主机发送数据
主机收到数据后向从机反馈一个应答信号
从机收到应答信号后再向主机发送下一个数据
当主机完成接收数据后,向从机发送一个“非应答信号(ACK=1)”,从机收到ACK=1 的非应答信号后便停止发送
主机发送非应答信号后,再发送一个停止信号,释放总线结束通信
1.启动信号
2.等待从机应答信号
3.终止信号
4.主机发送ACK信号
5.主机发送NO_ACK信号
6.发送一个字节
7.读取一个字节
空闲时,SDA和SCL都是高电平。
SCL=1时,如果是传输数据,SDA电平应保持不变,这样才可以将数据发送出去。如果SDA电平发生了变化,则是启停信号。
SCL=0时,SDA上的电平允许变化,变化好了,等SCL=1,SDA电平一直保持到SCL=0,这样就可以将数据传送出去。
始信号+地址+寄存器地址+数据+应答............+应答(非应答)+停止信号
