OV5640摄像头配置(1)上电复位配置
1.引脚信息
OV5640 的视频输出接口共有10位,D[9:0]。当输出为10-bit RGB raw格式时,使用D[9:0]。当输出格式为8-bit YCbCr或8-bit RGB raw 和 8-bit RGB 565 时, 使用 D[9:2]。同步信号Href和Hsync使用同一引脚 Href。通过I2C设置可选择此引脚为Href或Hsync信号。SIO_C 以及 SIO_D 总线需外接上拉电阻,标准上拉电阻阻值为5.1K欧姆。RESETB引脚低有效,且内置上拉电阻。RESETB引脚需由后端芯片控制以得到合适的上电时序。PWDN引脚高有效,且内置下拉电阻。PWDN 引脚需由后端芯片控制以得到合适的上电时序。
t0:≥0毫秒,从DOVDD 到 AVDD 。
t2:≥5毫秒, 从 AVDD 到传感器上电。
t3:≥1毫秒, 摄像头上电到 ResetB 拉高。
t4:≥20毫秒, ResetB到 SCCB 初始化。(至此才可以开始对摄像头进行配置)
D0VDD&AVDD在硬件内部已经配置好了的,固定了状态,我们只需要配置PWDN和RESETB就可以了
感光矩阵:光信号在这里转化为电信号,经过各种处理后,这些电信号会转化为数字信号,然后存储成由一个个像素点表示的数字图像。
控制信号及时钟:控制PWD、RESET两个信号按上电时序要求变化,进而完成寄存器的配置。PCLK、HREF及VSYNC分别是像素同步时钟、行同步信号和帧同步信号,XCLK是外部时钟,由FPGA中的锁相环产生,而PCLK是OV5640输出数据时的同步时钟。
3. 代码
module power_ctrl(
input sclk,
input s_rst_n,
output wire ov5640_pwdn,
output wire ov5640_rst_n,
output wire power_done//上电复位完成信号,可以开始配置了
);
localparam DELAY_6MS=30_0000;
localparam DELAY_2MS=10_0000;
localparam DELAY_21MS=105_0000;
reg [18:0] cnt_6ms;
reg [16:0] cnt_2ms;
reg [20:0] cnt_21ms;
always@(posedge sclk or negedge s_rst_n)begin
if(!s_rst_n)
cnt_6ms<= 'd0;
else if(ov5640_pwdn)
cnt_6ms<= cnt_6ms+1'b1;
end
assign ov5640_pwdn = (cnt_21ms>=DELAY_6MS)? 1'b1:1'b0;
always@(posedge sclk or negedge s_rst_n)begin
if(!s_rst_n)
cnt_2ms<= 'd0;
else if(ov5640_rst_n==1'b0 && ov5640_pwdn==1'b0)
cnt_2ms<= cnt_2ms+1'b1;
end
assign ov5640_rst_n = (cnt_21ms>=DELAY_2MS)? 1'b1:1'b0;
always@(posedge sclk or negedge s_rst_n)begin
if(!s_rst_n)
cnt_21ms<= 'd0;
else if(ov5640_rst_n==1'b1)
cnt_21ms<= cnt_21ms+1'b1;
end
assign power_done = (cnt_21ms>=DELAY_21MS)? 1'b1:1'b0;
endmodule
4.验证
`timescale 1ns/1ns
module tb_power_ctrl;
reg sclk;
reg s_rst_n;
initial begin
sclk = 1;
s_rst_n = 0;
#1000
s_rst_n = 1;
end
always #10 sclk= ~sclk;
power_ctrl power_ctrl_inst(
.sclk (sclk),
.s_rst_n (s_rst_n),
.ov5640_pwdn (),
.ov5640_rst_n (),
.power_done ()
);
endmodule
仿真结果出的太慢了,图太密集,不放了。