【相机方案】智能驾驶的域控采用的“串行器和解串器”方案的总结(持续更新),SerDes,GMSL

SerDes是Serializer/Deserializer的缩写,即串行器和解串器。由于同轴线的传输延迟几乎可以忽略不计(ns级别),相当于将原来只能短距离传输的高速并行信号(MIPI/I2C/CLK等)的传输距离延长,真正做到高带宽、低延迟、长距离的数据传输。

  • SerDes的串行-解串可以通过数模电路或者FPGA来实现。
  • 在商用领域,出于性价比的考量,往往会使用独立IC芯片来实现这个功能,GMSL是SerDes的一种。GMSL就是由Maxim公司开发的一系列串行-解串芯片的集合。
  • GMSL适用于视频、音频和控制信号的传输,使用50Ω同轴电缆或100Ω屏蔽双绞线电缆,传输距离可达15m或更长。目前基于GMSL架构的通信协议最高可实现单通道6Gbps的速率(参考USB3.0仅有2.5Gbps)

在这里插入图片描述

产品发展

GMSL技术经历了很长的发展时间,第一代的GMSL从2003年开始,最高支持3Gbps的传输速率,足够传输1百万-3百万像素(1080p/30fps)的视频流数据。从2017年之后,GMSL2代技术出现,传输带宽已经提升至6Gbps,可轻松传输8百万像素(4K/30fps)的视频流数据。
在这里插入图片描述
Maxim目前同时提供两代的GMSL产品,分别是GMSL1以及GMSL2,其中部分GMSL2产品兼容GMSL1。目前常见的GMSL串行-解串芯片如表1所示。其中兼容GMSL1/2的器件,既可以接入GMSL1也可以接入GMSL2。例如:

a) MAX9296解串器,既可以接入MAX96701(GMSL1)也可以接入MAX96717(GMSL2);

b) MAX9295A串行器,既可以接入MAX9286(GMSL1),也可以接入MAX96712(GMSL2);

串行器解串器
GMSL1MAX96701/MAX96715MAX9286
12bit DVP IN 1 SIO OUT@1.76Gbps4IN 1OUT@MIPI 1.5Gbps
GMSL1/2 兼容MAX9295AMAX9296MAX96722
4-MIPI IN 1 SIO OUT@6Gbps2IN 2OUT@MIPI 2.5Gbps4IN 1OUT@MIPI 2.5Gbps
GMSL2MAX96717/MAX96717FMAX96712
4-MIPI IN 1 SIO OUT@6Gbps/3Gbps4IN 1OUT@MIPI 2.5Gbps

1 Jetson Xavier平台

以Jetson Xavier为代表的Arm架构下的SoC系统,通常没有直接的GMSL接口,而是提供MIPI信号接口,因此需要通过外挂解串板的方式来实现,以下方的配置为例介绍。

硬件连接方式如图4所示,摄像头包含Sensor(IMX390)和串行器(MAX9295),两路摄像头通过GMSL Link同轴线(Coax Cable)连接到转接板(MAX9296 Deserializer Board),转接板再通过排线(MIPI White Cable)接入到Jetson Xavier开发板的CSI Port。
在这里插入图片描述
硬件架构如图5所示:

  • Sensor(IMX390)接口为MIPI-CSI,数据格式为1080p/30fps/RAW12
  • 每路摄像头搭配1个MAX9295串行器(Serializer)
  • 两路GMSL Link共同连接到解串器MAX9296
  • MAX9296解串器接入到Jetson的CSI port(以Port A为例)

在这里插入图片描述
驱动层的结构如图6所示,驱动最上层是v4l2的架构,是Linux系统下的通用相机驱动框架。中间层是sensor驱动,用于控制视频流的开关、设置图像参数等。最底层是MAX9295/9296的驱动,负责拉通数据链路。

在这里插入图片描述
Sensor驱动程序会在设备启动(Device boot)的时候,配置串行器-解串器的参数,建立起数据链路(data streaming pipeline)。一旦数据链路建立起来后,就可以分别对串行器、解串器、Sensor配置寄存器参数,控制它们的工作模式,或进行数据流的开关操作等。

2 PC电脑/工控机

PC/工控机主要运行在x86平台,这类系统通常接口有:USB/以太网/PCIE等。USB3.0的传输带宽在1Gbps – 2.5Gbps左右,以太网的带宽在100Mbps – 1000Mbps之间,PCIE的带宽高于10Gbps。

如表2所示,1M(100万像素) - 8M(8百万像素)摄像头的数据传输带宽在655Mbps – 4.4Gbps。从带宽的限制来看,USB3.0最高只能支持到2M,以太网最高支持到1M,只有PCIE可以满足所有的传输需求。

像素传输带宽USB3.0Ethernet (以太网)PCIE
1M655Mbps
2M1.3Gbps×
8M4.4Gbps××

表2 不同接口的传输带宽

PCIE 其工作原理如下:

  1. 摄像头(Sensor+Serdes)的图像数据通过GMSL同轴连接线传输到采集卡的解串芯片(DeSerdes, MAX9296)上

  2. 解串芯片将数据通过MIPI/IIC传输到FPGA,FPGA解析数据流

  3. FPGA通过PCIE将数据存放至DDR4内存中

  4. 调用SDK获取内存数据

在这里插入图片描述

3 DRIVE Xavier

https://docs.nvidia.com/drive/driveworks-3.5/supported_sensors.html
在这里插入图片描述

在这里插入图片描述

使用 Entron 的F001A100BM0A,这是侧向2MP的相机

在这里插入图片描述
在这里插入图片描述

4 TDA4 GMSL1 自主域控 MAX9286与MAX96705

在这里插入图片描述

5 寒武纪行歌 SD5223C 开发板 max96712

在这里插入图片描述

GMSL1方案: 3Gbps
串行器解串器max96705和max96712,gms1通信,HIM参数的互相之间的设置;

在这里插入图片描述
GMSL2方案: 6Gbps
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

6 orin

https://developer.nvidia.cn/drive/ecosystem-orin
在这里插入图片描述

2MP
AR0233 H100 RAW 数量:4

8MP
AR0820 H120Y RAW 数量:2
AR0820 H30 RAW 数量:1

参考

https://zhuanlan.zhihu.com/p/497871767?utm_id=0
http://www.360doc.com/content/23/1122/19/40892371_1104930953.shtml

### IPC摄像头是否需要使用串行和解 IPC(网络摄像机)作为现代监系统的重要组成部分,其数据传输方式依赖于具体的硬件设计和技术需求。在某些情况下,IPC可能需要使用串行和解来优化信号传输性能。 #### 什么是串行和解串行(Serializer)是一种将并行数据转换为高速串行数据流的集成电路件,而解(Deserializer)则负责将接收到的高速串行数据重新转换回并行数据形式。这种技术广泛应用于高带宽、远距离的数据传输场景中[^1]。 #### IPC摄像头的设计架构 IPC通常由多个功能模块构成,包括声音传感、A/D转换、图像处理以及网络服务等部件[^2]。其中,图像数据的采集与处理是一个核心环节。为了实现高效的数据传输,特别是在长距离或复杂电磁环境下的应用场合,串行和解可能会被引入到IPC的设计方案中。 #### 数据传输格式的影响 摄像头的数据输出可以采用多种不同的格式,比如CCIR601/656标准定义的数字化视频信号或者是未经处理的RAW RGB原始数据[^4]。当选用基于ITU-R BT.656这样的数字接口标准时,由于它支持通过特定速率(如27MHz/s并口或高达243Mbps串行链路)进行通信,因此有可能涉及到串行化操作以满足实际部署条件的要求[^3]。 #### 技术原理分析 - **短距离连接**: 如果IPC内部各组件之间的物理间距较小,并且工作频率处于较低水平,则可以直接利用传统的并行总线结构完成信息交换过程,此时无需额外增加串行/解单元。 - **长距离或多节点互联情况**: 随着线路长度增长或者存在多点共享同一介质的需求时,传统并行通讯方法容易受到噪声干扰影响而导致误码率上升甚至完全失效。这时就需要借助专门设计用来克服这些问题的技术手段——即运用SerDes (Serializer Deserializer) 设备把原本较宽位宽但速度相对缓慢的信息压缩打包成单一通道上传输后再拆包恢复原状的方式来进行有效传递。 综上所述,虽然并非所有的IPC都会必然配备串行和解装置,但在面对特殊应用场景下确实有必要考虑加入此类元件以便更好地保障整体系统的稳定性和可靠性表现。 ```python # 示例代码展示如何模拟简单的串行化与反序列化逻辑 def serialize(data_list): serialized_data = ''.join([str(bit) for bit in data_list]) return serialized_data def deserialize(serialized_string, chunk_size=8): deserialized_chunks = [serialized_string[i:i+chunk_size] for i in range(0, len(serialized_string), chunk_size)] return deserialized_chunks original_bits = [1, 0, 1, 1, 0, 0, 1, 0] print("Original Data:", original_bits) serial_output = serialize(original_bits) print("Serialized Output:", serial_output) deserial_result = deserialize(serial_output) print("Deserialized Result:", [[int(x)]*len(y) for y in deserial_result for x in list(y)]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hali_Botebie

文中错误请不吝指正!!!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值