AVM camera方案(一)camera链路框架
概述本文重点讨论自动驾驶中camera主流方案主控soc上mipi_csi2搭配max96712的camera完整链路软件框架和实现方案主要讨论了GMSL1和GMSL2两种方案本文为本人调试过程中记录如果不对地方欢迎讨论853906167qq.com1.Camera链路完整框架1.1 链路框架图GMSL1方案 3GbpsNOTE:摄像头模组采用森云SG2-AR0231C-0202-GMSLGMSL2方案 6GbpsNOTE:摄像头模组采用森云SG2-AR0233C-5200-GMSL21.2 camera模组信息SG2-AR0231C-0202-GMSLGMSL1:模组框图默认地址信息8bit表示7bit表示需要自己转换MAX96705 : 0x80 转成7bit对应为0x40AP0202 : 0xBAAR0231 : 0X20关键参数HDR支持1920*1080/22fpsYUV4228bit输出SG2-AR0233C-5200-GMSL2GMSL2模组框图默认地址信息8bit表示7bit表示需要自己转换MAX9295A : 0x80 转成7bit对应为0x40GW5200 : 0xDAAR0233 : 0X20关键参数HDR支持LFM支持 ---- LED闪烁抑制LED在道路上的普遍使用却带来“LED闪烁”现象。“LED闪烁”是由LED驱动方式而产生的现象LED灯以交流方式驱动驱动频率一般在90Hz以上即最慢脉冲周期为11毫秒左右LED在11毫秒周期内实现一次亮灭为节能及延长使用寿命占空比通常不超过50%如果相机曝光时间较短例如3毫秒则有可能曝光时间正好对上LED被关灭期这时候图像传感器抓到的就是LED灭掉的图像如果是LED阵列在这种情况下拍到的图像就是一部分亮一部分暗这就是“LED闪烁”现象1920*1080/30fpsYUV4228bit输出2.I2C地址确定 以GMSL1为例说明max96712:首次上电通过CFG0上拉情况确定具体详情如下我们电路配置为0xD6,bit0为方向位所以右移一位后7bit地址为0x6BDEV_ADDR0x00为地址寄存器可通过0x6B写入新的地址如写入0x90,实际地址右移掉方向位bit0变为0x48,后续通过该地址操作max96712max96705:default addr:0x80,右移一位后就是0x40,在i2c配置分别依次打开lane通道的时候会分别去写入新的地址到reg0x00上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 AregArray[0] 0x09;sendBuf[0] 0xba 2 * (i 1);i2c_ptr-I2cWrite(0x41 i, regArray, 1, sendBuf, 1);//set i2c dst AregArray[0] 0x0a;sendBuf[0] 0xba;i2c_ptr-I2cWrite(0x41 i, regArray, 1, sendBuf, 1);如上例子i0时候就是将0xba2(0xbc,对应的i2c address 是0x5e)转换为0xba也就是下面说道的ap0202默认地址。i分别从0到3就会分别把0x5e,0x5f,0x60,0x60转换成0xbaAP0202我们的模组默认是连接到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 0GMSL1 B --PIPE1GMSL1 C --PIPE 2GMSL1 D --PIPE3GMSL2 pipeline图说明串行器可以配置为pipe X/pipe Y/pipe Z/pipe U 4个输出pipe一般情况下配置为一个即可我们配置为pipe Z但是如果需要输出RAW原始数据或者HDR数据可以配置超过一个pipe如上图GMSL2 A/GMSL2 D都配置了两个输出pipe96712解串器可以为pipe0-pipe7选择输入的PORTA-PORTD中的pipex/y/z/u详情可以参见寄存器0xF0,0xF1,0xF2,0xF3pipe、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 : 0x02PWM外部GPIO输入96712触发FSYNC配置如下reg : 0x4a0 val : 0x08reg : 0x4af val : 0x9fnote:该模式下需要soc触发PWM并输出到max96712的FSYNC同步管脚可以实现控制多个camera的图像触发时间、同步、帧率如下图分别提供了20Hz/25Hz测试情况20Hz: 应用层10帧图片获取间隔500ms25Hz: 应用层10帧图片获取间隔时间400ms5.图像基础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标识VYUV422 8bit: 重点说明其他格式自行学习采样图例传输样式frame format:note:注意YUV422格式的数据如果传输顺序不匹配可能导致颜色异常————————————————版权声明本文为博主原创文章遵循 CC 4.0 BY-SA 版权协议转载请附上原文出处链接和本声明。原文链接https://blog.csdn.net/kimginginging/article/details/127963368