学习大佬的文章 :https://blog.csdn.net/jzwjzw19900922/category_9147221.html
文章目录
相机概述
一. 概述
各种方案的选择以及相机的选型不太了解,
导致方案会走偏,确实这其中确实涉及的图像接口、协议、信号类型比较多,很难分清楚
二. 相机分类对比
按照相机类型来分,分以下几种
1.模拟相机
模拟相机所输出的信号形式为标准的模拟量视频信号,需要配专用的图像采集卡将模拟信号转化为计算机可以处理的数字信号;
由于模拟相机类型比较多,不详聊,目前主流的是模拟高清相机CVI、TVI、AHD、CVBS。
(1) CVI
高清复合影像接口”(High Definition Composite Video Interface,HDCVI),是由浙江大华技术股份有限公司自主研发,于2012年底公布的规格
(2) TVI
全名叫“高清影像传输接口”(High Definition Transport Video Interface,HDTVI),则是由来自美国硅谷的Techpoint Inc公司研发,也是目前杭州海康威视数字技术股份有限公司主力推广的规格
(3) AHD
全名为“模拟高清”(Analog High Definition),则是由韩国Nextchip公司推出的模拟高清解决方案;
采用模拟同轴电缆传输逐行扫描的高清视频(720P以上)
(4) CVBS
CVBS即传统的模拟相机,信号是隔行视频信号,分辨率为720x576(PAL制)或者720X480(NTSC制),CVBS是标清模拟视频信号接口。
这三者与传统模拟影像相较,有以下特定
a. 更高的分辨率和清晰度、没有亮色串扰的问题
b. 传输距离皆明显增长,运用同轴电缆能实现500米的高清传输,使用双绞线也能达200米左右的传输距离
c.影像从前端传输到后端不经压缩,影像不会有延迟、图像可避免压缩损害所导致的失真问题
- Cmos数字相机
下面主要是以硬件接口来区分的,
(1)CSI MIPI相机
高速差分信号线传输,常用4lane信号线1lane时钟线,时钟一般几百Mbps到Gbps,
最常见的就是现在手机上使用的相机普遍是这种接口的,而且这种接口相机也是现在使用最普遍的,
这也完全归功于手机行业的高速发展
特点:
a.高清高分辨率, 现在主流都已经是4k30fps,模拟的还在玩720p和1080p呢
b.信号稳定、差分信号抗干扰强
c.传输距离短,一般都是十几cm,所以一般需要长距离传输就用不了
(2)LVDS相机
高速差分信号线传输,一般信号线比较多,和CSI相机很类似,
不过使用不太普遍,而且我感觉开发难度比CSI相机大
特点:
和CSI相机类似
(3)dvp相机
顾名思义,dvp并口传输,像素点几位就是几根线,这种都是低分辨低帧率的相机,
一般用于对图像要求不太高的场景
特点:
低分辨率低帧率, 抗干扰性差,传输距离短
(4)USB相机
这个应该大家都了解,以前的PC机上插上就可以用,不过随着USB协议的发展,
现在高端的主流USB相机都是USB3.0接口的,
特点:
a. 使用方便,即插即用,都是基于标准UVC协议的
b. USB3.0协议的也可以传输高质量的图像数据
c. 不稳定,易掉线,这个也是最大的问题 (这个也是USB接口的通病)
(5) 车载ADAS相机
现在主流的车载ADAS相机接口是以下两种
a. FPDlink接口相机 (TI公司的串行器和解串器)
b.GMSL接口相机 (美信公司的串行器和解串器)
相机原理:
按我的理解其实就是在CSI相机的基础上加上了串行器和解串器,
使以前只能传输十几cm的传输距离,通过特殊的差分信号传输技术可以传输高达十几米远,
其实根源仍然是CSI相机
特点:
a.高清高分辨率高帧率
b.信号稳定、差分信号抗干扰强
c.传输距离长,高达十几米传输距离
d.硬件成本高,相机成本高,串行解串器和线成本也高
车载ADAD相机:
a. 需要长距离传输,高达几米到十几米传输距离
b. 信号抗干扰性强,这就使用差分信号比较合适
c. 高清高分辨率高帧率,不过目前720p30fps也很普遍
三. 总结
1.目前车上非ADAS相机一般都是使用的比较便宜的模拟相机,一般也就几十上百一个,
一般也就是用于倒车影像的,或者环视拼接倒车使用,这种模拟相机抗干扰性能就比较差。
2.目前车载ADAS相机其实还是起步阶段(是指fpdlink和gmsl),毕竟成本在那里,大批量落地比较难;
但是相信随着智能驾驶、ADAS、AI领域的快速发展,已经硬件成本的逐步降低,后续应该会慢慢爆发起来。
Camera系统 & Fpdlink相机概述
格式分类: RAW、YUV
接口分类: mipi、fpdlink、GMSL
分辨率: 1080p、720p
nvidia camera系统架构介绍
(1)libargus
提供一系列API进行深度开发,编解码、视频采集、视频处理等
(2) nvarguscamerasrc
这个主要是用来对接Gstream框架,使用Gstream那套接口
(3)v4l2src
Linux标准V4L2框架,上图的蓝色部分,也是最普及方便第三方开发的,但是就用不了板端ISP了(不过这个ISP第三方也没法调,除非和NVIDIA深度合作);
这个是最推荐的方法,因为可以考虑用前端ISP嘛,所以这条路开发起来最快
硬件连接
上图可以看出最多支持6路硬件通路,前端CSI接口组合可以使用1、2、4lane连接
Bayer sensor
由于Bayer sensor需要使用板端ISP,而ISP tuning这部分代码和工具是不开源的,如果想开发Bayer sensor的就必须与NVIDIA的特定camera伙伴进行合作开发,就可以获得如下功能开发:
• Custom tools for sensor characterization
• Image quality tuning
由于无法和英伟达进行深度合作开发,且板端ISP调试周期太长,
所以我这边直接放弃使用Bayer sensor+Nvidia ISP,直接选择Bayer sensor+前置ISP 方案
Camera模组接口分类
Mipi接口
Mipi Sensor------>Mipi(csi2协议)------>Xavier Mipi
这条通路我这边已验证完成,在网上买一个几十块的4lane mipi 相机,
做一个转接板即可,后面就是调试camera驱动+Xavier mipi接口驱动了。
Dvp并行接口
由于xavier平台只有mipi接口,所以无法调试dvp接口摄像头
Fpdlink接口
这里主要以TI954解串器为例分析,其它解串器 TI960/TI964等
https://blog.csdn.net/jzwjzw19900922/article/details/103989148
串行器搭配使用场景
场景一: 954+ 单路953/913a/933串行器
场景二: 954+ 两路953/913a/933串行器
- 913a/933和953带宽对比
(1)953
正向速率可达4Gbps,所以理论上使用4K30fps是没问题的;
我这边使用的主要是1080p30fps。
(2)913a&933
正向速率可达1.9Gbps,由于913a和933解串器带宽限制,所以传输的图像有所限制,
理论1080p30fps,720p60fps是没问题的;
目前我这边使用最高的1080p目前只能达到20fps,720p使用30fps没问题。
-
933和913a差异
目前933串行器用起来和913a几乎是一样。
(1)1080p
目前1080p分两种,一种是YUV sensor 和Bayer sensor。
Bayer sensor:
Sensor------->Mipi(csi2)------->TI953串行器------->TI954解串器------->Mipi(csi2)-------->Xavier Mipi
这种方式由于也没有前置ISP,也需要使用Nvidia ISP,所以也不推荐
YUV sensor:
硬件连接一:Sensor+ISP------->Mipi(csi2)------->TI953串行器------->TI954解串器------->Mipi(csi2)------>Xavier Mipi
硬件连接二: Sensor+ISP------->dvp并口------->TI913a串行器------->TI954解串器------->Mipi(csi2)------->Xavier Mipi
注:
1. 这两种方案我这边也都调试ok,效率比调Nvdia ISP快很多,而且无需Nvidia支持,直接找前置ISP 支持即可
(或模组 厂)
2. 一般 Sensor+ISP +串行器 这三个器件,模组厂已经集成在一起做成一个整体模组,所以第三方开发一
般只需关心后端解串器+Xavier Mipi 这端的硬件转接即可,以及驱动实现
3. 不过如果想剩成本,尝试完全自己做相机这端,也是可行了,只是可能比较劳神伤财;
这也是现在Fpdlink相机价格高的原因了
(2)720p
Sensor+ISP------->dvp并口------->TI913a串行器------->TI954解串器------->Mipi(csi2)------->Xavier Mipi
由于720p camera模组普遍使用913a接口就可以满足要求,使用953解串器也可以只是比较浪费
总结
1. Fpdlink接口由于提升了高清图像的传输距离的同时,保证了图像的高帧率和高分辨率,
也保证了图像的稳定形(因为传输信号全程是差分信号),所以拓宽了CSI 相机的使用场景和用途,
是不错的选择,也是现在车用ADAS相机的主要使用方案。
2. 相对与传统的短距的CSI相机,成本更高,主要TI的串行器和解串器价值不菲,
以及现在市面上卖的Fpdlink相机也比较贵,所以要想批量或者大量生产的话,
就需要考虑降低成本----比较容易入手的地方就是Fpdlink相机部分
FPDLink接口相机方案选择
目前TI的FPD-Link产品有如下系列
由上面可以看到 传输速率逐渐提高,由并行数据转向高速数据CSI-2
但是通过查看datasheet,并不是只能这样搭配使用,有各种兼容的搭配使用方法
解串器接口类型选择
由于xavier平台只有CSI接口,没有DVP接口,因此914a和934 解串器可以放弃;
只能选择CSI-2输出的解串器
串行器接口类型选择即模组选型
主流模组分为两种:
RAW模组: 即模组内部没有ISP或者说没有数据格式转换的原始 RAW RGB数据, 一般使用953和935
YUV模组: 即模组内部有ISP或者说有数据格式转的YUV数据,一般使用913a和933
这个主要根据实际需求来选择,各有利弊
(1)RAW模组
依赖后端ISP 芯片处理,一般使用的是xavier/tx2板端ISP芯片,虽然强大但是如果得不到英伟达的ISP调试支持也是白搭,或者说就算有支持也是费时费力的事情,如果有实力有精力可以其它不建议;
也可以使用第三方ISP芯片处理,由第三方进行支持ISP图像质量调优比较靠谱
(2)YUV模组
这种就是比较推荐的方法,过来xavier/tx2的直接是YUV数据,不管是算法识别、显示、编码等等都可以直接使用;
另外就是 图像质量调优方面也可以直接提需求给模组供应商就行,省时省力
xavier平台视频接入通路搭配
下面只说YUV模组,也只是列出一些典型搭配不是全部
(1)一路视频输入
954+913a/933;
(2)两路视频输入
954+913a/933 *2;
954*2+913a/933 *2;
(3)四路视频输入
(954+913a/933 *2)*2;
(954*2+913a/933 *2)*2;
96x +913a/933 *4
(4)六路视频输入
(954+913a/933 *2)*3;
(954*2+913a/933 *2)*3;
96x +913a/933 *4, 96x +913a/933 *2
(5)16路视频输入
(96x +913a/933 *4)*4
以上搭配大部分已经实现
FPDLink接口相机同步方案
1.背景
车载相机由于目前有双目和环视场景需求,所以需要对多路相机有同步需求
2.概述
(1)之前有过做全志+360全景相机的经验,使用两个背靠背180度鱼眼相机,就做过两个相机之间同步;
具体实现是sensor作为从模式,通过板端ISP发送同步控制信号同时控制senosr的framesync脚。
(2)不过做Fpdlink接口车载相机时,由于中间隔着串行器/解串器,操作上薛微有点麻烦,不过做的过程发现
大致实现原理差不多
3.Fpdlink相机同步实现原理
注: 多路相机同步即曝光同步,并不是图像输出触发同步;即给sensor的framesync脚的信号同时给
同步实现需要实现的条件如下:
(1)sensor端硬件支持
这个需要sensor自身就支持framesync同步触发信号脚,即硬件就支持
(2)Fpdlink接口控制信号支持
a. Fpdlink有GPIO控制接口
b.Fpdlink解串器可以反向控制串行器GPIO脚
正好这两个都有
如下是解串器内同步和外同步实现原理
4.Fpdlink多路相机同步方案实现
(1)多路相机输入驱动
首先需要在xavier/tx2上实现Fpdlink多路相机图像输入驱动,保证多路视频通路正常;
(2)同步信号来源
可以使用主板提供,也可以用单片机提供;
要求: 频率可控,占空比可控
(3)解串器同步方案
由于有的解串器支持两路,有的支持4路;
具体使用几路相机,以及使用解串器的内同步还是外同步,需要根据实际情况而定
(4)Fpdlink 同步信号反向控制
这个就不多说了,看datasheet即可
模拟相机视频输入方案-----模拟转MIPI /DVP方案
由于模拟相机在监控领域的优势,以及模拟相机成本优势,
目前模拟相机方案需求还是很多的
具体模拟解码芯片介绍
目前接触的有以下几种:
1.Nextchip系列
韩国NEXTCHIP系列,主攻ISP、AHD、ADAS方向;
目前接触的有 NVP6134/NVP6234/N3, 之前在全志和海思平台使用过;
还有车规级NVP6324
数据传输:
海康相机等-> NVP系列芯片->CSI YUV图像输出, 使用MIPI接口接收即可
- TP系列
美国techpoint公司;
接触过的有TP9950、TP2850【单路】、TP2854【四合一】;
目前在英伟达xavier平台上适配过TP2850方案。
数据传输:
CVBS/CVI/TVI 模拟相机(涵括了海康、大华、宇视等多格式的模拟相机)—>TP芯片—> YUV CSI输出 或者 DVP 并口输出
3.ADV系列
数据传输:
CVBS模拟相机 -----> ADV7280 ------> YUV CSI 输出, 使用MIPI接口接收即可
4.立敏
RICHNEX,台湾立敏电子股份有限公司,主要从事模数混合类IC设计,主要应用于车载、安防、消费类等领域。
RN6752 AHD转BT656/BT601 720P
RN6752M 单路AHD转MIPI/BT656 1080P
RN6862M 三路AHD转MIPI 1080P
RN6864M 四路AHD转MIPI 1080P
4&6路模拟相机输入TP2850方案开发
由于TP2850只支持单路相机输入,所以多路视频输入需要多个TP2850;
另外如果只需要4路模拟输入的话,可直接用TP2854,支持4合一输入。
TP2850支持 HD-TVI、CVBS、AHD格式模拟相机输入;
HD-TV可接入海康相机。
CVBS即传统的模拟相机,信号是隔行视频信号,分辨率为720x576(PAL制)或者720X480(NTSC制),CVBS是标清模拟视频信号接口。
AHD采用模拟同轴电缆传输逐行扫描的高清视频(720P以上)
目前主要是选用AHD相机为主
驱动编写
-
camera驱动编写
-
dts配置
有些图像参数细节需要和TP原厂沟通
调试记录
-
I2C配置
这里使用TCA9546一分四I2C控制四个TP2850芯片;
-
MCLK问题
MCLK可以有xavier/tx2提供,也可以直接用外挂晶振提供;
-
TP2850时钟lane
TP2850的CSI输出时钟lane是连续时钟,不会有hs/ls切换的;
所以这里需要注意,配置驱动和dts时需要修正
-
TP2850寄存器翻页问题
TP2850的寄存器读写是有换页操作的,不要误操作了
TI954解串器功能分析
ADAS相机里面现在用得比较多的接口是FPDlink和GMSL;
这里主要讲解下FPDlink中我这边使用比较多的解串器 TI954;
这个不管是从性能、成本、方案灵活性使用起来都是比较适中的
解串器TI954特性
- 特性
我这边关注比较多的主要有以下几点:
输出端口、数据通道、传输速率、可匹配使用TI串行器
串行器搭配使用场景
场景一: 954+ 单路953/913a/933串行器
场景二: 954+ 两路953/913a/933串行器
- 913a/933和953带宽对比
(1)953
正向速率可达4Gbps,所以理论上使用4K30fps是没问题的;
我这边使用的主要是1080p30fps。
(2)913a&933
正向速率可达1.9Gbps,由于913a和933解串器带宽限制,所以传输的图像有所限制,
理论1080p30fps,720p60fps是没问题的;
目前我这边使用最高的1080p目前只能达到20fps,720p使用30fps没问题。
-
933和913a差异
目前933串行器用起来和913a几乎是一样。
功能特性
- 匹配电阻
如下表格,不同的电阻匹配阻值,匹配使用不同的RX mode;
这个就需要根据后端匹配使用的串行器型号和传输数据类型综合考虑了。
2. 虚拟通道
CSI-2协议层传输虚拟通道;
虚拟通道的目的是分离不同的数据在同一数据流中交织的流;
每个虚拟信道由唯一的信道标识标识数据包报头中的数字。因此,CSI-2 TX上下文可以与虚拟通道和数据相关联类型。
虚拟通道由2位字段定义,这个信道识别号用2位编码编码,CSI-2 TX传输通道标识符号并多路复用交错的数据流。CSI-2TX最
多支持四个并发的虚拟通道。
- 虚拟通道映射
对于每一个FPD-Link III输入端口,可以为每个输入的VC-ID分别映射到四个VC-ID值中的任何一个。这种映射是
由VC_ID_MAP寄存器0x72控制。
例1:
可以将DS90UB954-Q1配置为重新映射传入的VC-IDs以确保每个视频流都有一个唯一的ID
例2:
接收端口1将VC-IDs 0和1映射到VC-IDs 2和3
- 视频流转发
视频流转发由FWD_CTL1寄存器上DS90UB954-Q1中的转发控制进行处理0x20;
转发控制从每个fdd - link III RX端口的视频缓冲区中提取数据并转发数据到CSI-2输出接口;
它还可以处理LP和HS模式之间的转换生成作为同步帧的发送;
转发控制监控数据包和的每个视频缓冲区数据的可用性。
使用每个端口控件可以禁用从输入端口转发;
每个转发引擎可能是配置为从两个视频缓冲区中的任何一个提取数据,尽管两个缓冲区可能只分配给一个CSI-2发射器,除非在复制模式;
两个转发引擎独立运行。
启用和禁用CSI-2发射机时,请按以下顺序操作:
禁用:
-
在FWD_CTL1寄存器中禁用对指定端口的转发。
-
在CSI_ CTL2寄存器中禁用CSI周期性校准(如果启用)。
3.在CSI_ CTL寄存器中禁用连续时钟操作(如果启用)。
- 清除csi_ctl寄存器中的CSI传输使能。
启用:
-
在csi_ctl寄存器中设置CSI传输启用(如果需要,还可以设置连续时钟)。
-
在CSI_CTL2寄存器中启用CSI周期性校准(如果需要)。
3.启用FWD_CTL1寄存器中指定端口的转发。
视频转发分类
-
Best-Effort Round Robin CSI-2 Forwarding
即RR转发;
特点: (1)可输入不同视频特性的图像
(2)无需做输入端视频同步 (3)视频接收端需要根据CSI视频流的VC和DT字段来解码视频,而不是954这端区分
2.Synchronized Forwarding
即同步转发
特点: (1)输入端需做视频同步
(2)每个端口必须有相同的视频参数,包括视频线的数量和大小,是否存在同步包等
(3)有多种交织模式可选,954解串器这端自主解码视频
- 同步转发模式分类
(1)Basic Synchronized Forwarding
(2)Line-Interleave Forwarding
3)Line-Concatenated Forwarding
6. 同步信号控制
由于很多场景下,需要多路适配数据进行同步,而且是几个ms级别的同步,
所以这样就急需FPDlink接口可以支持反向的同步信号的控制。
帧同步信号(FrameSync)可以通过使用任何一个回发信道发送GPIOs频道。信号有两种方式
(1)外同步
使用DS90UB954-Q1上可用的GPIO引脚之一,并将该GPIO映射到一个或两个FPD-Link III端口上的反向通道GPIO。
(2)内同步
让DS90UB954-Q1在内部生成一个帧同步信号来发送反向通道GPIO到一个或两个附加的序列化器。
FrameSync信令在两个反向通道上都是同步的。
外同步
一个954解串器内使用外同步两个输入端
多个954解串器之间进行同步
内同步
954内部产生一定频率的同步信号