开发介绍
本文主要介绍在orin nx平台上使用加串器MAX96717和解串器MAX96724进行视频流数据传输,记录开发过程中遇到的问题,以及相关软件GMSL_SerDes_Public_GUI的生成配置方法,和jetson orin的设备树配置。适合第一次接触 GMSL 的朋友,帮助大家熟悉从零开始到配置视频流输出的完整流程。本文采用Pixel Mode,以 4 x MAX96717 + MAX96724 的架构接入 Jetson Orin Nano Super 开发者套件如下所示:
开发加解串gmsl2的基础知识介绍
以下截图来自官方手册中典型的四个 sensor 接入方案示意图:
上图是硬件接线的示意图,具体实现时需要重点关注以下几点:
- Pixel 或者 Tunneling Mode 的选择
- MIPI Lane Swap 的配置
- Pixel Clock 和 lane的数据量确认
- 需要透传的GPIO和接入设备和sensor的i2c地址确认
下面开始介绍配置注意的细节:
解串器MAX96717的CFG0-1的管脚配置如下,拿到板子后注意确认测试:
解串器MAX96724也有类似的配置:
加接串两边要注意匹配,解串MAX96724有两个重要的示意图如下:
在这里搞清楚实际接入的soc端的情况,根据需要选择那个器件和soc接入方式,比如1x4b + 2x2 mode,1x4a + 2x2 mode,2x4 mode,4x2 mode这些连接方式,明确A,B,C,D,E,F,在使用D-PHY 4-LANE模式下,使用选择CKA ALT还是CKAP/N那个作为mipi的CLK时钟会涉及到配置相关寄存器,一定确认清楚。
关于Video pipe的配置需要理解下面的示意图含义:
不同的pipe对应的相应的寄存器组进行配置,可以通过软件GMSL_SerDes_Public_GUI生成需要的配置,不需要记忆,但要理解Source VC & DT,Map X 以及 Dest. VC & DT,Controller Dest等上图的模块含义,这里不做过多介绍。
下面介绍GMSL_SerDes_Public_GUI软件常用的三个功能:
解串器的时钟输出配置
在软件主界面,Tools那一栏中的Other Config中的RCLK中有配置MFP4或者MFP2管脚的时钟输出,有里面预设常用时钟也可以自定时钟输出配置,自动生成i2c配置命令,如下所示:
加解串的CSI参数配置
在主界面Tools->Video Conifg->CSI Configuration Tool里面,选择好加串器和解串器型号如下:
比如四个sensor都是出的raw8数据,在每个解串器配置添加对应的CSI数据类型如下:
在DPHY里面配置lane的数量,和极性和map的映射参数:
一般挂四个sensor的i2c地址都一样,或者加串器设备上挂的有epprom的i2c存储设备,需要配置i2c的地址转换参数如下,确保映射后四个都不一样:
然后配置解串器的虚拟映射参数,依次添加解串器的GMSLLink映射到那个PortOutput口,如果有配置没有错误,软件会有绿色的状态显示如下:
最后解串器也需要配置D-PHY的参数,配置lane的数量,和极性和map的映射参数如下,jetson orin NX的CSI口最高支持2.5Gbps,总共支持20Gbps的传输数据带宽:
然后点击Generate Script->Export Script导出.c的配置文件:
加解串的管脚配置
主界面Tools->Other Conifg->MFP Configuration里面配置GPIO透传参数
orin nx 的驱动设备树配置需要关注的地方
Jetson Orin Nano Super开发套件有个需要注意的地方,由于载板设计,J20/CAM0 使用了 CSI1_CLK,仅支持 x2 摄像头接口,如下图所示:
关于设备树,需要注意:
tegra-capture-vi { vc-id = <0>; //注意和max96724里面配置的虚拟通道保持一致,soc最多支持24个 port-index = <PORT_INDEX>; //和接入的硬件连线保持一致 bus-width = <BUS_WIDTH>; //和接入的数量保持一致 }; lane_polarity = //PORT_INDEX为0或者1,这个地方需配置"6" tegra_sinterface = //和接入的硬件连线保持一致对于多个sensor的设备树,参考github里面的Jetson示例工程里面的gen_gmsl_dts.py工具,根据配置的json配置文件快速生成overlay的设备树配置文件