ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

NVIDIA DRIVE NvSIPL 实践:多款模组与 GMSL SerDes(MAX96712/MAX96792/MAX96724/MAX9295/MAX96717)

NVIDIA DRIVE NvSIPL 实践:多款模组与 GMSL SerDes(MAX96712/MAX96792/MAX96724/MAX9295/MAX96717) 本文结合 NVIDIA DRIVE 平台上的 NvSIPL 摄像头驱动适配实践从 Sensor、Serializer、Deserializer 到 CSI 接收端系统梳理车载摄像头的数据传输、控制与诊断链路。通过对基线代码与项目代码的分析介绍驱动适配涉及的配置文件、核心接口、初始化流程和 SerDes 拓扑重点解析 MFP 引脚分配、FSYNC 帧同步、RESET 复位以及 Embedded Data 的产生、传输与解析机制。文章汇总项目中各摄像头模组的能力地图横向比较分辨率、帧率、RAW/YUV 输出、HDR、曝光与增益控制等常用功能并梳理内外触发、多摄像头帧同步、片上 ISP、LOFIC/SPD、补光同步、温度读取及 OTP/EEPROM 等特色能力。结合测试图生成、内外回环、链路裕量测试和 IMX728S 诊断实例分析故障检测、错误上报、自检与链路恢复的实现方式。在采集链路之外文章进一步介绍多画面合成显示以及双 Thor 平台通过 PCIe C2C 跨芯片传输摄像头图像的方案说明摄像头驱动、NvSIPL、NvSciStream/NvSciC2C 与接收端图像处理、编码之间的协作关系。通过区分硬件支持、驱动实现、配置启用与应用层能力为模组选型、Camera Bring-up、跨芯片图像传输和故障排查提供实践参考。加载 CameraModule 驱动库 │ ├─ CNvMCameraModule_GetNames()│ └─ CNvMCameraModule_Create()↓ CNvMMAX96712_96717_AR0341 对象 ↓ DoSetConfig()├─ 创建/配置 MAX96717 对象 ├─ 创建/配置 AR0341 Sensor 对象 ├─ GetAR0341Driver()├─ GetCDIDeviceContext()└─ SetupConnectionProperty()└─ SetSensorConnectionProperty()↓ DoCreateCDIDevice()├─ 创建 MAX96717 CDI Device ├─ 创建 AR0341 CDI Device │ └─ DriverCreate()│ └─ DevBlkCDII2CPgmrCreate()└─ 创建 TransportLink ↓ 给 CameraModule 上电并等待 200ms ↓ EnableModuleLink()└─ InitTransportLinks()└─ CNvMTransportLink_Max96712_96717F::Init()├─ 配置 MAX96717 ├─ 配置 GMSL GPIO ├─ 配置 MIPI PHY ├─ 配置 RAW12 Video Pipe └─ 释放 AR0341 Reset ↓ DetectModuleLink()└─ DetectModule()└─ AR0341CheckPresence()↓ CNvMMAX96712CameraModule::Init()├─ AR0341::InitModule()│ ├─ AR0341SetDefaults()│ │ ├─ Sensor Software Reset │ │ └─ 写1920×1536 RAW12 60fps 寄存器表 │ └─ AR0341Trigger()[外同步模式]│ └─ TransportLink::PostSensorInit()└─ MAX96712 配置 FSYNC[外同步模式]↓ CNvMMAX96712CameraModule::PostInit()├─ MiscInitModule()├─ TransportLink::MiscInit()│ ├─ ERRB 配置 │ └─ Register CRC/诊断配置 └─ AR0341::PostInitModule()↓ Deserializer Start ├─ 检查 CSI PLL ├─ 检查 GMSL Link Lock └─ Enable CSI Output ↓ CNvMMAX96712CameraModule::Start()├─ TransportLink::Start()└─ AR0341::StartModule()└─ AR0341StreamOn()└─ 写 AR0341 0x01000x0100 ↓ 开始输出图像所有模组能力地图模组目录Sensor / Serializer专用功能imx728x96717IMX728 / MAX96717Chip ID、完整初始化、曝光、模拟/数字增益、白平衡、Embedded Data 解析、寄存器读写/转储、PCLK、链路模式、错误数据ox03c10x96717OX03C10 / MAX96717FHDR 曝光、HCG/LCG/SPD/VS 增益、WB、Embedded Data、PCLK、寄存器访问、模块电源、错误诊断ar0233cAR0233C / MAX9295A基础 Detect/Init/Stream、错误信息、电源延时没有识别到专用曝光增益接口ar0341AR0341 / MAX96717基础控制、Sensor StreamOn、专用 Trigger、错误读取支持普通、Trigger、Bypass、Mix 模式配置ar0341cAR0341C / MAX96717F基础 Detect/Init/Stream、错误读取、电源控制ar0820cAR0820C / MAX9295A基础 Detect/Init/Stream、错误读取、电源控制ar0823_717AR0823 / MAX96717外部触发、基础启停、错误诊断、电源有 Bypass/Mix 配置ar0823cAR0823C / MAX96717外部触发、基础启停、错误诊断、电源imx728IMX728D / MAX96717完整曝光、增益、WB、Embedded Data、寄存器、错误读取、启停流isx031ISX031 ISP / MAX96717ISP 模组曝光、增益、格式、PCLK、寄存器、错误诊断区分触发与 NO_TRIGGER 配置ov2311_cOV2311 / MAX96717F曝光、增益、格式/Embedded Data、寄存器、错误诊断VCSEL 模组、多种触发/30FPS变体imx623_primaxIMX623 / MAX96717FWB/增益、寄存器、PCLK、链路模式、错误诊断触发与自由运行配置imx623_sunnyIMX623 / MAX96717FWB/增益、寄存器、PCLK、链路模式、错误诊断imx728cIMX728C / MAX96717完整曝光、增益、格式、PCLK、寄存器、链路模式、错误诊断imx728sIMX728S / MAX96717F功能最丰富曝光、增益、WB、格式、寄存器、EEPROM、PMIC、GPIO、Sensor 电源、FSYNC Monitor 错误、FUSA 诊断isx031ISX031 / MAX96717F基础启停、错误读取、电源管理大量控制可能由模组内部 ISP 完成isx031cISX031C / MAX96717F基础启停、错误读取、电源管理ox03c10OVX3C / MAX96717F曝光、HDR 增益、WB、寄存器读写/转储、EEPROM 写访问、错误数据、FOV60/FOV100 区分ox08b40OVX8B / MAX96717曝光、HDR 增益、WB、寄存器读写/转储、EEPROM 写访问、错误数据、FOV30/FOV120 区分max9295eLoopback / MAX9295E非普通 Sensor 模组用于 Serializer loopback、正向/反向 Link Margin Test、链路诊断imx623IMX623 / MAX96717F完整曝光、增益、WB、格式、寄存器、链路模式包含多种固定曝光配置和 internal 模式ox08d10aOX08D10A / MAX96717曝光、HDR 增益、WB、PCLK、寄存器、链路模式、错误诊断I20/I30、T20/T30、多 FOVoax4000OVX8B ISP 类模组 / MAX96717基础初始化、启停、错误、电源Sensor 图像控制更可能在 ISP/模组固件侧ox01g10OX01G10 / MAX96717F基础初始化、启停、错误、电源专用曝光增益入口未被识别ox05b1sOX05B1S / MAX96717基础初始化、启停、错误、电源、EEPROM 读写ox08d10OX08D10 / MAX96717曝光、HDR 增益、WB、PCLK、寄存器、链路模式、错误诊断DESAY/LCE/SUNNY 多供应商版本ox08dcOX08DC / MAX96717曝光、HDR 增益、WB、PCLK、寄存器、链路模式、错误诊断自由运行及 T10/T20/T30sc233atSC233AT / MAX96717F初始化、启停、Sensor 寄存器、错误、EEPROM bridge、链路模式ox03h10OX03H10 / MAX96717F完整曝光增益、WB、寄存器、错误、链路测试明确实现外触发 10/20/30 FPSox08d10OX08D10 / MAX96717曝光、HDR 增益、WB、PCLK、寄存器、错误、链路模式自由运行及 T10/T20/T30ox08d10aOX08D10A / MAX96717与 OX08D10 类似A 版本 Sensor自由运行及 T10/T20/T30按当前 JSON 中 inputFormat: “422” 判断共有 9 类 YUV422 摄像头对应 19 个解串器驱动目录模组输出格式分辨率驱动系列AR0233CYUV422 YUYV 8-bit1920×1080MAX96712、MAX96792AAR0820CYUV422 YUYV 8-bit3840×2160MAX96712、MAX96792AISX031 ISPYUV422 YUYV 8-bit1920×1536 / 1920×1200MAX96712、MAX96792AISX031YUV422 YUYV 8-bit1920×1536MAX96712、MAX96792AISX031CYUV422 YUYV 8-bit1920×1536MAX96712、MAX96792AOAX4000 / OVX8B ISP 模组YUV422 UYVY 8-bit3840×2160MAX96712OX01G10YUV422 YUYV 8-bit1280×960MAX96712、MAX96724、MAX96792AOX05B1SYUV422 UYVY 8-bit2560×1920MAX96712、MAX96792ASC233ATYUV422 UYVY 8-bit1920×1198MAX96712、MAX96724、MAX96792A新模组开发真正要做的内容1. 平台和模组 JSON通常需要定义Platform 名称。DeviceBlock 和 Deserializer。CSI Port、PHY mode、lane/trio 数。Link index。CameraModule 名称。Sensor、Serializer、EEPROM 名称和 I²C 地址。VCID、DataType、宽高、Embedded Top/Bottom 行。Frame rate。Trigger mode。Reset GPIO、FSYNC GPIO。Sensor reference clock。最容易出错的是“JSON 名字”和 C 注册字符串不完全一致。必须逐字符一致。2. CameraModule 包装层新模组至少需要关注SetConfigModuleSetSensorConnectionPropertyDetectModuleInitModulePostInitModuleStartModuleStopModuleDeinitModuleGetPowerOnDelayMsGetPowerOffDelayMsGetErrorSizeGetErrorInfoGetSensorRegisterValueSetSensorRegisterValueGetSensorPCLKGetLinkMode不是每个模组都要重新实现全部函数能由基类完成的应尽量复用。3. Sensor CDI 层典型功能包括Driver create/destroy。默认状态初始化。Chip ID / Revision 检测。Sensor 初始化寄存器表。Stream On/Off。Exposure 时间到寄存器的换算。Analog/Digital Gain 换算。White Balance Gain。Group Hold。Embedded Data 解析。温度、帧计数器和错误状态读取。任意寄存器读写。Register Dump。PCLK/VTS/HTS 计算。Sensor Error Data。4. Serializer/Deserializer 链路公共 TransportLink 负责的内容很多新手很容易误认为都在 Sensor 驱动里GMSL Link lock。Serializer 地址重映射。Sensor/EEPROM broadcast 地址映射。Serializer reference clock。Sensor Reset GPIO。FSYNC GPIO。MIPI lane mapping、polarity、2-lane/4-lane。RAW 数据类型和 Embedded Data。Deserializer pipeline、VC 和输出端口。Link Error、CRC、ERRB 和 FUSA 检查。推荐的 Bring-up 调试顺序必须逐层推进不要上来就调 ISP 或图像质量。阶段 1供电确认Deserializer 本身供电。PoC/负载开关输出。模组 PMIC。Serializer 电源。Sensor 各路电源。Reset 电平和时序。这里至少有四层板级电源、PoC、模组 PMIC、Sensor reset。找不到模组自己的 Power 函数不代表没有执行供电。阶段 2Serializer 链路目标Deserializer 能锁住 GMSL link。能读 Serializer Chip ID。Serializer alias 地址正确。没有同地址冲突。Link rate、GMSL1/GMSL2 模式正确。如果这一步不通不要继续查 Sensor 初始化表。阶段 3Sensor I²C目标地址翻译配置成功。读出正确 Chip ID 和 Revision。Reset 已释放。Sensor reference clock 存在。I²C 波形和地址正确。常见现象Serializer 可读、Sensor 不可读优先查 reset、MCLK、地址翻译和电源。单路正常、多路失败优先查 broadcast/alias 地址冲突。阶段 4初始化表先只做Software reset。PLL/MCLK。RAW 格式。分辨率。HTS/VTS。MIPI lane。VC/DataType。Embedded Data。Stream On。不要一开始混入 AE、AWB、复杂 FUSA 检查。阶段 5确认视频链路依次确认Sensor frame counter 在增加。Serializer video lock。Deserializer link/pipe lock。Deserializer CSI 输出。SoC CSI/VI 没有 CRC、ECC、short frame。SIPL 收到 frame completion。ISP/Consumer 才开始工作。“无图”不是一个问题它至少可能落在七个不同层级。阶段 6曝光和增益重点检查Exposure 单位是秒、微秒还是行数。PCLK、HTS、VTS 换算。曝光上限是否预留 margin。HDR 各曝光通道顺序。HCG/LCG/SPD/VS 映射。Analog/Digital Gain 范围。Group Hold 是否正确释放。写入值和 Embedded Data 回读值是否一致。阶段 7触发同步必须区分Sensor 自由运行。Deserializer 内部产生 FSYNC。SoC/外部输入 FSYNC。bEnableTriggerModeSync、bEnableInternalSync、Sensor JSON 的 isTriggerModeEnabled 是不同概念而且公共配置流程可能覆盖模组层设置。阶段 8错误与恢复最终验证拔插同轴。短时断链。Sensor I²C NACK。CRC/ECC 错误。Frame timeout。DisableLink/EnableLink。带 power cycle 的恢复。多路相机中单路恢复是否影响其他路。最常见问题和优先排查点现象高概率原因Link 不锁PoC、同轴、Serializer 电源、GMSL mode/rate、Deserializer link 配置Serializer 能读Sensor 不能读Sensor reset、MCLK、PMIC、I²C translator、Sensor 地址Sensor ID 正确但没有视频初始化表、PLL、Stream On、MIPI lane、RAW DataTypeDeserializer 有视频SIPL 无帧CSI Port、VCID、DataType、宽高、PHY lane/trio 配置有帧但图像错色Bayer order、RAW10/12/14、Embedded 行、ISP tuning图像滚动或偶发撕裂FSYNC、帧率、VTS、触发极性、GPIO 映射曝光调节无效Group Hold、曝光通道映射、单位换算、AE 插件覆盖多路时才失败Alias 地址冲突、broadcast 配置、带宽、供电、FSYNC group运行一段时间掉帧CRC/ECC、线缆裕量、温度、PoC、电磁干扰、错误恢复恢复失败DisableLink 时 I²C 已失效、复位不彻底、PoC 未重新上电、旧状态未清理
返回列表