IIC学习笔记
- 物理层
- IIC有SCL和SDA两条线,SCL是时钟线,SDA是数据线。
- IIC的的两根线在外部是被拉高的
- 连接到IIC的设备只能拉低总线
- IIC上可以挂载多个设备
- 总线裁决机制
- 其实是线与,其实是与,有0 则0,全1则1,
- 多个主机想同时占用总线,这叫做总线竞争,总线就要发挥他的作用,总线裁决,决定谁先占用总线
- 仲裁机制是按照位进行的,谁先发0,谁赢得仲裁,谁先占用总线
- 重要信号
- 开始信号:一次完整通讯的开始信号,并不是主机每发送一位数据都要发送开始信号,
- 结束信号:一次完整通讯的结束信号,主机发送完所有数据后,发送结束信号,
- ACK信号:从机给主机的应答信号,主机每发送一个字节(8位)数据后,会暂时释放SDA总线(暂时释放就是说SDA主机没有拉低电平),然后主机会监听从机的应答信号,
- ACK信号的作用:表示我接收到了信号,或者我可以接受信号,相反NACK表示我没有接受到,或者我不需要了
- 有效数据位的规定
- SCL在高电平时,SDA发生下降沿,为开始信号
- SCL在低电平时,SDA发生上升沿,为结束信号
- SCL在高电平时,SDA保持在一个稳定的电平,为有效数据位
-
举例
- 条件 :一个IIC总线上面有A,B,C,D四个设备
- A向B写数据:
- A拉低SDA,发送开始信号,总线上所有设备被激活,开始监听总线
- A发送7位设备地址+写操作位(8位,一个字节)
- B发送ACK信号
- A发送一个字节的数据
- B发送ACK信号
- ...
- A在SCL为高电平时,拉高SDA,发送结束信号
- A向B读数据:
- A拉低SDA,发送开始信号,总线上所有设备被激活,开始监听总线
- A发送7位设备地址+写操作位(8位,一个字节)
- B发送ACK信号
- A发送一个字节的数据(寄存器地址)
- B发送ACK信号
- A在SCL为高电平时,拉低SDA,发送开始信号(RESTART信号)
- A发送7位设备地址+读操作位(8位,一个字节)
- B发送ACK信号
- B发送一个字节的数据
- A发送ACK信号
- ...
- B发送了最后一个字节的数据
- A发送NACK信号,
- A在SCL为高电平时,拉高SDA,发送结束信号