今日入手了一块正点原子家OV7725摄像头模块,这是一篇关于模块内部的AL422B-FIFO芯片的学习笔记。学习资料为野火家的相关模块视频教程。链接如下:【单片机】野火STM32F103教学视频 (配套霸道/指南者/MINI)【全】(刘火良老师出品) (无字幕)_哔哩哔哩_bilibili

STM32F4系列的控制器主频高、一般会扩展外部SRAM、SDRAM等存储器。且具有DCMI外设,故可以与OV7725直接进行硬件通讯,速度更快。

而STM32F1系列的控制器一般主频较低、为节省成本可能不扩展SRAM存储器,而且不具有DCMI外设,难以直接接收和存储OV7725图像传感器输出的数据。

那么为何需要扩展 FIFO 呢?我们举例进行说明:
        OV7725能够设置的分辨率有 240*320 或 640*320 ,假设为 240*320;

则一帧图像占的字节数为:240*320*2(一个像素占两字节) = 153600;

153600/1024 = 150.0 KB ;

然而我所使用的STM32F1ZET6的内部SRAM仅为 64KB,连一帧的图像都存储不了;

所以在扩展了FIFO后能够利用FIFO缓存数据图像,stm32再慢慢提取处理数据。

AL422B的容量大小为393216字节,至少能够缓存两帧 240*320 的图像。但如果选择分辨率为 640*320 的话, 640*320*2 = 409600 > 393216,也就是说FIFO连一帧图像数据也缓存不了,这时候需要OV7725一边往FIFO写入数据,stm32一边从FIFO读出来,确保在OV7725覆盖旧数据前,stm32端已经把这部分数据读取出来了。

AL422B芯片引脚图和功能图:

AL422B芯片引脚图
管脚名称 管脚类型

管脚描述

DI [0:7] 输入 数据输入引脚
WCK 输入 数据输入同步时钟
/WE 输入 写使能信号,低电平有效
/WRST 输入 写指针复位信号,低电平有效
DO [0:7] 输出 数据输出引脚
RCK 输入 数据输出同步时钟
/RE 输入 读使能信号,低电平有效
/RRST 输入 读指针复位信号,低电平有效
/OE 输入 数据输出使能,低电平有效
TST 输入 测试引脚,实际使用时设置为低电平

由于AL422B支持同时写入和读出数据,所以它的输入和输出的控制信号线都是互相独立的。写入和读出数据的时序类似,跟VGA的像素输出时序一致,AL422B读写时序介绍如下:

写时序

读时序

FIFO的读时序类似,不过读使能由两个引脚共同控制,即OE和RE引脚均为低电平时,输出处于使能状态,随着读时钟RCK的运转,在数据输出管脚 DO[0:7] 就会按地址递增的方式输出数据。

摄像头的驱动原理

        OV7725摄像头模块中包含有FIFO,所以外部控制器驱动摄像头时,需要协调好FIFO与OV7725传感器的关系,下面配合摄像头的原理图介绍驱动原理。

原理图主要分为外部引出接口、OV7725及FIFO部分。

OV7725

AL422B

引出接口

引出的引脚功能说明

XCLK外接晶振

摄像头控制过程图

整个摄像头的采集过程:
摄像头本身有个OV7725传感器,背面有FIFO。
假如说OV7725跟stm32直接相连的话,由于OV7725输出的时钟很快,比24hz还高,超过stm32读取的速度。所以我们不希望这样直接读取7725的内容,而且32的sram空间不够大,根本无法完整地接收一帧图像。
所以stm32利用fifo。stm32通过读取ov7725的vsync信号,当出现vsync信号的时候,即7725输出了一帧,那32就让7725把ov7725的数据输出来的图像写入到FIFO(即这个时候控制FIFO去使能)(即图片中的"允许ov7725允许向fifo写入数据")。当检测到第二次vsync的时候,就表示一帧的图像结束,AL422B中存储了一帧的图像数据。
那么stm32就控制WE引脚输出高电平,即fifo不能写入(比前能写入状态是因为32控制WE为低电平)。这样子ov7725输出的图像数据就不能写入fifo了。ov7725的图像数据是一直在输出的,所以我们通过控制WE来控制fifo是否接受数据。

如图所示,WEN和HREF通过与非门对WE进行控制。只有WEN、HREF都为高电平时,WE才为低电平(有效),才能写入数据到FIFO。
当我们禁止了fifo接受图像数据时,stm32就赶紧地从fifo把刚刚缓存的那帧图像读回来。但!刚刚又有提及stm32的sram没法完全地缓存一帧图像,但是因为图像数据已经缓存在fifo内了,我们可以慢慢来读,也就没有必要一次性读一帧了,stm32可以自己控制fifo的时钟(RCK)慢慢地读回来,可以把速度调到32可以接收的速度去读取(而不是像7725那样速度快到32都来不及读取)。
由于sram太小,我们可以一行一行地读。即240/320×2=480/640字节,这对32来说是肯定可以接受的。那么我们可以这样处理(处理方法之一而已):如果我们想要直接把数据显示在液晶屏上,那我们可以直接把这一行数据通过32的fsmc传给液晶屏的ILI9341,那液晶屏也就可以一行一行地显示出来。
当32处理完一帧数据之后,又重复图片中的步骤继续传输!

OV7725之AL422B-FIFO及摄像头的驱动原理相关推荐

  1. OV7670 FIFO 30W摄像头介绍(四) --- OV7670上位机验证驱动

    在介绍OV7670之前先附上模块链接:点击购买OV7670摄像头模块 介绍代码前,首先来看之前写的文章: OV7670 FIFO 30W摄像头介绍(一) - 整体介绍/SCCB时序 OV7670 FI ...

  2. 虚拟摄像头驱动原理及开发

    (以下所说的都是基于微软的windows平台)                类似功能的产品,如著名的e2eSoft的 VCam,国内新浪的9518虚拟视频, 新浪的虚拟视频是DirectShow应用 ...

  3. (兼容正点原子引脚)OV7670 FIFO 30W摄像头介绍(二) --- 寄存器图示说明

    在介绍OV7670之前先附上模块链接:点击购买OV7670摄像头模块 前面的文章介绍了OV7670以及SCCB的代码 (兼容正点原子引脚)OV7670 FIFO 30W摄像头介绍(一) - 整体介绍/ ...

  4. ubuntu18.04安装Realsense D435i 摄像头的驱动SDK和ROS Wrapper

    ubuntu18.04安装Realsense D435i 摄像头的驱动SDK和ROS Wrapper 2022年更新: 安装教程同:进更新安装包下载方式和下载链接--见文末. 1.安装Realsens ...

  5. 乐视 LeTMC-520体感摄像头 ROS驱动

    乐视 LeTMC-520体感摄像头 ROS驱动 我以为它的驱动跟Xtion是一样的,其实它的驱动是奥比中光的,安装驱动参考这篇文章

  6. 摄像头ISP系统原理(下)

    摄像头ISP系统原理(下) l WDR(Wide Dynamic Range)------宽动态 动态范围(Dynamic Range)是指摄像机支持的最大输出信号和最小输出信号的比值,或者说图像最亮 ...

  7. LoRa SX1278/76驱动原理 附代码

    LoRa SX1278/76驱动原理 附代码 原理解释 LoRa 关键参数说明 前导码: 报头: 显式报头模式: 隐式报头模式: LoRa 调制解调: 扩频因子: 编码率: 信号带宽: 代码说明 SP ...

  8. 第三阶段应用层——2.6 视频监控—CMOS摄像头的硬件原理

    视频监控-CMOS摄像头的硬件原理 硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3) 软件平台:运行于VMware Workstation 12 Player下UbuntuLTS16.0 ...

  9. 摄像头ISP系统原理(中)

    摄像头ISP系统原理(中) · AF(FOCUS)----自动对焦 根据光学知识,景物在传感器上成像最清晰时处于合焦平面上.通过更改 LENS 的位置,使得景物在传感器上清晰的成像,是 ISP FOC ...

  10. 摄像头ISP系统原理(上)

    摄像头ISP系统原理(上) ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号.它在相机系统中占有核心主导的地位,是构成相机的重要设备. 主 ...

最新文章

  1. 【Leetcode】大神总结的所有TopK问题模板(基于快速排序)
  2. mybatis学习笔记四(动态sql)
  3. 一起来学习丨听海华大赛第一名团队聊比赛经验和心得
  4. html中播放的语法是什么,css语法是什么?
  5. 【用jersey构建REST服务】系列文章
  6. 计算机二级c语言程序设计题评分标准,计算机二级C语言题型和评分标准
  7. 智能语音机器人系统介绍
  8. ico图标制作的在线工具
  9. 如何设置快速启动栏 win7 快速启动栏 快速启动栏不见了
  10. jQuery-WEUI的Uploader实现上传多张图片并且限制上传数量的方法
  11. 针对华为产品,如何在小红书宣传中发布有关图文笔记并达到最佳效果?
  12. 讲讲如何将图片格式转化成base64格式的
  13. Vue插件报错:Vue.js is detected on this page.
  14. Java开发者跳槽指南面试篇
  15. c语言case套case,switch…case
  16. 【基础篇】C#基础知识——面向对象
  17. 物联卡中心:怎么判断是不是物联卡?
  18. 机器学习(十二)-基于规则的分类器
  19. c语言程序设计3000字论文,考核体系毕业论文提纲范文 c语言和c语言程序设计方面有关论文范文文献3000字...
  20. NPP VIIRS卫星数据介绍

热门文章

  1. 导向滤波-Guided Image Filtering
  2. AWS ARN 学习
  3. 隐藏的BUG探讨——从“Y2K”问题到“2038”年问题
  4. servlet3 文件上传
  5. 猴子排序算法_猴子排序-有史以来最慢的排序算法?
  6. OSChina 周二乱弹 ——女孩在身上纹了个四叶草
  7. Web 自动化神器 TestCafe(二)—元素定位篇
  8. php中file_get_contents与curl性能比较分析
  9. access工资明细表_利用ACCESS数据库报表功能制作工资条
  10. 【深度学习笔记(九)】之物体的分类与定位