DCMI接口

article/2025/9/20 15:49:29

目录

DCMI数字摄像头接口

DCMI引脚

摄像头引脚

操作过程与通信方式

硬件连接图

写操作

读操作

图像输出

数据格式

rawRGB

 YUV

RGB

JPEG

代码实现过程简述

学习过程的问题

YUV是亮度和色度的格式,为什么UV中取Cb蓝和Cr红作为色度?

提问MIPI、DVP、DCMI是什么关系?


DCMI数字摄像头接口

同步并行接口,可接受外部8-14位CMOS摄像头模块的高速数据流。支持YUV,RGB原始的按行帧格式组织的图像数据(具体见下文数据格式),也支持JPEG格式压缩的数据流。

DCMI引脚

DCMI从外部接收数据,PIXCLX最高为HCLK的1/4

摄像头引脚

操作过程与通信方式

硬件连接图

写操作

数字摄像头OV2640通过类I2C实现,SCCB读写过程定义了两种写操作,分为三步或两步写操作。

三步,1发送7b从设备ID地址+读写方向,2发送从设备目标寄存器8b地址,3发送要写入寄存器的8b数据。

两步,不发送上述第3步8b数据。

读操作

两步读操作,从设备目的寄存器中读取数据。发送从设备ID+R标志(设备地址+读标志)和自由位,在二阶段中读取寄存器中的8b数据和写NA位(非应答信号)。读操作没有确定的目的寄存器地址,所以在读操作前,需有一个两步写操作提供操作的寄存器地址。

图像输出

时序有VGA\SVGA\UXGA等时序,图像输出在帧内从左到右从上到下一个像素输出,顺序可变。这里的VGA一般指640×480的屏幕分辨率,QVGA指320×240.

输出图像格式可以设置RGB565,意思数据位分别以R\G\B为基的2次多项式的16次方,即16b数据为一像素,RGB888等同理

数据格式

摄像头sensor的数据输出格式。_天际草原的博客-CSDN博客_摄像头数据格式

Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别_southcamel的博客-CSDN博客_raw rgb yuv

rawRGB

传感器基带数据,即初始模拟信号,每一像素对应一个彩色滤光片,滤光片按Bayer pattern分布,将每一个像素的数据直接输出。

 YUV

(YCbCr为换算后的数字信号),CCIR601 CCIR656

YUV详解数据和格式_Alex_designer的博客-CSDN博客_yuv数据

Y表示亮度,单位Luma,指灰度值;UV表示色度(Cb蓝色度 Cr红色度),描述影像色彩及饱和度,用于指定像素的颜色。存储格式分为planar和packed,前者分块存储Y\U\V像素数据,后者交叉存储YUV数据,使用一个数组存储一个像素的YU 或 YV,依次交叉,这部分可细分三种方式YUV444/422/420。若如此存储则压缩了图像,损失了信息。

RGB

RGB565 RGB555 RGB24 RGB32 ARGB(带Alpha通道)

RGB565通过raw数据进行插值获取,丢失信息,R5G3 G3B5方式存储,G多一位是因为人眼对绿色敏感。500M以上的sensor只输出RAW数据以保证比较快的输出速度。

JPEG

先经过系列转换成必要格式,如YCbCr,再进行离散余弦量化编码压缩。

代码实现过程简述

注:具体设置根据不同芯片sdk为准,以STM32F4xx系列为例

初始化I2C接口IO,时钟及使能。进行I2C功能配置,选择CLK频率、寻址长度、自身地址,时钟线占空比和角色模式等。

初始化DCMI接口IO,时钟及使能,同时使能PWDN为低,供电。

配置DCMI功能,捕获模式、信号同步方式、同步信号及像素时钟的触发方式、捕获数、数据长度等。

配置DMA/DMA2D(图形专用加速)功能。使用DMA,DMA通道、外设地址、显存地址,DMA方向自增模式、优先级、FIFO;使用DMA2D配置LCD图像显示于LCD显示相关文章中再介绍。

通过I2C写入寄存器配置数据,选择不同分辨率及图像设置等,具体可见各摄像头datasheet。

学习过程的问题

YUV是亮度和色度的格式,为什么UV中取Cb蓝和Cr红作为色度?

YUV可以转换成RGB格式,公式如下。

详解各种RGB与YUV(YCbCr)互转公式 - 简书 (jianshu.com)

这东西引出一个大坑。

提问MIPIDVPDCMI是什么关系?

MIPI是MIPI联盟定义的一个移动端处理器规范,MIPI的camera接口叫CSI,显示接口叫DSI。DVP接口直接对应DCMI接口。前者适用于高速率高分辨率,后者低于500w像素。


http://chatgpt.dhexx.cn/article/dphPuDaj.shtml

相关文章

stm32f4的数字摄像头接口(DCMI)使用

DCMI简介 STM32F4的DCMI接口包括如下信号 1,数据据输入(D[0:13]),接摄像头的数据输出。 2,水平同步(行同步)输入(HSYNC),接摄像头的HSYNC/HREF信号&#xff…

Java开发技术

1、基础技术 数据结构与算法 逻辑结构:数据对象中的数据元素之间的逻辑关系 1.集合结构:集合结构中的数据元素除了同属一个集合外,没有其他关系。 2.线性结构:线性结构中的数据元素之间是一对一的关系。 3.树形结构:树…

JAVA 中的代码生成包 CGLIB (Code Generation Library)

JAVA 中的代码生成包 CGLIB (Code Generation Library) CGLIB 是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为 JDK 的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代…

Java开发实战讲解!java开发CPU最低要求

前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。 在国内监控行业某头部企业做过一段时间的实习。 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时 间,HR 就打电话跟我约时间, 说明一下,我投的是北京 office。…

Java面试题技术类一

前端技术导航大全 1、面向对象编程的三大特性是什么? 2、String 和StringBuffer的区别 3、说出ArrayList,Vector, LinkedList的存储性能和特性 4、Collection 和 Collections的区别 5、HashMap和Hashtable的区别 6、final, finally, finalize的区别 7、Overload和Overri…

Java专项练习(三)

JAVA选择题 401、下列类定义代码,当用来声明对象car,并用Car carnew Car();实例化后,可以通过car对象直接赋值的字段是()402、以下哪个不是Collection的子接口?403、下列说法正确的是( )404、下面的程序将来…

Java学习汇总

6/28日已更新,错误已修改~~~有错误的地方,欢迎大家留言! 目录 一、Java基础篇 1.接口和抽象类的区别 2.重载和重写的区别 3.和equals的区别 4.异常处理机制 5.HashMap原理 6.想要线程安全的HashMap怎么办? 7.ConcurrentHa…

java面经整理

面试问题 一、Java基础1.jdk1.7到jdk1.8HashMap发生了什么变化(底层)?2.jdk1.7到jdk1.8虚拟机发生了什么变化3.String、StringBuilder、StringBuffer4.ArrayList和LinkedList有什么区别?5.ConcurrentHashMap的扩容机制6.接口和抽象…

获得阿里Java开发P7岗“农村穷苦”小伙就得安于现状?

前言 相信大家看到这个标题其实就已经可以联想到我大概是个什么样的情况了,很多人都在生活中或者是网络上甚至是家庭中都大致听过这样的话,“你这样的出生,达到现在这样的生活已经很不错了,还是别为了不切实际的梦想去冒险了&…

Java基础 常见数据结构与算法 项目总结

Java基础 1 Java基础必知必会 1.1 Java语言有哪些特点? 面向对象(封装,继承,多态);平台无关性,平台无关性的具体表现在于,Java 是“一次编写,到处运行(Wri…

Java面试知识点概览(持续更新)

Java 基础 说说自定义注解的场景及实现 利用自定义注解,结合SpringAOP可以完成权限控制、日志记录、统一异常处理、数字签名、数据加解密等功能。 实现场景(API接口数据加解密) 1)自定义一个注解,在需要加解密的方法上添加该注…

java开发工程师面试总结

面试中常被问到的问题 介绍jvmjvm内存模型程序计数器虚拟机栈本地方法栈方法区堆 垃圾回收判断对象是否存活引用计数算法可达性分析算法 垃圾收集算法复制算法标记清除算法,标记整理算法 垃圾收集器新生代收集器SerialParNewParallel Scavenge 老年代收集器Serial O…

Java面试经验总结

目录 Java面试知识点基础常识前端基础知识Java基础知识1、**并行与并发**2、**线程与进程**3、**HashMap和HashTable区别**4、**new对象创建过程原理(在JVM),从执行的角度(其他角度待续)**4、**Volatile和Synchronized**5、**线程创建的几种方法**6、**垃…

java怎么写api接口,绝对干货

正文 下文中截图来源于朋友一个pdf版本的面经,把所以知识点的答案整理了下来,耗费他至少1个月时间,在本文最后部分把这个pdf分享给大家,觉得有用的麻烦点赞关注走一波,谢谢!!!面经中有他的知识点的答案,如下图示例,非常详细(文末有领取方式)!!! 1.数据结构与算…

Java开发校招面经

面试 当前面经欠缺:docker,k8s容器,spark,flink,hbase,hive,java网络编程(netty) 一,JAVA 重写和重载 重写:方法签名要完全相同(方…

数据结构:链表逆序输出

数据结构&#xff08;一&#xff09;&#xff1a;链表逆序输出 题目描述&#xff1a;创建一个链表&#xff0c;并将链表逆序输出&#xff0c;链表中以输入0作为结束 关键代码详解&#xff1a; 附&#xff1a;全部代码 #include<stdio.h> #include<stdlib.h> #…

链表逆序 java_链表逆序(JAVA实现)

题目:将一个有链表头的单向单链表逆序 分析: 链表为空或只有一个元素直接返回; 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继; 重复步骤2,直到q为空; 调整链表头和链表尾; 图解: 以链表A->B->C->D为例,逆序此链表。 0.初始状态 …

2-6 链表逆序及其C++实现

更多系列博文请点击&#xff1a;0-数据结构与算法链接目录 2-6 链表逆序 我只介绍两种常用方法吧&#xff0c;非递归方法 和 递归 方法 我觉得够用就行 1、非递归方法&#xff1a; 将第二个元素后面的元素依次插入到头结点后面&#xff0c; 最后再把原始第一个元素放到原…

c语言 数据结构 双向循环链表逆序

双链循环链表排序&#xff1a; 原链表&#xff1a; 1 2 3 4 5 6 7 8 9 10 逆序后&#xff1a;10 9 8 7 6 5 4 3 2 1 思路&#xff1a; 把最后一个节点删除&#xff0c; 插到head下面去 数据 1 不用管&#xff0c; 把后面的数据往 1 前面怼&#xff0c; 1自然就是最后一个了…

C语言实现链表的逆序的几种方式

文章目录 通过头插法实现的通过双指针实现链表的逆序通过栈来实现的通过递归来实现 通过头插法实现的 1、通过头插法&#xff08;两条链表&#xff09;来实现的。通过遍历原来的链表&#xff0c;将遍历得到的每一个节点都插入到新链表的头结点&#xff0c;然后遍历新链表&…