你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 DCMI的带宽与性能介绍

[复制链接]
STMCU小助手 发布时间:2023-2-14 18:20
1. 引言随着市场对更高图像质量的需求不断增加,成像技术持续发展,各种新兴技术(例如3D、计算、运动和红外线)的不断涌现。如今的成像应用对高质量、易用性、能耗效率、高集成度、快速上市和成本效益提出了全面要求。为了满足这些要求,STM32 MCU 内置的数字照相机接口(DCMI),能够高效连接并行照相机模块。! @& l  D0 ^* x' _% C
对于使用 STM32 DCMI 开发相机应用的客户,经常有以下问题:STM32 DCMI 最大支持的像素时钟是多少?STM32F4/F7/H7/U5 能支持 1280×720 的相机分辨率吗?最大的帧率是多少?如何判断所设计的应用产生的带宽是否能充足?相机输出是选择 8 位、10位、12 位、还是 14 位?" x! x% }- y: F. g2 u$ }( `' m
针对这些问题,本文档从 DCMI 使用的几个方面,介绍了 STM32 DCMI 在连续抓取模式下带宽的估算,以及提升性能需要注意的事项。客户在设计相机应用时可以参考。
* s' @$ V9 M, p2 [0 J, R) r2 f: W6 K  i0 S9 N' V

1 C* R0 W$ e- F% r& B2. STM32 DCMI
2 r- \3 s, l3 H, t% ]; ]; j: [- {STM32 数字照相机接口(DCMI)采用同步并行数据总线。它可以轻松集成并适应相机的特殊应用要求。DCMI 可连接 8、10、12 和 14 位 CMOS 照相机模块,并支持多种数据格式:8/10/12/14 位逐行视频、YCbCr4:2:2 逐行视频、RGB565 逐行视频、JPEG 等。像素最大支持 16 位色深。: f$ I4 K- K: l; K

# D* J1 h, |1 {9 V6 I2.1. STM32 智能架构中的 DCMI & S- `: C4 g( N  {  I- }0 A
DCMI 应用需要用帧缓冲区来存储采集的图像。必须根据图像大小和传输速度使用合适的目标存储区。在某些应用中,必须连接外部存储器(SDRAM),以便提供较大的数据存储空间。对于支持 DMA2D(Chrom-ART Accelerator™控制器)的 STM32 系列,也可以用它做色彩空间转换(例如 RGB565 至 ARGB8888),或使用 DMA 从一个存储区到另一个存储区的数据转移。* x2 d* [- G& c2 r
下面图 1 是 STM32F2x7 系列智能架构中 DCMI 的例子。这里 DCMI 通过 AHB2 外设总线连接到 AHB 总线矩阵。DMA2 主控访问 DCMI,将 DCMI 接收到的图像数据传输到内部 RAM 或外部 SDRAM 中,具体目标位置取决于应用。
! w; m& \; E7 d3 x' K% E8 Q# B, q: ~. [9 O) X& m( t& N3 v: s1 b
# A+ q6 l- H6 E, g7 N: a3 w
PL9T)RIR[SAO@XKJGROJ6}X.png . I" d& C/ f, R- H5 d8 f- R
# M1 K4 `; V; Q
9 ]% }1 U  i7 H9 {' {
2.2. DCMI 最大像素时钟频率, `2 y$ j5 Y: T4 L
STM32 DCMI 支持的像素时钟频率,与 AHB 时钟频率比值必须小于 0.4。具体的像素时钟频率最大值要查询所用 STM32 的数据手册。下面表 1 中列出了部分 STM32 系列DCMI 最大像素时钟频率及相关可用资源的信息。如需更详细信息,请参考相应的参考手册/数据手册。
0 _& o: |1 x2 F' K6 v3 `
$ e7 a8 X# |$ |6 Q8 m" c
1 S( o- J1 V. g& h; z  w: u5 I: ^7 ?
5Y8PUM%GGR184X%~4YE{F.png 0 q7 e. o& D% v* Z( ?

+ ~1 |2 ?8 U1 {+ `

8 n% f+ U( o4 T$ f* v$ r2.3. DCMI 支持的图像分辨率
  \8 u, T6 t1 j8 {STM32 DCMI 仅对输入像素时钟频率有硬件限制(DCMI_PCLK / fHCLK 最大 0.4),对图像的分辨率没有限制。DCMI 连续抓取模式下,图像分辨率会影响帧率(帧率的大小会影响视频的流畅度)。在固定的像素时钟频率下,高分辨率图像的带宽需求较高,对应的帧率则会下降。或者说,在相同的图像分辨率下,提高帧率需要相应地提高像素时钟频 LAT1184   LAT1184 - Rev 1.0 page 3/6 率。例如下表 2(摘自三星 S5K5CAGA CMOS Image Sensor 的数据手册)所示,大家可以从中了解 S5K5CAGA 的像素频率、图像分辨率、帧率的关系(非 RGB888,16 位色深)。另外,图像分辨率主要通过设置相机的输出格式进行修改。
- s9 C& |0 o# |& }- P6 |( u/ ]1 B& R  O

2 s8 F4 g* B. n& S8 k 5][RS%JB)MF3SGHL2ESF7)D.png + W5 r; u0 N9 O+ |% R$ K2 ^+ c7 X/ @
* ?' s$ y$ J. Y. _5 |6 {& Y

- k; k7 s9 e3 U5 R, v对于中高分辨率的图像,一般采用双缓冲区或多缓冲区模式。这个主要原因是因为DCMI 使用的 DMA 计数寄存器 SxNDTR 使用了 16 位用于计数。最大 0xFFFF,即65535 ,单位为 32 位 Word,当图像分辨率超过 65535 Words(262140 字节)时,则要使用双缓冲区或多缓冲区模式。双缓冲区地址由 DMA_SxM0AR/DMA_SxM1AR 设定。多缓冲区时,则需要动态交替 DMA_SxM0AR/DMA_SxM1AR,使之指向图像缓冲区的不同存储位置,相当于分块存储。
2 Q# e* U! u  r8 Q$ U5 B- W
& g+ c( `* p, Y  D3 b* A( y

# a6 X2 m8 _: P, p' D, X3 L2.4. DCMI 带宽与性能
& n' C1 E2 S3 {( `使用 DCMI 的相机应用,使用连续抓取模式,功能往往是由相机连续输出所摄图像数据流到 STM32,STM32 DCMI 捕获视频流后,再输出到屏幕显示(如监控)或做图像数据处理、传输等。如果相机输出的是高像素高色深高帧率的视频流,DCMI 在接收过程中,如不能及时处理,DCMI FIFO 即会产生溢出错误(Overrun),进而导致图像数据丢失,帧率下降等问题。% t0 Y3 w2 Q+ w$ d- K  j: Q
) x3 A' `. e- c& }

- N9 _/ W9 e! ^+ K: y  D6 J; R2.4.1. DCMI 带宽与性能
' A; ^* R8 m( P' \1 e: oDCMI 带宽计算公式为:带宽 = 分辨率 * 色深 * 帧率。( U# l8 e0 h: Y% J, W
以三星 S5K5CAGA 为例,如表 2 中第 1 行数据(这里相机采用 RGB565,16 位/像素,8 位输出格式),则 QXGA 输出的带宽需求 =(2048 * 1536)* 2 * 6 ≈ 38MBps。像素时钟为 40MHz,8 位输出,每 2 个 CLK 传输 1 个像素数据,对应的最大输出能力为 40MBps。则 QXGA 在 40MHz 的像素时钟频率下是可以以 6 帧/秒的帧率输入到 DCMI 的。DCMI 捕获图像数据流,再由 DMA 传输到图像缓冲区,该例中,图像缓冲区(帧缓冲区)的大小为:2048 * 1546 * 2 ≈ 6.3 MByte。8 n5 \' P" y9 G4 u6 f, u
高像素高色深的图像,对应的图像缓冲区较大。当 MCU 内置的 SRAM 不能满足DCMI 图像缓冲区需求时,则需要用外部 SDRAM 来存储。例如 STM32F469 MCU(见表1,第 6 行数据),其 FSMC 支持的最大频率为 90MHz,宽度 32 位,则 SDRAM 的带宽= 90 * 4 = 360 MBps,能够满足 DCMI 带宽的需求。一般,DCMI 图像缓冲区中的数据是需要再次传输或由 CPU 进行计算处理的,理论上 DCMI 输入的带宽需求最大不应超过SDRAM 的带宽的 50%。这里需要注意 SDRAM 可能存在多个主控(如 CPU、DMA、LTDC 等)的访问,如遇到 SDRAM 性能瓶颈问题,可考虑下列方面进行优化: : b9 T2 S7 ~! \7 v
(1)将各主控设备访问的存储器尽量分开,以减少竞争访问;+ Y# i, ~( _  a! O" K: c) _
(2)将 CPU 访问的 SDRAM Bank 与 DCMI 图像缓冲区的 Bank 分开;
+ Y! ^+ I! `% b. b(3)将 DCMI 图像缓冲区区域设为不可缓冲,CPU 访问的区域则可以设为可缓冲。- ?  Q2 \/ J! j
对于性能,另外一个重要因素是总线竞争问题。DCMI DMA 申请的 AHB 总线访问(即使在使用 FIFO 的情况下)并非长 Burst 的访问。如果 AHB 总线上存在其它长 Burst 访问(最大 1KByte),会造成 DMA 延迟访问 DCMI,令其不能及时将 DCMI FIFO 中的数据传输出去。可以认定:DCMI 需要传输数据时的总线繁忙是造成 其 FIFO 溢出错误的根源。解决办法除了直接为设备分配不同 SDRAM 之外(将长 Burst 访问放在其他SDRAM),还可以考虑在内部 SRAM 增设 DCMI LineBuffer,化零为整,巧妙避开 AHB 长 Burst 访问造成的 DCMI 延迟问题。数据流如下:
3 m. }% }9 x3 E(1)DCMI(经 DMA)=> 内部 SRAM(LineBuffer) ;
& Z0 @2 o4 n- L. i% |2 }& }(2)内部 SRAM(LineBuffer)=> 外部 SDRAM(图像 Buffer)。
5 W: j# e+ J3 C! k+ g! |+ v, W由 LineBuffer 到 SDRAM 的数据中转传输请求,可使用 DCMI IT_LINE 中断(行结束)触发。这里 MCU 如果是 STM32F7/H7 系列,还可使用 MDMA 充分发挥 AXI 总线的优势,但要注意 LineBuffer 最好是 8 字节的倍数(64 位总线)。
. G6 c/ F5 `7 Z7 q. b9 O  v, C, b9 D; x
2.4.2. DCMI 图像大小调整功能
! u" @6 a  t1 b% i当考虑了上面的措施,仍无法满足应用对高分辨率需求时,用户可以通过设置相机,修改相机输出分辨率,配合 DCMI 调整图像大小功能,找到合适的折中方案。DCMI 提供的相关功能如下:
2 t/ K4 w" b* j2 d! d(1)窗口裁剪:# h# b' [- {  F; m  x& T. x) h5 Y
使用寄存器 DCMI_CWSTRT 指定起始坐标;
3 Z* }  @$ `' V使用寄存器 DCMI_CWSIZE 指定窗口大小。3 j4 [( d5 ~- Y% k) w
(2)图像数据调整(详见寄存器 DCMI_CS 中 LSM/BSM 等位域):
0 M1 r7 D  [! r2 U, w' e- 行选择:可选择 2 选 1,行数减半;* S* ?3 d* g2 C% }
- 数据选择:字节流上可进行 2 选 1、4 选 1 已经 4 选 2 (注意:对于 RGB565格式, 只能 4 选 2 可选,2 选 1 及 4 选 1 会造成色彩数据错乱)。
  @. x. Q  O% k. t% {8 n! D. u4 {6 n
! w& A& S% `. W5 d# l
( L: `. h2 s0 P( \. d
完整版请查看:附件 STM32 DCMI的带宽与性能介绍_v1.0.pdf (342.36 KB, 下载次数: 18)
赞 收藏 评论0 发布时间:2023-2-14 18:20

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版