AVM camera方案(一)camera链路框架

概述:本文重点讨论自动驾驶中camera主流方案,主控soc上mipi_csi2搭配max96712的camera完整链路软件框架和实现方案,主要讨论了GMSL1和GMSL2两种方案,本文为本人调试过程中记录,如果不对地方欢迎讨论:853906167@qq.com

1.Camera链路完整框架:  
1.1 链路框架图:
GMSL1方案:               3Gbps 

NOTE:

摄像头模组采用森云SG2-AR0231C-0202-GMSL

GMSL2方案:          6Gbps

NOTE:

摄像头模组采用森云SG2-AR0233C-5200-GMSL2

1.2 camera模组信息:
SG2-AR0231C-0202-GMSL(GMSL1):

模组框图:

默认地址信息(8bit表示,7bit表示需要自己转换):     

MAX96705 : 0x80         转成7bit对应为0x40

AP0202 : 0xBA

AR0231 : 0X20

关键参数:

HDR支持

1920*1080/22fps

YUV422@8bit输出

SG2-AR0233C-5200-GMSL2(GMSL2):

模组框图:

默认地址信息(8bit表示,7bit表示需要自己转换):     

MAX9295A : 0x80         转成7bit对应为0x40

GW5200 : 0xDA

AR0233 : 0X20

关键参数:

HDR支持

LFM支持                            ---- LED闪烁抑制

LED在道路上的普遍使用,却带来“LED闪烁”现象。“LED闪烁”是由LED驱动方式而产生的现象,LED灯以交流方式驱动,驱动频率一般在90Hz以上,即最慢脉冲周期为11毫秒左右,LED在11毫秒周期内实现一次亮灭,为节能及延长使用寿命,占空比通常不超过50%,如果相机曝光时间较短(例如3毫秒),则有可能曝光时间正好对上LED被关灭期,这时候图像传感器抓到的就是LED灭掉的图像,如果是LED阵列,在这种情况下拍到的图像就是一部分亮,一部分暗,这就是“LED闪烁”现象

1920*1080/30fps

YUV422@8bit输出

2.I2C地址确定:       以GMSL1为例说明
max96712:
首次上电通过CFG0上拉情况确定,具体详情如下:

我们电路配置为0xD6,bit0为方向位,所以右移一位后7bit地址为0x6B

DEV_ADDR(0x00)为地址寄存器,可通过0x6B写入新的地址,如写入0x90,实际地址右移掉方向位bit0变为0x48,后续通过该地址操作max96712

max96705:
default addr:0x80,右移一位后就是0x40,在i2c配置分别依次打开lane通道的时候会分别去写入新的地址到reg(0x00)上,LaneA、LaneB、LaneC、LaneD分别设置为0x41,0X42,0X43,0X44.

如下:

regArray[0] = 0x00;
sendBuf[0] = 0x80 + 2 * (i + 1);
i2c_ptr->I2cWrite(0x40, regArray, 1, sendBuf, 1);    //分别配置ABCD通道max96705 i2c 地址

note : max96705 有个i2c address translatation功能

//set i2c_source A

regArray[0] = 0x09;         
sendBuf[0] = 0xba + 2 * (i + 1);
i2c_ptr->I2cWrite(0x41 + i, regArray, 1, sendBuf, 1);

//set i2c dst A
regArray[0] = 0x0a;
sendBuf[0] = 0xba;
i2c_ptr->I2cWrite(0x41 + i, regArray, 1, sendBuf, 1);

如上例子i=0时候,就是将0xba+2(0xbc,对应的i2c address 是0x5e)转换为0xba,也就是下面说道的ap0202默认地址。i分别从0到3就会分别把0x5e,0x5f,0x60,0x60转换成0xba

AP0202:

 我们的模组默认是连接到VDDIO_H,所以是0xBA,和上面max96705的i2c address translation功能结合就可以达到配置ap0202的目的

max9295A:

default addr : 0x80,右移一位后为0x40,再依次打开96712上的laneA-laneD通道时候分别将相应的MAX9295A改为0x41-0x44,代码如下:

linux下i2c-tools工具使用:

linux下的开源代码i2c-tools工具包,提供了多个i2c工具,可以基于该工具包扫描地址(i2c-detect),测试i2c寄存器读取写入等

3. pipeline说明
GMSL1 pipeline图:

说明:

GMSL1模式下,每个串行器不能包含多个pipe,且进入max96712后也不能随意搭配内部pipe,固定连接如上图红色部分:

GMSL1 A -->PIPE 0

GMSL1 B -->PIPE1

GMSL1 C -->PIPE 2

GMSL1 D -->PIPE3

GMSL2 pipeline图:

说明:

串行器可以配置为pipe X/pipe Y/pipe Z/pipe U 4个输出pipe,一般情况下配置为一个即可(我们配置为pipe Z),但是如果需要输出RAW原始数据或者HDR数据可以配置超过一个pipe,如上图GMSL2 A/GMSL2 D都配置了两个输出pipe

96712解串器可以为pipe0-pipe7选择输入的PORTA-PORTD中的pipex/y/z/u,详情可以参见寄存器0xF0,0xF1,0xF2,0xF3

pipe、map_src、map_dst、mipi-csi2相关寄存器和通路选择配置、VC虚拟通道配置等请参加0X90A开始的相关寄存器,如0x90a/0x90b/0x92d/0x90d/0x90e等等

我们为96712的4个通道数据分别分配了VC为0/1/2/3等4个虚拟通道号,占用两个bit位

4.PWM触发帧同步
默认方案:不使用外部GPIO来触发FSYNC,使用内部FSYNC信号

配置如下:

reg : 0x4a0          val : 0x02

PWM外部GPIO输入96712触发FSYNC

配置如下:

reg : 0x4a0         val : 0x08

reg : 0x4af          val : 0x9f

note:

该模式下需要soc触发PWM并输出到max96712的FSYNC同步管脚,可以实现控制多个camera的图像触发时间、同步、帧率,如下图分别提供了20Hz/25Hz测试情况

20Hz:    应用层10帧图片获取间隔500ms

 25Hz:  应用层10帧图片获取间隔时间400ms

5.图像基础
YUV简述

分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

YUV分为planar和packed两种格式,planar格式是先存储所有像素的Y,再存储UV,分为2-planar/3-planar。packed格式每个像素Y,U,V连续交替存储

YCbCr中的Cb标识U,Cr标识V

YUV422 8bit:         重点说明,其他格式自行学习
采样图例:

 传输样式:

 frame format:

note:

注意YUV422格式的数据如果传输顺序不匹配可能导致颜色异常
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.youkuaiyun.com/kimginginging/article/details/127963368

06-13
### GMSL 技术概述 GMSL(Gigabit Multimedia Serial Link)是种高速串行通信技术,广泛应用于嵌入式系统和汽车电子领域。该技术主要用于实现摄像头、传感器和其他设备与主控单元之间的高速数据传输[^1]。通过GMSL技术,开发人员可以在嵌入式系统中实现高效的视频数据传输和显示功能。 在NVIDIA Orin/Jetson平台中,GMSL技术被进步优化以支持车载AI视觉方案。例如,基于NVIDIA DRIVE AGX Orin的GMSL2摄像模组开发套件不仅为开发者提供了丰富的硬件资源,还配套了摄像头驱动程序和ISP调优服务,从而简化了开发流程并提高了效率[^2]。 此外,基于NVIDIA DRIVE Orin平台的16路数字同轴GMSL2摄像模组解决方案,能够帮助开发者快速搭建GMSL2摄像头开发平台。这种方案通过提供高质量的参考数据和示例应用程序,显著减少了开发工作量和风险,同时加速了产品的上市时间[^3]。 ### GMSL 技术的关键点 1. **高速数据传输**:GMSL技术支持高达数Gb/s的数据传输速率,适用于高分辨率视频流传输场景。 2. **低延迟特性**:由于其设计特点,GMSL能够在保证带宽的同时实现极低的传输延迟。 3. **灵活的拓扑结构**:GMSL支持点对点、菊花链等多种连接方式,便于构建复杂的多摄像头或传感器网络。 4. **电源管理功能**:部分GMSL器件集成了供电功能,可通过单根电缆同时传输数据和电力,简化了系统布线[^4]。 ### 开发环境与工具支持 为了更好地支持开发者使用GMSL技术,方竹科技等厂商推出了兼容JetPack 6.0/6.1系统的GMSL转接板和载板产品。这些产品全面适配AGX Orin、Orin NX、Orin Nano等开发者套件,并提供了详细的固件包和技术文档。如果用户在使用过程中遇到问题,还可以联系FAE团队获取支持[^5]。 ```python # 示例代码:GMSL 数据接收端初始化 def initialize_gmsl_receiver(device_id): # 加载驱动程序 load_driver("gmsl_driver.so") # 配置设备参数 config = { "baud_rate": 1000000000, # 设置波特率为1Gbps "data_format": "raw_video", # 指定数据格式为原始视频流 "buffer_size": 1024 * 1024 # 设置缓冲区大小为1MB } # 初始化设备 device = GMSLDevice(device_id) device.configure(config) return device ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值