4. 视频采集接口工程实现
在Quartus视频图像处理系统中,CMOS传感器接口是整条图像链路的起点。OV5640与OV7725虽然分辨率、内部ISP能力不同,但对外接口高度相似:都通过SCCB(OmniVision串行摄像机控制总线)完成寄存器配置,通过DVP(Digital Video Port)并行接口输出像素数据,并配合PCLK、HREF/HSYNC、VSYNC三根同步信号完成时序对齐。本节以OV5640输出RGB565、OV7725输出RGB565或RAW8为例,说明从寄存器写入到像素捕获的完整工程实现路径。
一、SCCB配置:把传感器从默认状态带到目标工作模式
SCCB在电气层与I²C兼容,使用SCL与SDA两根线,但协议细节略有差异:OV系列器件地址通常为7位0x3C(写)与0x3D(读),写寄存器时先发器件地址+写位,再发寄存器地址,再发8位数据,最后以停止条件结束。OV7725的寄存器地址为8位,OV5640的寄存器地址为16位,因此OV5640需要发送高字节和低字节两个地址字节,这是两者配置代码不能直接复用的主要原因。
配置顺序建议遵循“先软复位、再时钟与PLL、再输出格式、最后使能”的原则。以OV5640输出RGB565、QVGA(320×240)为例,典型寄存器序列如下(示例参数,需按实际模块晶振与PLL计算):
// OV5640 SCCB 写序列(示例)
0x3103, 0x11 // 系统时钟从PLL直接输入
0x3008, 0x82 // 软复位
0x3037, 0x13 // PLL控制
0x3035, 0x21 // PLL倍频
0x3036, 0x69 // PLL倍频
0x3C07, 0x08 // 预充电
0x4300, 0x61 // 输出格式:RGB565
0x501F, 0x01 // ISP输出RGB565
0x3808, 0x01 // 水平输出高字节
0x3809, 0x40 // 水平输出低字节 = 320
0x380A, 0x00 // 垂直输出高字节
0x380B, 0xF0 // 垂直输出低字节 = 240
0x3008, 0x02 // 退出复位,进入工作
配置完成后应回读关键寄存器(如0x3008、0x4300、0x3808~0x380B)确认写入成功。若回读值恒为0xFF或0x00,优先检查上拉电阻、SCCB时钟频率(建议100~400 kHz)以及传感器供电与复位时序。
二、DVP并行接口时序捕获
DVP接口的同步关系是采集逻辑的核心。以OV5640为例,PCLK为像素时钟,HREF为行有效标志,VSYNC为帧同步。在RGB565模式下,一个像素占16位,分两个PCLK周期输出:第一个周期输出高字节(R[4:0]与G[5:3]),第二个周期输出低字节(G[2:0]与B[4:0])。因此采集模块必须在HREF有效期间按PCLK节拍对D[7:0]进行采样,并以“字节计数”方式拼装成16位像素。
工程上常用做法是:用PCLK的上升沿采样D[7:0],用HREF的下降沿作为行结束标志,用VSYNC的下降沿或上升沿作为帧起始标志。为避免亚稳态,建议在FPGA内部先用PCLK对HREF、VSYNC做两级同步,再生成行有效与帧有效信号。若传感器输出的是RAW8,则每个PCLK对应一个8位像素,直接按字节写入即可,但需注意Bayer排列顺序(如BGGR、GRBG),否则后续去马赛克会偏色。
三、RGB565与RAW数据格式解析
RGB565的16位分布为:R占高5位、G占中间6位、B占低5位。若采集模块直接输出16位像素,后续显示或存储时需注意字节序。Quartus中常用做法是定义一个16位寄存器,在字节计数为偶数时写入高字节,奇数时写入低字节,并在行结束时将像素写入行缓冲或FIFO。
RAW8模式下,每个像素仅8位,但每个像素只包含一个颜色分量,需按Bayer模板还原。以BGGR排列为例,第0行第0列为B,第0行第1列为G,第1行第0列为G,第1行第1列为R。若直接按RGB565显示RAW数据,会出现明显网格状偏色,因此RAW模式通常需要后续ISP或FPGA内插模块处理。
四、采集模块仿真验证
仿真验证的关键是构造符合DVP时序的激励。建议在Testbench中生成PCLK(如24 MHz)、VSYNC、HREF和D[7:0],并模拟一行320像素、每像素2字节的波形。验证点包括:行有效期间是否恰好采集640个字节;像素拼装是否正确;帧计数是否与VSYNC一致;FIFO是否溢出。
一个实用的检查清单如下:
- VSYNC下降沿后,首个HREF上升沿是否被正确识别为第0行起始;
- 每行HREF有效期间,字节计数器是否从0计到639;
- 偶数字节写入像素高8位,奇数字节写入低8位,拼装后RGB565值是否与激励一致;
- 行结束时是否产生行结束脉冲,并正确写入行缓冲;
- 帧结束时帧计数器加1,且无FIFO写溢出。
完成上述采集模块后,即可将RGB565像素流送入后续的帧缓冲、缩放或显示模块。SCCB配置、DVP时序捕获与数据格式解析三者共同构成视频采集接口的完整闭环,也是后续图像处理算法能够稳定运行的前提。