发新帖我要提问
12
返回列表
打印
[应用相关]

stm32 霸道驱动OV7725 摄像头

[复制链接]
楼主: dingbo95
手机看帖
扫描二维码
随时随地手机跟帖
21
dingbo95|  楼主 | 2018-10-31 20:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
FIFO 读写时序
STM32F4 系列的控制器主频高、 一般会扩展外部 SRAM、 SDRAM 等存储器,且具有DCMI 外设,可以直接根据 VGA 时序接收并存储摄像头输出的图像数据;而 STM32F1 系列的控制器一般主频较低、 为节省成本可能不扩展 SRAM 存储器,而且不具 DCMI 外设,难以直接接收和存储 OV7725 图像传感器输出的数据。

使用特权

评论回复
22
dingbo95|  楼主 | 2018-10-31 20:14 | 只看该作者
为了解决上述问题, 针对类似 STM32F1 或更低级的控制器, 添加了一个型号为 AL422B 的 FIFO, 用于缓冲数据。 AL422B 的本质是一种 RAM 存储器, 见图 ,它的容量大小为 393216 字节, 支持同时写入和读出数据,这正是专门用于 FIFO 缓冲功能而设计的,关于它的详细说明可查阅《AL422_datasheet》文档。

使用特权

评论回复
23
dingbo95|  楼主 | 2018-10-31 20:17 | 只看该作者
由于 AL422B 支持同时写入和读出数据, 所以它的输入和输出的控制信号线都是互相独立的。写入和读出数据的时序类似,跟 VGA 的像素输出时序一致

使用特权

评论回复
24
dingbo95|  楼主 | 2018-10-31 20:18 | 只看该作者
写 FIFO时序




使用特权

评论回复
25
dingbo95|  楼主 | 2018-10-31 20:18 | 只看该作者
在写时序中,当 WE 管脚为低电平时, FIFO 写入处于使能状态,随着读时钟 WCK 的
运转, DI[0:7]表示的数据将会就会按地址递增的方式存入 FIFO;当 WE 管脚为高电平时,
关闭输入, DI[0:7]的数据不会被写入 FIFO。
在控制写入数据时,一般会先控制写指针作一个复位操作: 把 WRST 设置为低电平,
写指针会复位到 FIFO 的 0 地址,然后 FIFO 接收到的数据会从该地址开始按自增的方式写

使用特权

评论回复
26
dingbo95|  楼主 | 2018-10-31 20:20 | 只看该作者
读 FIFO 时序



使用特权

评论回复
27
dingbo95|  楼主 | 2018-10-31 20:21 | 只看该作者
FIFO 的读时序类似,不过读使能由两个引脚共同控制,即 OE 和 RE 引脚均为低电平时, 输出处于使能状态,随着读时钟 RCK 的运转,在数据输出管脚 DO[0:7]就会按地址递增的方式输出数据。
类似地, 在控制读出数据时,一般会先控制读指针作一个复位操作: 把 RRST 设置为低电平, 读指针会复位到 FIFO 的 0 地址,然后 FIFO 数据从该地址开始按自增的方式输出。

使用特权

评论回复
28
dingbo95|  楼主 | 2018-10-31 20:23 | 只看该作者
摄像头采集数据的过程如下:
(1) 利用 SIO_C、 SIO_D 引脚通过 SCCB 协议向 OV7725 的寄存器写入初始化配置;
(2) 初始化完成后, OV7725 传感器会使用 VGA 时序输出图像数据, 它的 VSYNC 会
首先输出帧有效信号(低电平跳变) , 当外部的控制器(如 STM32) 检测到该信
号时, 把 WEN 引脚设置为高电平,并且使用 WRST 引脚复位 FIFO 的写指针到 0
地址;
(3) 随着 OV7725 继续按 VGA 时序输出图像数据, 它在传输每行有效数据时, HREF
引脚都会持续输出高电平, 由于 WEN 和 HREF 同时为高电平输入至与非门, 使
得其连接到 FIFO WE 引脚的输出为低电平,允许向 FIFO 写入数据, 所以在这期
间, OV7725 通过它的 PCLK 和 D[0:7]信号线把图像数据存储到 FIFO 中, 由于前
面复位了写指针,所以图像数据是从 FIFO 的 0 地址开始记录的;
(4) 各行图像数据持续传输至 FIFO, 受 HREF 控制的 WE 引脚确保了写入到 FIFO 中
的都是有效的图像数据, OV7725 输出完一帧数据时, VSYNC 会再次输出帧有效
信号,表示一帧图像已输出完成;
(5) 控制器检测到上述 VSYNC 信号后,可知 FIFO 中已存储好一帧图像数据, 这时控
制 WEN 引脚为低电平,使得 FIFO 禁止写入, 防止 OV7725 持续输出的下一帧数
据覆盖当前 FIFO 数据;
(6) 控制器使用 RRST 复位读指针到 FIFO 的 0 地址,然后通过 FIFO 的 RCLK 和
DO[0:7]引脚, 从 0 地址开始把 FIFO 缓存的整帧图像数据读取出来。 在这期间,
OV7725 是持续输出它采集到的图像数据的,但由于禁止写入 FIFO,这些数据被
丢弃了;
(7) 控制器使用 WRST 复位写指针到 FIFO 的 0 地址,然后等待新的 VSYNC 有效信
号到来,检测到后把 WEN 引脚设置为高电平, 恢复 OV7725 向 FIFO 的写入权限,
OV7725 输出的新一帧图像数据会被写入到 FIFO 的 0 地址中, 重复上述过程。

使用特权

评论回复
29
dingbo95|  楼主 | 2018-10-31 20:28 | 只看该作者
后续驱动留到下次分享

使用特权

评论回复
30
dingbo95|  楼主 | 2018-10-31 20:29 | 只看该作者
huangcunxiake 发表于 2018-10-31 19:35
这个摄像头用的人还挺多的。

是的,比较好用

使用特权

评论回复
31
dingbo95|  楼主 | 2018-10-31 20:29 | 只看该作者
huangcunxiake 发表于 2018-10-31 19:35
这个摄像头用的人还挺多的。

30w的分辨率 FIFO 可以存两张图片

使用特权

评论回复
32
hanzhen654| | 2018-10-31 21:11 | 只看该作者
这个用的最多,就是不能做图像处理吧

使用特权

评论回复
33
huzi2099| | 2018-11-1 08:11 | 只看该作者
本帖最后由 huzi2099 于 2018-11-1 08:13 编辑

stm32驱动摄像头最好用dcmi直接驱动,缓存芯片意义不大,因为多数图像处理操作基本都要做逐像素处理,配合dma的dcmi传输.
楼主这个实不怎么样.

使用特权

评论回复
34
wowu| | 2018-11-6 15:55 | 只看该作者
难道不用专用额驱动芯片吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则