目录:
- 一、OV2640 Camera
- 二、读取OV2640模块图像数据过程:
- 三、DCMI(Digital camera interface)接口
- 四、SCCB协议
-
- 五、OV_Camera 配置
-
一、OV2640 Camera
基本概念:
-
- UXGA,即分辨率位16001200的输出格式,SXGA(12801024)、XVGA(1280960)、WXGA(1280800)、XGA(1024768)、SVGA(800600)、VGA(640480)、CIF(352288)和QQVGA(160*120);
-
-
-
- PCLK,即像素时钟,一个PCLK时钟,输出一个(或半个)像素.
比如我们采用UXGA时序,RGB565格式输出,每2个字节组成一个像素的颜色(低字节在前,高字节在后)
这样每行输出总共有1600*2个PCLK周期,输出1600*2个字节
二、读取OV2640模块图像数据过程:
三、DCMI(Digital camera interface)接口
DCMI接口简介- 初始化流程:
①配置相关引脚的复用功能,使能DCMI时钟
-
- 使能DCMI的时钟,其次要设置DCMI的相关引脚为复用
②设置DCMI工作模式及PCLK/HSYNC/VSYNC
-
- DCMI接口,使用8位接口,连续模式,设置:PCLK为上升沿有效, HSYNC和VSYNC为低电平有效,设置帧中断(jpeg数据采集用)等参数。
③设置DMA
-
- 采用DMA来搬运,设置好DCMI相关参数后,还需要设置DMA,以便采集数据。
④启动DCMI传输
-
- 设置DCMI->CR的最低位为1,即可启动DCMI捕获图像数据
四、SCCB协议
- SCCB(Serial Camera Control Bus) 串行摄像机控制总线协议
- 一个基本传输单元称作一个相
一个相包含总共9比特,前8比特为数据,第9比特为 Don’t-Care bit 不关心比特,该第9比特的数据取决于
传输任务是读还是写(0代表写,1代表读)(可以类比I2C通信协议) - 一个传输任务的最大相个数是3
1.起始信号
void SCCB_Start(void)
{
SCCB_SDA=1;
SCCB_SCL=1;
rt_hw_us_delay(50);
SCCB_SDA=0;
rt_hw_us_delay(50);
SCCB_SCL=0;
}
2.停止信号
void SCCB_Stop(void)
{
SCCB_SDA=0;
rt_hw_us_delay(50);
SCCB_SCL=1;
rt_hw_us_delay(50);
SCCB_SDA=1;
rt_hw_us_delay(50);
}
五、OV_Camera 配置
1.复位摄像头
OV2640_PWDN=0;
rt_hw_ms_delay(1);
OV2640_RST=0;
rt_hw_ms_delay(1);
OV2640_RST=1;
SCCB_Init();
SCCB_WR_Reg(OV2640_DSP_RA_DLMT, 0x01);
SCCB_WR_Reg(OV2640_SENSOR_COM7, 0x80);
2.读取摄像头ID
reg=SCCB_RD_Reg(OV2640_SENSOR_MIDH);
reg<<=8;
reg|=SCCB_RD_Reg(OV2640_SENSOR_MIDL);
res = reg;
if(reg!=OV2640_MID)
{
rt_kprintf("MID:%d\r\n",reg);
return 1;
}
reg=SCCB_RD_Reg(OV2640_SENSOR_PIDH);
reg<<=8;
reg|=SCCB_RD_Reg(OV2640_SENSOR_PIDL);
if(reg!=OV2640_PID)
{
rt_kprintf("HID:%d\r\n",reg);
return 2;
}
log_i("OV2640 Camera ID:%x %x ",reg,res);
3.配置帧率
for(i = 0;i < sizeof(ov2640_sxga_init_reg_tbl)/2;i++)
{
SCCB_WR_Reg(ov2640_svga_init_reg_tbl[i][0],ov2640_svga_init_reg_tbl[i][1]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)