嵌入式系列文章
参考:《STM32F429_DM00031020_ENV19.pdf》
本文目的:翻译STM32F429的PRM,深入理解DCMI接口的工作原理,最后将DCMI工作原理转换成驱动代码。
DCMI:Digital camera interface,数字摄像头接口

15.1 介绍

数字摄像头接口是一种同步并行的接口,可以从外部8位、10位、12位或14位宽的CMOS摄像头模组获取高速数据流。支持不同的数据格式:YCbCr4:2:2/RGB565渐进式视频和压缩的数据(JPEG)。
这个接口用于黑白相机、X24和X5相机(24倍变焦和5倍变焦?),并且假设所有预处理(如调整大小)都在相机模块中执行。

15.2 DCMI主要功能

· 8-,10-,12-,或 14-位并行接口;
· 内嵌式或硬线式的行和帧同步;
· 连续或快照模式;
· 裁剪功能;
· 支持下面的数据格式:
– 8/10/12/14位渐进式视频:黑白单色或原始格式.raw原始格式.raw原始格式.raw
– YCbCr 4:2:2YCbCr 4:2:2YCbCr 4:2:2渐进式视频(渐进式progressive,翻译成“逐行扫描”更合适,与interlace隔行扫描相对应)
– RGB 565渐进式视频
– 压缩数据:JPEG

15.3 DCMI针脚


全部是输入引脚。

15.4 DCMI时钟

DCMI时钟2个时钟域:像素时钟PIXCLK和模块时钟HCLK。在信号稳定后,跟随PIXCLK产生的信号在HCLK的上升沿被采样。HCLK域会产生一个使能信号,用于指示来自相机的数据已经稳定且能被采样。PIXCLK的最小周期必须大于2.5倍的HCLK的周期。
备注:

根据STM32的时钟树,假设HCLK配置成180MHz,那么PIXCLK最大的频率不能超过180/2.5=72MHz,对某些相机接口来说,这个频率最大只能采集720p的图像。

15.5 DCMI功能概览

DCMI是一个同步并行接口,可以接收高速(最大可达54MByte/s)数据流。包括高达14根数据线(D13-D0)和一根像素时钟线。像素时钟线极性可编程,这样数据可以在像素时钟的上升沿或下降沿进行捕获。
数据被传送到一个32位的数据寄存器中(DCMI_DR),然后通过通用的DMA通道进行传输。图像缓存由DMA来管理,而不是DCMI接口来管理。
接收到的数据可以组织成行/帧(YUV/RGB/raw模式)或可以是JPEG图像序列。要使能JPEG图片接收,必须设置JPEG位(DCMI_CR寄存器的bit3)。
数据流可以使用HSYNC(水平同步)和VSYNC(垂直同步)这种硬线方式,也可以使用内嵌到数据流中的同步码的方式进行同步。
下图是DCMI模块框图:

下图是DCMI模块顶层视图:

15.5.1 DMA接口

当DCMI_CR寄存器中的CAPTURE位被设置时,DMA接口就会被激活。每次DCMI接收到32位的数据时就会产生一次DMA请求。

15.5.2 DCMI物理接口

接口包含11/13/15/17根输入线(分别对应8/10/12/14位宽),只支持从设备模式。
接口的位宽取决于DCMI_CR寄存器的EDM[1:0]位。如果位宽小于14,则没使用的数据引脚则不能被复用为DCMI接口。

数据由PIXCLK进行同步,并且根据极性配置,在像素时钟的上升或下降沿进行改变。(备注:数据的改变由PIXCLK来驱动,DCMI内的数据采样是HCLK的上升沿)
HSYNC表示行数据的开始和结束;
VSYNC表示帧数据的开始和结束;
下图是DCMI 信号的时序图:

1、图中捕获沿是PIXCLK的下降沿,HSYNC和VSYNC的激活状态是1。
1、HSYNC和VSYNC可以同时改变。
● 8位数据
当DCMI_CR中的EDM[1:0]配置为00,则接口从输入接口D[0:7]中捕获8位LSB数据,并把它们存储为8位数据,而D[13:8]就被忽略。这样获取32位的数据需要4个像素时钟周期。
最先捕获的数据放在32位数据的低地址处,而第4次捕获到的数据放在高地址处,如下图所示:

● 10位数据
当DCMI_CR中的EDM[1:0]配置为01,则DCMI从输入引脚D[0…9]获取10位数据存入16位数据的低10位。剩下的高位(DCMI_CR的bit11~15)配置为0。这样32位数据需要2个像素时钟周期可填满。
存放方法同样是先来的数据存放在低地址处,如下图所示:

12bit和14位同理。

15.5.3 同步

DCMI接口支持内嵌码或硬线(HSYNC和VSYNC)同步。在使用内嵌码同步时,数字摄像头模块必须保证0x00和0xFF只用于同步,而不是数据。内嵌码同步模式仅支持8位并行数据宽度(这样,DCMI_CR寄存器的EDM[1:0]位必须要清零)。
对于压缩的数据,DCMI只支持硬线同步模式。这样VSYNC作为图像的开始/结束,而HSYNC作为数据有效的信号。下图是JPEG的时序图:

● 硬线同步模式
在硬线同步模式下,使用了两个同步信号(HSYNC和VSYNC)。
根据相机模组,数据会在水平/垂直同步期间传输。HSYNC/VSYNC 信号的作用类似于消隐信号,因为在 HSYNC/VSYNC 有效期间接收到的所有数据都将被忽略。(备注:HSYNC/VSYNC有效期间应该是指作为消隐信号时的有效期间)
为了正确地将图片传入DMA/RAM的缓存,数据需要在VSYNC信号的同步下进行传输。当使用硬线同步模式,且使能捕获(设置DCMI_CR的CAPTURE位),则数据传输由VSYNC的非激活状态(下一帧的开始)进行同步。
传输可以连续地,通过使用DMA将连续的帧传输到连续的缓存区或相同/循环的缓存区中。为了允许DMA管理连续的帧,VSIF(垂直同步中断标志)会在每帧结尾进行激活。
● 内嵌码同步模式
在这种同步模式下,数据流使用嵌入在数据流中的 32 位代码进行同步。 这些代码使用数据中不再使用的 0x00/0xFF 值。 有 4 种类型的代码,均采用 0xFF0000XY 格式。 嵌入式同步代码仅在 8 位并行数据宽度捕获中受支持(在 DCMI_CR 寄存器中,EDM[1:0] 位应编程为“00”)。 对于其他数据宽度,此模式会产生不可预知的结果,不得使用。
注意:相机模块可以有 8 个这样的代码(在交错模式下)。 出于这个原因,相机接口不支持交错模式(否则每隔半帧就会被丢弃)。
· 模式2
四个嵌入代码表示以下事件
– 帧开始:Frame start (FS)
– 帧结束:Frame end (FE)
– 行开始:Line start (LS)
– 行结束:Line end (LE)
四个代码的 0xFF0000XY 格式的 XY 值是可编程的(参见第 15.8.7 节:DCMI 嵌入式同步代码寄存器(DCMI_ESCR))。
[备注]:DCMI_ESCR寄存器:
`DCMI_ESCR寄存器

FEC:Frame end delimiter code,帧结束分隔代码
该字节指定帧结束分隔符的代码。 代码由 0xFF、0x00、0x00、FEC 形式的 4 个字节组成。如果 FEC 编程为 0xFF,则所有未使用的代码 (0xFF0000XY)解释为帧结束分隔符。
LEC: Line end delimiter code,行结束分隔代码
该字节指定行尾分隔符的代码。 该代码由 0xFF、0x00、0x00、LEC 形式的 4 个字节组成。
LSC: Line start delimiter code,行开始分隔代码
该字节指定行起始分隔符的代码。 该代码由 4 个字节组成,形式为 0xFF、0x00、0x00、LSC。
FSC: Frame start delimiter code,帧起始分隔代码
如果 FSC 编程为 0xFF,则不会检测到帧起始分隔符。 但是,FEC 代码之后第一次出现的 LSC 将被解释为帧分隔符的开始。
0xFF被编程为“帧结束” ,意味着所有未使用的代码都被解释为有效的帧结束代码。
在此模式下,一旦启用了相机接口,帧捕获在第一次出现帧结束 (FE) 代码后开始,然后是帧开始 (FS) 代码。
· 模式1
另一种编码是相机模式 1。此模式与 ITU656 兼容。 这些代码标志着另一组事件:
– SAV(活动行)- 行开始
– EAV(活动行)- 行结束
– SAV(消隐)- 帧间消隐期间的行尾
– EAV(消隐) - 帧间消隐期间的行尾
通过编写以下代码可以支持此模式:
• FS ≤ 0xFF
• FE ≤ 0xFF
• LS ≤ SAV (active)
• LE ≤ EAV (active)
还为帧/行开始和帧/行结束代码实现了嵌入的非屏蔽码。 使用它,可以仅将选定的未屏蔽位与编程代码进行比较。 因此,您可以在嵌入代码中选择一个位进行比较并检测帧/行开始或帧/行结束。 这意味着帧/行开始和帧/行结束可以有不同的代码,但未屏蔽的位保持相同。
例如:
FS = 0xA5
FS的非屏蔽码是0x10
在这种情况下,帧起始码嵌入在帧起始码的第 4 位。
备注:非屏蔽码位取0表示屏蔽,1表示未屏蔽,通过屏蔽码,可以选择某个位作为同步信号,而被屏蔽的位可以取其他的值。对STM32来说,只关注未屏蔽未,只要未屏蔽位出现同步信号就会进行同步。

15.5.4 捕获模式

DCMI接口支持2种捕获模式:快照模式(单帧)和连续抓取。
● 快照模式(单帧)
在这种模式下,可以捕获到一个单帧(DMCI_CR寄存器中的CM=1)。在DCMI_CR的CAPTURE位被置位,在采样数据之前,DCMI接口要等待检测到一个帧启动信号。在完成第一帧的数据接收后,DCMI会自动除能(CAPTURE位被清零)。如果使能了中断则此时会产生一个中断。
当发生超限事件(overrun),则帧被丢弃,并且CAPTURE位被清零。快照模式下的时序图如下图所示:

这里HSYNC和VSYNC的激活状态都是1,这两个信号可以同时变更状态。
● 连续抓取模式
在这种模式下(DCMI_CR的CM位为0),一旦DCMI_CR中的CAPTURE位被设置,则抓取程序会在下一个VSYNC信号或内嵌码模式下的帧开始FS信号到来后启动。该进程会一直持续直到CAPTURE位被清零。 一旦CAPTURE位被清零,抓取进程会持续到当前帧结束。

在连续抓取模式下,你可以配置DCMI_CR寄存器中的FCRC位来抓取所有图像、每两帧抓一帧,或每四帧抓一帧,来减少帧的捕获率。
注意:在硬线同步模式下(DCMI_CR的ESS=0),IT_VSYNC中断依然会在CAPTURE=0时产生,所以,为了减少帧率,IT_VSYNC中断可以用来累计两次捕获的帧数,并且和快照模式结合起来用。这在内嵌码模式下是不允许的。

15.5.5 裁剪功能

使用裁剪功能,DCMI接口可以在接收到的图片中选取一个矩形窗。起点(左上角)坐标和大小(水平维度是像素时钟个数,而垂直维度是行数)由两个32位的寄存器(DCMI_CWSTRT和DCMI_CWSIZE)来指定。窗口的大小水平维度是像素时钟的个数,垂直维度是行数。

这些寄存器指定了捕获窗口的起始坐标,一个是行数(在一帧中是从0开始),一个是像素时钟数(在一行中是从0开始),还指定了窗口的大小,即行数和像素时钟数。DCMI_CSIZE中的CAPCNT值只能是4的倍数,这样才能正确地使用DMA进行传传输。
如果VSYNC在DCMI_CSIZE寄存器中的行数到达之前被激活,则捕获停止且IT_FRAME中断产生。

15.5.6 JPEG格式

为了允许JPEG格式图像的接收,需要设置DCMI_CR寄存器中的JPEG位。JPEG图片不是以行和帧的格式存储,所以VSYNC作为捕获的起始信号,而HSYNC作为数据使能信号。一行的数据字节数不一定是4的倍数,所以你需要小心处理这种情况,因为一个DMA请求是每次完成32位数据传输才会产生的。如果检测到了帧结束,但是32位数据没完全传输完,则剩下的数据会是0,而且产生DMA请求。
裁剪功能和内嵌码同步码不支持在JPEG格式下使用。

15.5.7 FIFO

一个四字的FIFO用来管理传输到AHB总线上的数据率。DCMI接口具备一个简单的FIFO控制器,每次从AHB接口读的时候增加读指针,每次往FIFO中写数据的时候增加写指针。这里没有过载保护以防止数据被写覆盖,如果AHB接口不支持该数据传输率的话。
一旦产生过载或同步信号的错误,则FIFO会被复位,并且DCMI等待新的帧启动信号。

15.6 数据格式描述

15.6.1 数据格式

支持三种类型的数据:
● 8位的渐进视频;
● YCbCr 422
● RGB565
压缩数据:JPEG
对黑白数据、YUV、RGB数据来说,最大输入尺寸是2048*2048。JPEG格式下没限制。
对于单色、RGB 和 YCbCr,帧缓冲区以光栅模式存储。使用32bit的数据宽度。只支持小端模式。下图是像素光栅扫描顺序。

15.6.2 单色格式

特点:
● 光栅格式
● 每个像素8位
下图展示了这种数据的存储方式:

15.6.3 RGB格式

特点:
● 光栅格式
● RGB
● 交错的:一个缓存中RGB交错,BRGBRGBRG等
● 针对显示输出进行了优化
RGB 平面格式与标准 OS 帧缓冲区显示格式兼容。只支持16BPP(bits per pixel),每32位数据2个像素。24BPP和灰度格式不支持。像素以光栅扫描顺序存储,即像素行从上到下,像素行内从左到右。 像素分量是 R(红色)、G(绿色)和 B(蓝色)。 所有组件都具有相同的空间分辨率(4:4:4 格式)。 一帧存储在一个单独的部分中,组件以像素为基础交错。下图是RGB565的存储格式:

15.6.4 YCbCr格式

特点:
● 光栅格式
● YCbCr 422
● 交错:一个缓存中,Y,Cb和Cr交错。
像素分量是 Y(亮度或“亮度”)、Cb 和 Cr(色度或“色度”蓝色和红色)。 每个分量都以 8 位编码。 亮度和色度存储在一起(交错),如下图 所示。

15.7 DCMI中断

产生五个中断。所有中断都可以被软件屏蔽。全局中断(IT_DCMI)是所有单个中断的逻辑或。下图是所有中断的列表。

15.8 寄存器描述

【未完待续】

STM32F429之DCMI 数字相机接口相关推荐

  1. 工业相机选型:相机接口

    工业相机选型:相机接口 面对市面上出现的越来越多的工业相机品牌,各相机厂商都给出了大量的相机参数,例如:相机接口.芯片类型.量子效应.帧率等.一般非行业内人士,在面对这些参数时往往会无所适从.维视图像 ...

  2. 机器视觉系统设计数字相机与模拟相机的优势比较

    机器视觉被应用于自动质量检验.工艺控制.参数测量和自动组装等等许多领域.在这些系统中,相机是决定着成本.速度和精度的关键组件.工业模拟相机和工业数字相机都可以用在这些系统中,而了解工业相机的性能规格及 ...

  3. 数字音频接口(I2S,PCM/TDM)

    概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信号的方式.相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI在 ...

  4. 《视频解密》中文版(第四版) 第六章 数字视频接口(第三部分)

    视频模块接口(VMI) 视频模块接口(VMI)开发用于不同多媒体IC生产商的互联.它的目标是如MPGE解码器,NTSC/PAL解码器和图像芯片的视频接口标准化. 图6.39 VMI 8比特 4:2:2 ...

  5. 数字音频接口(I2S,PCM/TDM,PDM)

    概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信号的方式.相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI在 ...

  6. 数字音频接口 I2S、PCM、TDM 、PDM比较

    目录 1. 前言 2. 数字音频接口 2.1. I2S接口 2.2. PCM/TDM接口 2.2. PDM接口 3. 附录 3.1. PCM编码 3.2. PDM编码 1. 前言 本文介绍的数字音频接 ...

  7. 数字音频接口(二) 高通平台MI2S总线调试

    硬件平台:高通SM6125 基线代码:LA.UM.8.11.1.c1 git clone https://git.codelinaro.org/clo/la/platform/vendor/opens ...

  8. 《视频解密》中文版(第四版) 第六章 数字视频接口(第二部分)

    SDTV-隔行扫描 支持的分辨率,以及它们各自的不同宽高比及帐率如下: 720×480i          4:3                29.97Hz 720×576i          4 ...

  9. TI TMDS181IRGZT 数字视频接口/高清多媒体接口重定时器

    TMDS181IRGZT 是一款数字视频接口(DVI) 或高清多媒体接口(HDMI™) 重定时器.TMDS181IRGZT支持四条TMDS 通道,音频返回通道(SPDIF_IN/ARC_OUT) 和数 ...

  10. micropython i2s_数字音频接口(I2S,PCM/TDM,PDM)

    概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信号的方式.相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI在 ...

最新文章

  1. C++、嵌入式软开之数据结构
  2. public/private/protected/默认 的各种理论上的区别
  3. Android 6种快速开发框架
  4. 三羊献瑞(暴力破解)
  5. springcloud 相同服务名_浅谈分布式与微服务
  6. webm格式怎么转换成mp4?几步就能够完成转换
  7. 微信语音怎么转发给别人_微信怎么把语音转发给别人?看看网友怎么说?原来方法这么简单...
  8. vue axios封装及使用
  9. 手机扫码枪app,二维码识别,二维码信息自动推送至电脑的(Excel,软件,记事本)等位置。
  10. 帆软客户画像分析与客户价值模型
  11. 运营者想针对公众号吸粉做一些运营活动,怎么做?
  12. Unexpected console statement
  13. MDK5 代码折叠功能
  14. 【飞思卡尔】飞思卡尔摄像头算法基本方法
  15. 区块链随机数-区块链随机数的实现方案
  16. 大型网站架构技术演进(史上最全)
  17. 无法定位程序输入点?isPublicID@QXmlUtils@@SA_NAEVVQString@@@Z于动态链接库 D:\Qt\Qt5.7.0\5.7\msvc2015_64\bin\Qt5Cored
  18. python协同过滤电影推荐的论文_协同过滤?教你用Python实现协同过滤
  19. php scada,科远风场SCADA系统的应用
  20. 哈工大计算机网络物理层总结

热门文章

  1. 【窗口置顶神器】DeskPins
  2. 3 基于采样的路径规划 —— RRT算法
  3. HL7协议介绍(一)
  4. 基于html5的城市公交查询系统,城市公交在线查询系统的设计与实现
  5. 快速比对源代码的工具_推荐7个代码对比工具
  6. 智能门锁的优劣,我们应该如何有效识别?
  7. 需求调研报告模板_培训需求调研报告不会写,遇到问题咋解决?
  8. JAVA输入输出流实现文件复制
  9. 数据分析 - Kaggle TMDB 票房预测
  10. html 拦截境外ip,Windows服务器系统怎么屏蔽国外IP的访问