ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AHD摄像头接入GMSL链路:MAX9286+MAX96705多路车载视频采集方案解析

AHD摄像头接入GMSL链路:MAX9286+MAX96705多路车载视频采集方案解析 简介一套基于MAX9286与MAX96705的四路AHD摄像头视频接入方案面向Linux嵌入式驱动开发、车载影像及安防视觉系统的软硬件工程师。资源针对四路模拟高清AHD信号同时输入并转换为MIPI接口输出的具体需求提供了max9286.c核心驱动源码涵盖芯片上电初始化、寄存器配置、多路视频流接入、与MAX96705的级联协同以及MIPI输出控制等关键逻辑可直接参考或移植到目标Linux内核中。压缩包内共1个文件类型为C语言驱动源文件整体体积仅14KB代码精炼适合逐行研读和二次开发。目前已有3421人学习或下载适合需要快速建立MAX9286驱动框架认知、解决四路AHD同步采集与调试问题或正在规划Linux下多路相机方案的开发者作为技术参考与排错蓝本。 做车载多路视频采集的项目时我印象最深的不是SoC端怎么接而是镜头那头的一堆模拟高清信号怎么干净地送到主控。最近手头这套“MAX9286 MAX96705 4路AHD camera”方案终于从原理图走到了图像点亮整个过程踩了不少坑也把链路里的细节摸清楚了。这套方案在环视、DMS、商用车监控里非常典型核心思路是保留成本低廉的AHD摄像头通过解码、GMSL串行化、同轴线缆传输最后在主机端集成为MIPI CSI-2信号。如果你正在做类似的多路视频采集或者卡在AHD和GMSL怎么共存的选型阶段这篇文章值得读完。1. 方案整体思路AHD摄像头为什么要“绕一圈”进GMSL1.1 AHD与GMSL到底解决什么问题AHD属于模拟高清视频标准最大优势是沿用同轴线缆和成熟的摄像头模组成本比GMSL摄像头低不少720p/1080p都能跑非常适合对成本敏感的车载场景。但AHD信号一旦到了主机端以前的做法是每个摄像头直接拉一根模拟线到SoC或视频解码芯片信号完整性、接口数量、线束重量都会变成问题。尤其是四路甚至更多路时布线难度会明显上升。GMSL则是ADI/Maxim主导的车载SerDes串行链路标准用一根同轴线同时承载视频、控制指令和供电传输距离远、抗干扰能力强。MAX9286就是GMSL解串器可以把多路串行信号汇聚成一路MIPI CSI-2送给SoC。那问题来了AHD摄像头输出的是模拟信号没法直接塞进GMSL串行链路。所以这套方案里必须有个“翻译官”——先用AHD解码芯片把模拟高清转成并行数字视频再用MAX96705串行器变成GMSL信号。最终链路就是AHD摄像头 → AHD解码器模拟转并行数字 → MAX96705串行器并行数字转GMSL → 同轴线缆 → MAX9286解串器多路GMSL转MIPI CSI-2 → SoC1.2 为什么选择MAX9286MAX96705组合MAX9286是GMSL解串器支持4路输入可以工作在GMSL1或GMSL2模式。我们的4路AHD方案选的MAX96705属于GMSL1的串行器所以MAX9286这边的通道也必须配置成GMSL1模式。这种组合的好处是摄像头那端可以做得非常小解码器加串行器直接塞进或靠近摄像头模组和镜头之间只有一小段模拟走线之后全链路都是数字串行信号。另外MAX9286支持通过I2C透传机制访问远端的所有设备。也就是说主控SoC只需要通过一条I2C总线接在MAX9286上就能经由GMSL链路配置MAX96705、AHD解码芯片的寄存器不需要额外拉控制线。多路摄像头的配置和控制成本大幅度降低。1.3 三种主流车载摄像头方案对比方案类型典型链路优点缺点纯AHD直连摄像头 → 模拟线 → AHD解码 → SoC成本低模组选择多线束多、传输距离受限制主机端接口压力大纯GMSL摄像头摄像头 → 串行器 → GMSL → 解串器 → SoC抗干扰强一线通可大数量级扩展摄像头成本高前端模组需要专门定制本方案(AHDGMSL桥接)AHD摄像头 → 解码串行 → GMSL → 解串 → SoC保留低成本AHD摄像头充分利用GMSL布线优势额外增加解码和串行两个环节需要调试的寄存器变多对于已有AHD摄像头供应链的团队这种混合方案是改动最小、收益最明显的路径。2. 硬件设计每一级芯片连接和布局的关键点2.1 AHD解码器选型TP2815、TP9950这类芯片的用法AHD信号要先转成并行数字视频才能喂给MAX96705。常用的解码芯片有Techpoint的TP2815、TP9950还有RD001等国产芯片。差异主要在于支持的路数、输入格式、输出接口。以TP2815为例它本身就支持4路AHD输入输出是BT.656/BT.1120并行视频。如果把它放在主机端MAX96705可以放在摄像头端但在我们的设计中AHD解码器要放在靠近摄像头的那一侧每路一个解码器或者一个解码器处理一路信号。这样模拟传输距离最短抗干扰最好。解码器输出格式建议优先确认清楚720p的AHD一般输出BT.656格式8bit YUV4221080p的AHD通常会输出BT.112016bit YUV。MAX96705支持并行输入这两个格式都能接但硬件走线需要根据位宽留足信号线。2.2 MAX96705串行器周围电路设计要点MAX96705是GMSL1串行器输入侧接收来自AHD解码器的并行视频信号和行场同步、像素时钟。硬件设计上要注意的点并行数据的信号完整性和时序匹配PCLK、HSYNC、VSYNC、DE和YUV数据线之间要做好等长处理一般控制在±100mil以内避免极端情况下出现建立时间不足。供电去耦串行器对电源纹波比较敏感特别是PCLK频率较高时电源纹波容易出现相位噪声间接导致图像边缘抖动。建议靠近IC引脚放4.7µF0.1µF陶瓷电容有条件的话还用LC滤波单独隔离。I2C地址预留MAX96705的I2C地址是通过引脚设置的。多路方案里每路的I2C地址不能重叠否则MAX9286透传时无法区分。2.3 MAX9286解串器与MIPI CSI-2输出MAX9286负责把4路GMSL信号恢复成并行视频再统一封装成MIPI CSI-2输出。它可以配置为1x4 lane或2x4 lane模式。单摄像头1080p30的CSI带宽通常足够4路1080p30需要确保MIPI时钟和lane数匹配否则带宽不够会出现掉帧。硬件设计上MAX9286的MIPI输出到SoC的CSI接口之间差分对阻抗要控制在100Ω尽量短避免过孔。此外LOCK引脚是链路锁定状态指示建议引到SoC或者至少引出测试点调试时很有用。2.4 PoC供电和同轴线缆组网GMSL传输可以同时给摄像头供电即PoCPower over Coax。MAX96705和MAX9286的PoC电路会在线缆两端用电感或磁珠把电源和高速信号分开。这个部分最容易翻车的是电感选型感值太小高速信号会跑到电源网络里感值太大负载瞬态响应又跟不上。实测下来22µH~33µH的高频叠层电感是比较合适的起点具体以芯片参考设计为准。同轴线缆选型也要注意一般用RG174、RG178或AWG 26左右的同轴都能跑但线缆阻抗要尽可能接近75Ω且屏蔽层接地要可靠。调试时遇到过图像边缘有水波纹最后发现是同轴线缆末端屏蔽层虚焊导致的。3. 软件与驱动从零把4路图像点亮3.1 I2C地址规划和配置顺序这套链路配置时SoC通过I2C控制MAX9286MAX9286再通过GMSL链路透传控制MAX96705和AHD解码器。SoC侧的I2C设备地址配置很关键建议一开始就把每一路规划好比如设备I2C地址说明MAX9286本地0x48主控直接访问MAX96705第1路0x44透传访问MAX96705第2路0x45透传访问MAX96705第3路0x46透传访问MAX96705第4路0x47透传访问AHD解码器第1路0x60通过对应MAX96705再透传这个地址表不唯一但原则是清晰、不冲突。配置顺序一般先初始化MAX9286再配置MAX96705最后配置AHD解码器。顺序反了容易出现链路已建立但视频格式不匹配的问题。3.2 MAX96705与MAX9286的关键寄存器思路不同模组寄存器值会有差异我没有死记硬背每个寄存器的数值而是用ADI官方的GMSL Calculator工具生成初始化表再根据实际调试做微调。下面这个配置片段只是思路演示static const u8 max96705_init[] { 0x00, 0x10, 0xC0, // 使能并行输入视频格式BY12/BT1120或对应模式 0x00, 0x11, 0x00, // 配置视频输入采样沿默认上升沿 0x00, 0x07, 0x32, // 设置PCLK分频与串行链路速率相关参数 0x00, 0x03, 0x26, // 串行输出驱动幅度与预加重 };MAX9286这边主要关注各通道的lock状态寄存器读到对应bit为1表示该路GMSL链路已建立MIPI输出是否使能、lane数配置、连续时钟还是非连续时钟是否启用虚拟通道功能以及4路图像映射到MIPI的虚拟通道ID。建议在初始化时打印所有lock寄存器一旦某一路没有lock就可以快速定位是串行器没配好还是物理链路有问题。3.3 SoC端camera驱动与设备树以Linux平台为例SoC端的camera驱动最终会落到设备树配置上。需要在设备树里描述CSI-DPHY、MIPI CSI-2控制器、I2C挂在哪个bus上、reset引脚和power引脚如何控制。设备树里MAX9286的节点一般类似i2c4 { max928648 { compatible maxim,max9286; reg 0x48; enable-gpios gpio4 5 GPIO_ACTIVE_HIGH; reset-gpios gpio4 6 GPIO_ACTIVE_LOW; port { max9286_mipi_out: endpoint { remote-endpoint csi2_in; style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;" />
返回列表