基于linux5.15.5的IMX 参考手册 --- 9
Posted chocolate2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于linux5.15.5的IMX 参考手册 --- 9相关的知识,希望对你有一定的参考价值。
基于linux5.15.5的IMX 参考手册 — 9
第六章 视频
6.1捕捉概述
6.1.1 介绍
i.MX捕获驱动程序支持通过V4L2接口与相机传感器控制器和接口。应用程序不能直接使用相机驱动程序。相反,应用程序使用V4L2捕获驱动程序打开和关闭摄像头进行预览和图像捕获,控制摄像头,从摄像头获取图像,并启动摄像头预览。
捕获控制器列表如下所示:
•相机串行接口- CSI
•IPU-CSI
•视频接口单元- VIU
•图像传感器接口- ISI
•图像传感器处理- ISP
图像数据传输的捕获接口列表如下:
•Parallel-CSI
•MIPI-CSI2
•HDMI接收
•电视解码器
介绍不同控制器和接口的区别。
带有IPU的i.MX 6使用internaldev作为V4L2接口,而其他所有的imx使用subdev作为V4L2接口。
注意:不同的控制器和接口的组合说明如下表所示。
下面列出了一些额外的细节:
•ISP是用于i.MX 8M Plus的一个新的控制器。
•ISI控制器是一种用于一些i.MX 8系列的新控制器。
•不带IPU的i.MX 6 SoC, i.MX 7Dual和i.MX 8M使用相同的CSI控制器驱动程序。
•i.MX 8和i.MX 8X家族使用较新的i.MX 8 CSI驱动程序。
•带有IPU的i.MX 6使用定制的CSI与IPU硬件进行接口。
•每个SoC可以支持一个或多个接口,如上表所述。接口与Video for Linux V4L2 api一致。
•在某些情况下,捕获控制器不是连接到摄像机,而是连接到视频输入单元。有些还可以连接到HDMI接收器
6.1.2 Omnivision相机
Omnivision摄像头支持多种接口和相机类型。Omnivision相机是一种低功耗的小型相机传感器和镜头模块。
Omnivision摄像头采用串行摄像头控制总线(SCCB)接口控制传感器操作,作为I2C客户端进行控制操作。支持CSI、MIPI-CSI2和Parallel-CSI三种传输方式。当使用MIPI模式时,OV5640通过MIPI CSI-2接口连接i.MX芯片。MIPI接收传感器数据并传输给CSI。
下表列出了不同的Omnivision摄像机以及支持的接口。
Omnivision菜单配置基于支持有多个选项
顶级选择如下:
Device Drivers > Multimedia support (MEDIA_SUPPORT [=y]) > V4L platform devices (V4L_PLATFORM_DRIVERS)
下一级选择是基于每个SoC的不同接口
•对于IPU的i.MX 6,选择> MXC Camera/V4L2 PRP Features support and > OmniVision ov5640 camera support (MXC_CAMERA_OV5640)。
•对于没有IPU的i.MX 6,选择> OmniVision ov5640 camera support (MXC_CAMERA_OV5640_V2).。
•对于i.MX 7,选择> OmniVision ov5640 camera support using MIPI (MXC_CAMERA_OV5640_MIPI_V2).
•对于i.MX 8,选择> IMX8 Camera ISI/MIPI Features支持(VIDEO_MX8_CAPTURE) > IMX8 Camera Controller (IMX8_CAPTURE_DRIVER)和Maxim OV5640_V3驱动支持(Device Drivers > Statging Drivers > Media Staging Drivers > i.MXqQXP/QM Camera ISI/MIPI Features support)。
•对于i.m x8m,选择> OmniVision ov5640摄像头支持(MXC_CAMERA_OV5640_V2)和OmniVision ov5640摄像头支持使用MIPI (MXC_CAMERA_OV5640_MIPI_V2)。
6.1.3平行CSI
并行CSI驱动程序可以直接连接到外部CMOS传感器和CCIR656视频源。在Video for Linux Two (V4L2)驱动框架中实现了CSI和传感器驱动,该驱动由图像捕获驱动和视频输出驱动组成。
驱动程序初始化CSI接口,并使用CSI模块的硬件寄存器进行配置和操作。支持以下特性:
•可配置接口逻辑,支持最常用的CMOS传感器。
•完全控制8位/像素,10位/像素或16位/像素数据格式为32位接收FIFO封装。
•128x32 FIFO存储接收到的图像像素数据。
•接收FIFO超限保护机制。
•嵌入式DMA控制器通过AHB总线从接收FIFO或统计FIFO传输数据。
•在外部存储器中支持双缓冲两帧。
•从可屏蔽中断源到中断控制器的单中断源:帧的开始,帧的结束等等。
•可配置主时钟频率输出到传感器。
V4L2 CSI捕获设备包括两个接口:捕获接口和覆盖接口。捕获和覆盖接口采用CSI嵌入式DMA控制器,使用V4L2 api实现功能。以下是捕获叠加的数据流程。
- 摄像机通过8位/10位数据端口将数据发送至CSI接收FIFO。
- 嵌入式DMA控制器通过AHB总线将数据从接收FIFO传输到外部存储器。
3.数据被保存到用户空间存储器或直接输出到帧缓冲区。
i.MX 6与IPU之间使用IPU- CSI驱动程序,直接与IPU接口。i.MX Quad Plus/Quad/Dual支持两个IPU-CSI senaros。没有IPU的i.MX 6和i.MX 7Dual/Solo使用单独的CSI传感器驱动,直接接口到传感器。
6.1.4 MIPI摄像头串口(MIPI CSI)
MIPI CSI-2 D-PHY中有四个模块:PHY适配层、数据包分析器、图像数据接口和寄存器库。
MIPI CSI-2是一款MIPI相机串行接口主机控制器,它采用高性能的串行互连总线,用于移动应用,将相机传感器与主机系统连接起来。CSI-2主机控制器是一个数字核心,它实现了MIPI CSI-2规范中定义的所有协议功能。这样,它在系统和MIPI D-PHY之间提供了一个接口,并允许与MIPI CSI-2兼容的摄像机传感器进行通信。
MIPI CSI2驱动程序用于管理MIPI D-PHY,并让它与MIPI传感器和IPU CSI一起工作。MIPI CSI2驱动实现如下功能:
•MIPI CSI-2低级接口,用于管理MIPI D-PHY寄存器和时钟
•MIPI CSI-2通用API,用于MIPI传感器和MIPI D-PHY之间的通信
通过调用MIPI通用api, MIPI传感器可以将传感器的某些信息(如数据类型、车道号等)设置到MIPI CSI2驱动程序中,从而配置D-PHY。为了使IPU CSI模块驱动进行正确的配置,接收适当的数据,并对其进行正确的处理,它需要从MIPI CSI2驱动接收有关传感器的信息(如数据类型、虚拟通道、IPU ID、CSI ID等)。
功能和操作如下:
•PHY适配层负责管理D-PHY接口,包括PHY错误处理;
•Packet Analyzer负责数据车道合并(如有需要),报头解码,错误检测和纠正,帧大小错误检测和CRC错误检测;
•Image Date Interface分离CSI-2包头信息,并根据内存存储格式重新排序数据。
它还产生定时精确的视频同步信号。在帧级和行级也进行了一些错误检测;
•Register Bank可以通过标准的AMBA-APB从接口访问,并提供对CSI-2主机控制器寄存器的访问,以进行配置和控制。还有一个完全可编程的中断生成器,用于在发生某些事件时通知系统;
Linux操作系统的MIPI CSI2驱动包括两个部分:MIPI CSI2驱动初始化操作,初始化mipi_csi2_info结构体;MIPI CSI2通用api,导出了CSI模块驱动和MIPI传感器驱动的api。
6.1.5 HDMI
HDMI视频接口与图像传感器接口(ISI)。
在i.m x8quadmax上,HDMI接收器视频接口支持一个接口HDMI 1.4 4K30。
6.1.6软件操作
V4L2选项捕获支持模式,图片格式和图片大小根据每个捕获接口而变化。
imx-test repo在mxc_v4l2_test中对这些接口进行了单元测试。有关如何运行测试的详细信息,请参阅README。
6.1.7 V4L2捕获
Linux 2视频(V4L2)是Linux标准。API规范可从以下网址获得:https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2.html。
V4L2捕获设备包括两个接口:使用用于捕获和覆盖设备的V4L2 API的捕获和覆盖接口。
以下是V4L2捕获api的一些示例用例: - 使用IOCTL VIDIOC_S_FMT设置捕获像素格式和大小。
- 使用IOCTL VIDIOC_S_CTRL设置控制信息,用于旋转。
3.使用IOCTL VIDIOC_REQBUFS请求一个缓冲区。 - 内存将缓冲区映射到它的用户空间。
- 执行IOCTL VIDIOC_DQBUF。
- 将需要后处理的数据传递到缓冲区。
- 使用IOCTL命令VIDIOC_QBUF对缓冲区进行队列。
- 通过执行IOCTL VIDIOC_STREAMON启动流。
•VIDIOC_STREAMON and VIDIOC_OVERLAY不能同时启用。
下表列出了i.MX捕获驱动程序中使用的V4L2捕获ioctls。更多信息参见V4l2章节。
6.1.8源代码结构
下表显示了捕获驱动程序源文件。对于i.MX 6和i.MX 7,源文件在drivers/media/platform/mxc/capture中。对于i.MX 8系列,源文件在drivers/media/platform/imx8中。对于mipi - csi,源文件在drivers/mxc/mipi中。
6.2显示概述
6.2.1介绍
i.MX显示系统使用显示控制器来优化视频数据移动,以显示界面和图形处理。
每个显示控制器都是通过一个Linux驱动程序实现的,并进入一个显示框架(framebuffer或DRM)。在某些情况下,显示控制器包括确保安全视频管道的身份验证。在其他显示控制器将包括额外的功能缩放,去交错,平铺和颜色转换期间转移。用于支持多个显示器i.MX 8,通过使用两个控制器一起工作来完成。本章提供了i.MX显示控制器和接口的高级概述,以及帧缓冲区和DRM显示驱动程序之间的区别。使用以下显示控制器。
•IPU
•PXP
•eLCDIF
•DPU
•DCSS -仅在i.MX 8M上
显示接口将与显示控制器、显示面板以及在某些情况下编码器的显示桥接器连接。支持以下显示接口。
•EPDC -支持EInk显示
•并行支持液晶显示器
•LVDS -支持LVDS显示器
•HDMI -支持芯片和外部HDMI
•显示端口-支持eDP面板
•MIPI- DSI -支持MIPI显示器
注意:模拟显示不再支持。i.MX 37和i.MX 5族采用模拟接口。
支持以下HDMI显示桥/编码器。
•与HDMI并行-使用Silicon Image si902x
•LVDS到HDMI -使用ITE it6263
•MIPI-DSI到HDMI -使用模拟设备adv7535
每个SOC支持不同的显示功能。其中一些配置在位于arch/arm/boot/dts和arch/arm64/boot/dts的设备树中。请参阅硬件参考手册,了解更多关于以下内容的详细信息。
•吞吐量
-输出数量
-像素时钟速率
-最大显示数和相应的分辨率
-分辨率为60hz。
•接口
—并行—端口数和位大小
- LVDS -车道和通道数。
- MIPI-DSI -端口,通道和速度的数量
•处理
-即时组合,包括高分辨率显示器
-离线组合速度
6.2.2帧缓冲
i.MX 6和i.MX 7支持帧缓冲驱动程序,但i.MX 8不支持。使用drivers/video/fbdev中的imxfb驱动支持帧缓冲驱动。帧缓冲内核fbdev结构定义在这里或这里的kernel.org。要了解更多关于i.MX V4LS的信息,请参阅V4L2章。
这些面板由video/fbdev/mxc文件夹中TRULY和EInk面板的framebuffer驱动程序支持。请参阅imx_v7_defconfig中搜索PANEL所支持的面板。TRULY面板仅支持MIPI DSI接口。Eink面板仅支持EPDC接口。
6.2.3直接渲染模型(DRM)
直接渲染模型(DRM)是一种新的i.MX显示驱动程序。i.MX DRM驱动程序在drivers/gpu/drm/imx中。其他组件有DRM接口,如GPU和DCSS。DRM框架的文档在kernel.org上。
i.MX DRM驱动程序是通过以下驱动程序实现的。
•硬件库支持文件
•核心DRM驱动
•依赖硬件的DRM驱动程序
•HDMI DRM驱动程序支持hdp HDMI/Display端口
DRM驱动程序为i.MX 8QuadMax和i.MX 8QuadXPlus使用DPU,为i.MX 8M Quad和i.MX 8M Mini使用LCDIF,为i.MX 8ULP使用DCNANO
i.MX DRM框架还包括存在于driver/gpu/panel中的面板驱动。支持的DRM面板有Simple面板、Raydium RM67191、Raydium RM68200和Raydium RM67199。
6.2.4显示分辨率
显示分辨率计算使用以下因素。
•框架宽度
•框架高度
•帧率(fps)
•消隐间隔-在显示器DS中提供高达35%(1.35)-使用minn值
像素时钟[MHz]按“帧宽×帧高×帧速率×消隐间隔”计算
需要考虑的事情如下
•数据格式(像素/时钟)
•显示源时钟(DI#_CLK_EXT位)
•显示控制器上的负载(DC)
6.2.5身份验证
显示身份验证允许硬件处理,以确保显示内容不受损害。这个硬件是通过i.MX 6上的帧缓冲显示框架集成的DCIC和i.MX 8上的DRM显示框架实现的DPU。
在以下SoC上支持显示认证CRC。
•i.MX 6 Solox支持使用DCIC对1个显示器进行身份验证。
•i.MX 6 QuadPlus/Quad/Dual支持使用带有2个显示器的DCIC进行身份验证。
•i.MX 8QuadXPlus可以使用DPU对2个显示器进行身份验证。
•i.MX 8QuadMax可以使用DPU验证4个显示器。。
6.2.6 Tiling
通过硬件平铺提供优化的视频数据显示。这是通过不同的硬件块实现的。最新的功能是显示预取解析(DPR),它提高了i.MX 6 QuadPlus、i.MX 8QuadMax和i.MX 8QuadXPlus的性能。
下面启用平铺支持
•i.MX 6Quad/Dual支持平铺使用视频数据顺序适配器(VDOA)。
•i.MX 6QuadPlus支持平铺VDOA和显示预取解析(DPR)版本1
•i.MX 8QuadXPlus和i.MX 8QuadMax支持使用显示预取解析(DPR) version2平铺
以上是关于基于linux5.15.5的IMX 参考手册 --- 9的主要内容,如果未能解决你的问题,请参考以下文章