IIC协议介绍:
作为一种应用很广的串行总线协议,这个是需要我们很认真去了解的。绝大多数的驱动开发中均少不了IIC驱动.
我手上的板子有一个eeprom和touch screen都是IIC接口。现在我们先来研究IIC协议以及ac24cxx的spec研读.
为下一章的驱动编写做准备.
这里我们拿24cxx的datasheet来说明.
IIC协议:由一个SDA信号和一个SCL信号组成.主控mcu作为主设备,其他外围器件作为从设备.所有操作的开始均是由主设备发起。
IIC有start,stop,ACK信号.
数据传输时:在每一个scl为高 level时,要求对应的sda 数据稳定不变,当scl的level为低时,允许sda的电平进行变化.
正因为这种特性,通常我们这样讲:IIC的数据传输,波形上直观的表现为:data数据一定要包住clk.
start:SCL为高电平时,SDA产生一个下降沿
stop:当SCL处于高电平时,SDA产生一个上升沿
ACK:SCL为高电平时,SDA为低电平
24c02/24c04/24c08 spec研读:
首先:IIC设备均会有一个 dev 的addr.支持IIC的多个设备可以挂在同一条总线上,操作时以设备地址来区分.
24cxx device addr 的确定
24c02: 与A2,A1,A0的硬件连接相关
24c04 : 与A2,A1的硬件连接相关,A0未连接
24c08 : 与A2的硬件连接相关,A1,A0未连接
size:
24c02: 256 个字节, 寻址需要 8bit
24c04: 512 个字节,寻址需要 9bit
24c08: 1024个字节,寻址需要 10bit
通常,向一个地址写一个数据,需要先写dev 的地址,8bit,再写入数据存放位置的地址,此时24c02一个字节可以表示完全它本身的地址,但是24c04和24c08却不行,需要两个字节,再传数据
24cxx 写入方式:
1.字节写入,一次传送一个字节,写完结束!
2.连续写: 24c02一次可以连续写8个字节,24c04/24c08一次可以连续写16个字节
每写入一个字节,地址会自动+1,24c02的地址第三位会自动+,24c04/24c08的低四位会自动+。溢出后自动变0,恢复到起始写地址.
24cxx的读方式:
1.当前读:ic里面有一个conter会记录上次操作的地址,当再次进行不指定地址的读操作,直接返回记录地址上的数据
2.随机读:指定任意的地址,再发送读命令,返回对应地址的数据
3.顺序读:发生在当前读或者随机读方式下,一次读多个字节出来