安路SparkRoad摄像头监控
本帖最后由 冒险武者 于 2022-5-22 23:16 编辑<p>购买了一颗OV7725摄像头,一款 1/4 英寸单芯片图像传感器,其感光阵列达到 640*480,能实现最快 60fps VGA 分辨率的图像采集。传感器内部集成了图像处理的功能,包括自动曝光控制(AEC)、自动增益控制(AGC)和自动白平衡(AWB)等。同时传感器具有较高的感光灵敏度,适合低照度的应用。OV7725使用的是两线式接口总线,兼容SCCB协议与IIC协议。</p>
<p>OV7725 的输入时钟频率的范围是 10Mhz~48Mhz,本次实验摄像头的输入时钟为 12Mhz。</p>
<p>OV7725摄像头如下图所示,比较小巧。</p>
<p> </p>
<p>上一篇实现VGA功能的时候,预留了接口,如下图把模式设置位3‘b100,就可以同步摄像头的数据</p>
<p>可以查看https://bbs.eeworld.com.cn/thread-1203400-1-1.html</p>
<p></p>
<p>摄像头支持多种格式,其中VGA时序要求如下:</p>
<p> </p>
<p>采用SDRAM接口,例化如下:</p>
<pre>
<code>EG_LOGIC_BRAM #( .DATA_WIDTH_A(16),
.DATA_WIDTH_B(16),
.ADDR_WIDTH_A(16),
.ADDR_WIDTH_B(16),
.DATA_DEPTH_A(32800),
.DATA_DEPTH_B(32800),
.MODE("PDPW"),
.REGMODE_A("NOREG"),
.REGMODE_B("NOREG"),
.WRITEMODE_A("NORMAL"),
.WRITEMODE_B("NORMAL"),
.RESETMODE("SYNC"),
.IMPLEMENT("9K"),
.INIT_FILE("NONE"),
.FILL_ALL("NONE"))
inst(
.dia(dia),
.dib({16{1'b0}}),
.addra(addra),
.addrb(addrb),
.cea(cea),
.ceb(ceb),
.ocea(1'b0),
.oceb(1'b0),
.clka(clka),
.clkb(clkb),
.wea(1'b1),
.web(1'b0),
.bea(1'b0),
.beb(1'b0),
.rsta(1'b0),
.rstb(1'b0),
.doa(),
.dob(dob));</code></pre>
<p>再就是实现I2C接口,完成摄像头的初始化工作即可</p>
<p>最后就是实现摄像头图像输出接口,和VGA控制类似,都涉及水平同步、垂直同步信号处理,借用代码</p>
<pre>
<code>module camera_vga
(
input wire clk,
input wire reset_n,
output wire csi_xclk,
input wire csi_pclk,
input wire csi_data,
input wire csi_vsync,
input wire csi_hsync,
output reg data_out,
output wire wrreq,
output wire wrclk,
output reg wraddr
);
reg pixel_counter = 0;
assign csi_xclk= (reset_n == 1) ? clk : 0;
reg vsync_passed = 0;
reg write_pixel= 0;
reg subpixel;
reg current_pixel;
reg wrclk1 = 0;
always@(posedge csi_pclk)
begin
wrclk1 <= ~wrclk1;
end
always@(negedge wrclk1)
begin
if(csi_hsync == 1)
write_pixel <= 1;
else
write_pixel <= 0;
end
always@(posedge wrreq )
begin
data_out <= current_pixel;
end
always@(posedge csi_pclk or negedge reset_n)
begin
if(reset_n == 0)
begin
pixel_counter <= 0;
vsync_passed <= 0;
end
else
begin
if(csi_vsync == 1)
begin
pixel_counter <= 0;
vsync_passed <= 1;
wraddr <= 0;
end
else
if(csi_hsync == 1 && vsync_passed == 1)
begin
if(pixel_counter == 0)
begin
pixel_counter <= pixel_counter + 1;
subpixel <= csi_data;
end
else
begin
current_pixel <= { subpixel, csi_data };
pixel_counter <= pixel_counter + 1;
wraddr <= wraddr + 1;
end
end
else
begin
if(write_pixel == 1)
pixel_counter <= pixel_counter + 1;
else
pixel_counter <= 0;
end
end
end
assign wrreq = (write_pixel == 1) && pixel_counter > 2 ? wrclk1 : 0;
assign wrclk = csi_pclk;
endmodule</code></pre>
<p> 在TOP加入应对的模块,设置好模式,摄像头如下所示:</p>
<p> </p>
<p>e9feeb3ffbba5ed4b5fc9ad34a2a11a0</p>
<p> </p>
<p>后续尝试结合SD卡,把摄像头的数据存入SD卡中,这还需要研究下SD卡是如何保存成视频格式的,加油~~~</p>
<p> </p>
<p><br />
</p>
<p>加油加油,sd卡的,小虾搞过@littleshrimp</p>
<p>加油加油,sd卡的,小虾搞过 @littleshrimp </p>
<p>期待你继续弄SD卡 我的SD卡IP一直没调通 想进一步测试发现有一些信号没法添加到逻辑分析仪里</p>
页:
[1]