基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识

一、I2C物理层

①多设备

双线制度(SCL ; SDA)

③存储地址、器件地址

④空闲状态是高阻态,保持高电平

⑤多主机:仲裁

标准速度:100kb/s 快速:400kb/s 高速:3.4Mb/s

基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识_第1张图片

二、I2C协议层

(一)I2C整体时序图

基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识_第2张图片

①总线空闲状态(SCL:1 SDA:1)

②起始信号(SCL:1 SDA 出现下降沿)

③数据读写信号(SCL:0 →SDA数据更新;写入1bit;从机正确接收8bit,SDA拉低(ACK响应位))

④停止信号

SCL:1      SDA:上升沿

(二)i2c设备器件地址与存储地址

基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识_第3张图片

0:W

1:Read

基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识_第4张图片

由于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单字节写操作(单字节存储地址)

基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识_第5张图片

参照时序图,列出单字节写操作流程如下:

  1. 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作控制命令的写入高位在前低位在后

  2. 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入

  3. 按高位在前低位在后的顺序写入单字节存储地址

  4. 地址写入完成,主机接收到从机回传的应答信号后,开始单字节数据的写入

  5. 单字节数据写入完成,主机接收到应答信号后,向从机发送停止信号,单字节数据写入完成。

I2C页写操作(单字节存储地址)

单字节写操作中,主机一次向从机中写入单字节数据;页写操作中,主机一次可向从机写入多字节数据。

基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识_第6张图片

列出页写操作流程如下:

  1. 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后

  2. 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。

  3. 按高位在前低位在后的顺序写入单字节存储地址

  4. 地址写入完成,主机接收到从机回传的应答信号后,开始第一个单字节数据的写入

  5. 数据写入完成,主机接收到应答信号后,开始下一个单字节数据的写入

  6. 数据写入完成,主机接收到应答信号。若所有数据均写入完成,顺序执行操作流程;若数据尚未完成写入,跳回到步骤(5);

  7. 主机向从机发送停止信号页写操作完成

所有I2C设备均支持单字节数据写入操作,但只有部分I2C设备支持页写操作;且支持页写操作的设备,一次页写操作写入的字节数不能超过设备单页包含的存储单元数。

  • 读操作

读操作可分为随机读操作和顺序读操作。

I2C随机读操作(单字节存储地址)

I2C随机读操作可以理解为单字节数据的读取

 随机读操作时序

基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识_第7张图片

参照时序图,列出页写时序操作流程如下:

  1. 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后

  2. 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入

  3. 按高位在前低位在后的顺序写入单字节存储地址

  4. 地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始信号

  5. 主机向从机发送控制命令,读写控制位设置为高电平,表示对从机进行数据读操作

  6. 主机接收到从机回传的应答信号后,开始接收从机传回的单字节数据

  7. 数据接收完成后,主机产生一个时钟的高电平无应答信号

  8. 主机向从机发送停止信号,单字节读操作完成

I2C顺序读操作(单字节存储地址)

基于Roebi EDA实现I2C通讯之(一)I2C通讯协议理论知识_第8张图片

参照时序图,列出页写时序操作流程如下:

  1. 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;

  2. 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入

  3. 按高位在前低位在后的顺序写入单字节存储地址;

  4. 地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始信号

  5. 主机向从机发送控制命令,读写控制位设置为高电平,表示对从机进行数据读操作;

  6. 主机接收到从机回传的应答信号后,开始接收从机传回的第一个单字节数据

  7. 数据接收完成后,主机产生应答信号回传给从机,从机接收到应答信号开始下一字节数据的传输,若数据接收完成,执行下一操作步骤;若数据接收未完成,在此执行步骤(7);

  8. 主机产生一个时钟的高电平无应答信号(接收完成)

  9. 主机向从机发送停止信号,顺序读操作完成。

你可能感兴趣的:(fpga开发)