IIC通信协议:实现读写外挂芯片寄存器的功能
一、常识:
IIC的通信线有两根,分别是SCL时钟线和SDA数据线。是同步半双工,也就是有时钟线,同一时间只写或者只读。支持挂载多设备,一主多从或者多主多从,一主多从时,主机总有绝对的控制权。有一个很巧妙的地方,无论读还是写操作时,除了起始位和终止位,SCL时钟线处于高电平时,SDA数据线都不能动了,只有在起始位和终止位,SCL高电平,SDA拉低表示开始,SCL高电平,SDA拉高表示终止位(不理解请看江科大10-3的第22分钟视频)。
二、IIC的硬件电路:
硬件电路设置为开漏输出+上拉电阻弱上拉,这样的一个模式,这样可以很好的避免电源短路或者冲突等情况。也就是规定了,主机或者从机,只能拉低或者松手。因此,SCL和SDA在默认状态下是高电平的,上拉电阻作用的结果。
三、发送和接收:
3-1: 有起始位和停止位,起始位是时钟线保持高电平的状态下,手动拉低SDA线。停止位是先放手SCL时钟线让其回弹恢复高电平,然后再松手SDA数据线。这个SDA的控制权,写数据时,是从主机写数据到从机,因此控制权在主机,当读数据时,是指定地址读数据,因此时序图前半段的控制权在主机,由主机先指定设备地址并且指定寄存器地址后,再由从机进行读发的操作,所以后半段控制权在从机。
3-2: 发送一个字节: 在SCL低电平期间,主机将数据位放在SDA数据线上,然后松手SCL时钟线让其回弹至高电平,循环8次,即可发送一个字节,从机将在SCL高电平时读取SDA上的数据位。
3-3: 接收一个字节: 和发送一样,只不过此时SDA数据线的控制权在从机,由从机来放数据,由从机来释放SCL时钟线。
3-4: 发送应答和接收应答:
发送应答: 主机发送完一个字节以后,会手动释放SDA线,如果SDA线回弹到高电平,代表没有收到应答信号。如果SDA线被拽着,也就是低电平,代表收到了应答信号。
接收应答: 一样,此时SDA的控制权在从机,由从机进行释放SDA线,如果SDA线没有回弹到高电平,那么就是收到了应答信号。
3-5: 指定位置写读:
3-5-1: 指定地址写: 对于指定从机地址(1),在指定从机寄存器地址下(2),写入指定数据(3)。以上三个字节每个字节写完时,都会有一个应答信号,主机主动释放SDA数据线,若SDA数据线没有回弹到高电平,代表此时正被从机拽着,产生了应答信号0,如果应答信号是1,则从机没有返回应答信号。
3-5-2: 指定地址读: 和指定地址写类似。先由主机发送(指定从机地址)+(指定从机寄存器地址),由此来确定指定读的具体位置,此时控制权仍然在主机。然后再由主机继续产生一个(指定从机位置),唯一区别是,当主机松开SDA数据线,此时自动回弹到高电平1,从机并没有继续拽着这根SDA线,代表了读操作,后面就可以
通过指针的形式,把指定寄存器位置的数据给指(读)出来了。