i.MAX RT 系列相机应用开发(上)

一、 简介

      本文主要介绍了如何使用 NXP i.MX RT 系列处理器开发高清摄像机应用程序的基本过程,如系统结构的分析、基本工程的创建以及通过 CSI 捕获视频的过程。至于如何在 LCD 上显示帧,以及图片如何在 SD 卡中的压缩和存储,会在“i.MAX RT 系列相机应用开发(下)”中涉及。

二、 系统结构分析

    首先,我们以 i.MAX RT1050 为例分析系统的需求,然后找出系统结构,并绘制系统框图。这样我们就可以开发每个软件组件,然后构建整个系统。

2.1 i.MAX RT1050 系统硬件模块图

                                                                                              图 1  RT1050 系统硬件模块图

分析:

(1)RT1050 通过 I2C 总线配置 MT9M114,并通过 CSI 接口捕获视频帧数据。

(2)RT1050 通过 RGB 接口将帧数据传输到 LCD 面板,并通过 I2C 总线接收触摸事件。

(3)与 RT1050 uSDHC 模块连接的 microSD 卡用于存储压缩视频帧的 JPEG 文件。

(4)RT1050通过智能外部存储控制器(SEMC)模块与 SDRAM 器件连接。 SDRAM 为帧缓冲区或代码提供了数据空间。

(5)i.MX RT1050 通过 FlexSPI 控制器与QSPI 闪存或超闪存进行连接,为非调试运行配置提供了代码空间。

(6)OpenSDA 为主板提供 SWD 调试通路、调试 UART 桥以及供电。

2.2 帧数据流程图


                                                                                                     图 2  RT1050 帧数据流程图

    注: CSI 接收帧数据并将其存储在 SDRAM 中的帧缓冲区中。一方面,连接 PXP ,从而将原始的帧尺寸 1280*720 调整为 LCD 分辨率尺寸 480*272 ,然后 eLCDIF 将调整后的帧尺寸传到 LCD 显示面板上。另一方面,可以将帧压缩为 JPEG 格式并存储在 microSD 卡中。

三、创建工程

3.1 下载 MCUXpresso SDK

    下载 RT1050 最新版本的 SDK 包,下载网址:https://mcuxpresso.nxp.com

3.2 创建一个空工程

    创建空工程,文件命名如下图所示。

                                                                                           图 3  空工程文件命名

3.3 导入需要的资源文件

(1)将已使用的驱动程序文件从 “drivers” 目录导入到项目中,包括 cache , clock , CSI ,eLCDIF , GPIO , IOMUX , LPI2C , LPUART , PXP 和 uSDHC 的驱动程序。

(2)从 “startup” 目录中导入启动文件。

(3)从 “utilities” 目录中导入 UART 调试文件。

    除了 SDK 中存在的文件,为了配置各种模块,捕获和显示框架,处理触摸事件等,还需要为 RT1050 demo 创建一些特定的源文件。本文着重说明实现摄像的原理和方法,所以不会特别介绍这些特定的源文件,有关更多详细信息,请参考软件包。

四、捕获视频

    对于 RT1050 demo应用,MT9M114 摄像头设备被配置为以 30fps 帧率输出 RGB565像素格式的 720P 视频帧。 摄像头设备和 CSI 模块都需要预先配置。

4.1 MT9M114 驱动

    MT9M114 驱动程序提供了用于配置摄像头设备的 API 和参数。 MT9M114 有很多寄存器需要配置才能工作,用户很难确定各种参数。因此,提供了一种配置工具“注册向导”,可以轻松获取特定视频特性集的基本参数。


                                                                                                         图 4  注册向导工具

     为了归档或者更新配置,有如下操作步骤:

(1)准备需要写入的寄存器以及参数变量。

(2)通过 I2C 接口写入寄存器和变量。

(3)在规定的时间内编写一系列命令并发出来更改配置过程。

4.2 通过 CSI 捕获视频

    CSI 模块需要针对特定的视频格式进行初始化。 CSI 驱动程序参考各种视频特性来初始化 CSI ,包括像素数据格式,每个像素的字节数,帧分辨率,帧速率等。

    CSI 嵌入式 DMA 可以不停地交替写入两个帧缓冲区地址。为了提高性能,尤其是对于复杂的应用程序,SDK CSI 驱动程序将支持的缓冲区扩展到最多四个,并以环形队列结构组织帧缓冲区。 CSI 一帧一帧地填充缓冲区,以便数据接收器(如 LCD 接口)可以同时消耗缓冲区。

                                                                                            图 5  CSI 帧缓冲区填充方式

    CSI DMA 使用两个寄存器 CSIDMASA_FB1 和 CSIDMASA_FB2 (它们保存缓冲区地址)来访问四个帧缓冲区。 填充流程如下:

(1)设置 CSIDMASA_FB1 指向帧缓冲区 1 ,CSIDMASA_FB2 指向帧缓冲区 2 。

(2)CSI 通过 CSIDMASA_FB1 填充帧缓冲区 1 。(图 5 所示的 1 号橘色线)

(3)帧缓冲区 1 被填满后,将产生一个中断。设置 CSIDMASA_FB1 指向帧缓冲区 3 。

(4)CSI 通过 CSIDMASA_FB2 开始填充帧缓冲区 2 (图 5 所示的 2 号枚色线)。同时,数据接收器可能会耗尽帧缓冲区 1 (图 5 所示的数据流 i )。

(5)帧缓冲器 2 被填满后,将产生一个中断。 设置 CSIDMASA_FB2 指向帧缓冲区 4 。

(6)CSI 通过 CSIDMASA_FB1 开始填充帧缓冲区 3 (图 5 所示的 3 号青色线)。同时,数据接收器可能会耗尽帧缓冲区 2 (图 5 所示的数据流 ii )。

(7)帧缓冲器 3 被填满后,将产生一个中断。 设置 CSIDMASA_FB1 指向帧缓冲区 1 。

(8)CSI 通过 CSIDMASA_FB2 开始填充帧缓冲区 4 (图 5 中 4 号绿色线)。同时,数据接收器可能会耗尽帧缓冲区 3 (图 5 所示的数据流 iii )。

(9)帧缓冲器 4 被填满后,将产生一个中断。 设置 CSIDMASA_FB2 指向帧缓冲区 2 。

(10)重复步骤 (2) 。同时,据接收器可能会耗尽帧缓冲区 4 (图 5 所示的数据流 iv )。

 

    由此可知,同一组帧缓冲区上的填充和排空操作可以同时进行,也可以独立进行,从而使系统性能最优化。

 

 

【参考文献】

  • Developing a Camera Application with i.MX RT Series
  • MT9M114 Data Sheet, Rev. 12
  • MT9M114 Register and Variable Reference, Rev. E
  • IMXRT1060RM

 

★博文内容参考自 网站,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论