I2C协议
I2C 接口只需要两条总线线路,即 SCL(串行时钟线)、SDA(串行数据线),I2C 总线是半双工,所以任意时刻只能有一个主机。同一时间段,SDA只能够单向传输。传输速率标准模式下可以达到 100kb/s,快速模式下可以达到 400kb/s,高速模式下可达 3.4Mbit/s。总线上的主设备与从设备之间以字节(8 位)为单位进行双向的数据传输。
单字节地址写操作时序
单字节地址读操作时序
根据上述的读写操作时序图,可以把整个时序过程分解为以下过程:
再根据I2C协议关于起始信号、终止信号以及应答信号的SCL和SDA两条总线的时序信号,得到基本数据字节拼接模块i2c_bit_shift。其状态机如下图所示,该模块实现了各种情况下的时序过程。该模块可以满足单字节模块的读写,但对应多字节地址读写和读字节数据的读写不够灵活。所有设计了i2c_control模块来实现多字节器件地址的数据的读写。
i2c_control通过控制基本数据字节拼接模块从ROM camera_init_table中读取并写入OV5640的各个寄存器中,完成摄像头的配置。