一、I2C物理层
①多设备
②双线制度(SCL ; SDA)
③存储地址、器件地址
④空闲状态是高阻态,保持高电平
⑤多主机:仲裁
⑥标准速度:100kb/s 快速:400kb/s 高速:3.4Mb/s
二、I2C协议层
(一)I2C整体时序图
①总线空闲状态(SCL:1 SDA:1)
②起始信号(SCL:1 SDA 出现下降沿)
③数据读写信号(SCL:0 →SDA数据更新;写入1bit;从机正确接收8bit,SDA拉低(ACK响应位))
④停止信号
SCL:1 SDA:上升沿
(二)i2c设备器件地址与存储地址
0:W
1:Read
由于I2C设备要配置寄存器的多少或存储容量的大小的不同,存储地址根据位宽分为单字节和2字节两种。例如后文要提到的OV7725、OV5640摄像头,两者的寄存器数量不同,OV7725摄像头需要配置寄存器较少,单个字节能够实现所有寄存器的寻址,所以他的存储地址位宽为8位;而OV5640摄像头需要配置寄存 器较多,单个字节不能够实现所有寄存器的寻址,所以他的存储地址位宽为16位,2个字节。
以EEPROM存储芯片为例,在ATMEL公司生产的AT24C系列EEPROM存储芯片中选取两款存储芯片AT24C04和AT24C64。AT24C04的存储容量为1Kbit(128byte),7位存储地址即可满足所有存储单元的寻址,存储地址为单字节即可;而AT24C64的存储空间为64 Kbit(8Kbyte),需要13位存储地址才可满足所有存储单元的寻址,存储地址为2字节。
(三)I2C读写操作
-
写操作
I2C单字节写操作(单字节存储地址)
参照时序图,列出单字节写操作流程如下:
-
主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
-
从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。
-
按高位在前低位在后的顺序写入单字节存储地址;
-
地址写入完成,主机接收到从机回传的应答信号后,开始单字节数据的写入;
-
单字节数据写入完成,主机接收到应答信号后,向从机发送停止信号,单字节数据写入完成。
I2C页写操作(单字节存储地址)
单字节写操作中,主机一次向从机中写入单字节数据;页写操作中,主机一次可向从机写入多字节数据。
列出页写操作流程如下:
-
主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
-
从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。
-
按高位在前低位在后的顺序写入单字节存储地址;
-
地址写入完成,主机接收到从机回传的应答信号后,开始第一个单字节数据的写入;
-
数据写入完成,主机接收到应答信号后,开始下一个单字节数据的写入;
-
数据写入完成,主机接收到应答信号。若所有数据均写入完成,顺序执行操作流程;若数据尚未完成写入,跳回到步骤(5);
-
主机向从机发送停止信号,页写操作完成
所有I2C设备均支持单字节数据写入操作,但只有部分I2C设备支持页写操作;且支持页写操作的设备,一次页写操作写入的字节数不能超过设备单页包含的存储单元数。
-
读操作
读操作可分为随机读操作和顺序读操作。
I2C随机读操作(单字节存储地址)
I2C随机读操作可以理解为单字节数据的读取
随机读操作时序
参照时序图,列出页写时序操作流程如下:
-
主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
-
从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。
-
按高位在前低位在后的顺序写入单字节存储地址;
-
地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始信号;
-
主机向从机发送控制命令,读写控制位设置为高电平,表示对从机进行数据读操作;
-
主机接收到从机回传的应答信号后,开始接收从机传回的单字节数据;
-
数据接收完成后,主机产生一个时钟的高电平无应答信号;
-
主机向从机发送停止信号,单字节读操作完成。
I2C顺序读操作(单字节存储地址)
参照时序图,列出页写时序操作流程如下:
-
主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
-
从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。
-
按高位在前低位在后的顺序写入单字节存储地址;
-
地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始信号;
-
主机向从机发送控制命令,读写控制位设置为高电平,表示对从机进行数据读操作;
-
主机接收到从机回传的应答信号后,开始接收从机传回的第一个单字节数据;
-
数据接收完成后,主机产生应答信号回传给从机,从机接收到应答信号开始下一字节数据的传输,若数据接收完成,执行下一操作步骤;若数据接收未完成,在此执行步骤(7);
-
主机产生一个时钟的高电平无应答信号(接收完成);
-
主机向从机发送停止信号,顺序读操作完成。