• Android Camera MIPI接口知识总结


    1 CIS
    1.1 CIS知识点
    ADC数量:假如一行是720P,就需要720个ADC,每个像素ADC只采样RGB中的一种颜色,然后通过demosaic算法产生其它两种颜色,生成新的10bit or 12bit or 14bit数据,一行处理完了,720个ADC再采样下一行数据,逐行扫描,直到一帧数据采集完毕,通过MIPI传给SoC。
    bayer格式:柯达公司的Bryce Bayer发明 。RGGB为传统的raw格式;RYYB为现代的raw格式(RYYB的缺陷:有偏色,红色变成暗黑色),夜景比较好
    Chroma:表示U和V分量
    光圈F值 = 镜头的焦距 / 镜头光圈的直径 = f / D

    1.2 镜头模组对焦原理
    手机调整物距(定焦镜头),单反调整焦距(变焦镜头),现在相机的镜头都有5 ~ 7个凸透镜和凹透镜。当物距在无穷远和两倍焦距之间时,像距在焦距和两倍焦距之间,成倒立缩小的实像。
    物距:被拍摄物体到凸透镜的距离
    像距:成像平面到凸透镜的距离
    焦点:通过凸透镜的、平行主光轴的光线,在主光轴上的会聚点
    焦距:凸透镜中心到焦点的距离

    一片凸透镜的焦距是固定的,如果在它后面再放一片凹透镜并移动,就会改变屈光度,焦距就随之改变。
    外变焦镜头:在外形体积上会随着焦距的变化而伸长或缩短,单反相机。
    内变焦镜头:不论焦距如何变化,都不会改变外形的尺寸,俗称“潜望镜”式镜头,由于光学变焦是在手机内部完成,所以可以很容易地安装滤镜,无需额外安装镜头筒。
    Figure 1-1 手机潜望式内变焦镜头
    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pvb3NlbnBpbg==,size_16,color_FFFFFF,t_70
    1.3 MIPI接口2通道的数据分配
    Figure 1-2 2通道的数据分配
    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pvb3NlbnBpbg==,size_16,color_FFFFFF,t_70
    1.4 ON Semi OIS控制器LC898128
    工作原理是:利用手机摄像头模组内的Gyro芯片来侦测手部微小的抖动,将抖动信号传给OIS Control微处理器LC898128,计算出需要的补偿位移量,然后LC898128控制VCM,根据计算数据来实时调整lens的移动方向及位移量,调整光学透镜的移动来补偿这种“光轴偏移”。
    OIS是移动光学透镜,而AF是移动整个镜头,二者不是一回事。

    2 MIPI D-PHY
    2.1 MIPI PHY前缀字母的意思
    C:拉丁数字100。
    D:拉丁数字500,表示最初版本的设计目标是500Mbps;数据传输采用DDR方式,即在时钟的上下边沿都有数据传输。
    M:拉丁数字1000。

    2.2 MIPI通道状态机
    Figure 2-1 Lane的各个状态转换关系
    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pvb3NlbnBpbg==,size_16,color_FFFFFF,t_70
    2.3 combo PHY
    一个CSI2 port口可以包含多套PHY。

    2.4 如何估算MIPI Sensor需要几个lanes
    看一下MIPI的generation X的X是什么值,每代的有具体的per-lane的速度,目前的手机的一般是1Gbps = 128MB(估算可以取这个值),这下就可以算了,13M*30fps = 390M/s = 390M * raw-bytes(假如是1) = 390MB,大概是3点几个lanes,所以4lanes够用了。

    3 CSI Controller
    3.1 版本历史
    目前来说,广泛使用的是其第二个版本CSI-2,最新的版本则是CSI-3。

    CSI-2协议既可以使用与DSI一致的D-PHY物理层协议,也可以使用C-PHY作为物理层协议。而CSI-3则只能使用M-PHY作为物理层协议,也就是说CSI-2和CSI-3之间是不兼容的。

    3.2 包格式
    Refer to TI DS90UB960-Q1 datasheet 7.4.13 CSI-2 Protocol Layer for CSI-2 packet format. The DS90UB960-Q1 is a HUB Deserializer.

    3.3 虚拟通道设置
    IPUv3 SMFC: iMX6 Sensor Multi FIFO Controller, CSI->SMFC->IDMAC, SMFC has 4 DMA channels for 4 virtual channels, refer to iMX6-IPU.pdf.
    MIPI D-PHY does not care about virtual channel. Virtual channel is part of MIPI CSI-2 specification.

    CSI-2传输的数据包包头部分的起始1byte为数据标志符(Data Identifier,DI),由VC[7:6](Virtual Channel)和DT[5:0](Data Type)组成。通过不同的VC和DT值来标志不同的数据流,占2个bit位的虚拟通道VC允许最多4个数据流交叉传输,其取值范围为0~3。DT可以表示帧开始FS、帧结束FE(类似于DVP的VSYNC)和数据帧等。

    1)光学防抖的数据是sensor模组传过来的。VC=0传RAW10数据到ISP;VC=1传陀螺仪的数据到ISP。VC=1的gyro数据来了,ISP会产生motion的中断,或者DMA的中断(如果配置了DMA),可以读取FIFO或者通过DMA搬运;其它的snapshot和preview,ISP也会产生对应的中断。光学防抖只能处理1到2度的抖动。EIS可以处理4到5度的抖动。
    Figure 3-1 Gyro Data Insertion Function
    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pvb3NlbnBpbg==,size_16,color_FFFFFF,t_70
    2)Sony DOL HDR,VC=0传长曝光RAW10数据到ISP;VC=1传短曝光RAW10数据到ISP。
    带有DOL HDR模式输出的CIS在图像输出时会将长、短曝光的二帧图像按行进行列交替输出(即:长0...短0...长1...短1...这种顺序输出)。Huawei IPCamera也是这种配置。
    ​Figure 3-2 DOL HDR with MIPI Virtual Channel
    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pvb3NlbnBpbg==,size_16,color_FFFFFF,t_70
    4 ISP
    4.1 ZSL的实现机制
    拍照理论上取一个buffer就行,但实际上还是要等3A收敛,不然第一个buffer的图像质量比较差,所以一般都是一边预览,跑3A,然后再拍照。这里要注意拍照需要取3A结果,来确定是不是已经收敛。

    传统的ISP连接一个sensor后,只能输出一路,要么是预览,要么是拍照,也就是多选一。
    现代的ISP连接一个sensor后,可以同时输出几路的数据,譬如preview、snapshot(ZSL)、AI、录像输入到h264编码模块。

    单反拍一张曝光一张,无反没有反光镜,通过感光元件提供的连续视频流取景,拍照片约等于视频截图,原理就是Android中的ZSL。

    4.2 3A算法
    3A算法包括:自动对焦AF、自动曝光AE和自动白平衡AWB。

    3A算法大概原理:
    ISP出统计数据,然后后端软件(或者DSP)根据统计数据计算一些参数,计算结果中有的值还需要填到ISP寄存器中,并且控制马达运动和曝光时间,算法软件和ISP组成一个闭环系统,不断迭代,最后得到一帧比较满意的图片。

    AE:主要控制CIS曝光(ISO),并且是线性的,出来后图像平均亮度50左右(比较暗);ISP中的gamma(非线性)矫正后大概相当于50 x 2.2,基本上整张图像亮度在120附近,几乎就是人眼适应的亮度了。
    PDAF:ISP硬件抽点,也就是PD点,送给AF算法,计算出相位差,再去控制对焦马达。低亮下PD点就看不出来了,需要用CAF(contrast AF),所以手机里的对焦总称为Hybrid AF,混合对焦。

    QCOM ISP相关的软件算法代码位于:vendor/qcom/proprietary/mm-camera/mm-camera2
    打开高通平台3A算法的日志:setprop persist.camera.stats.debug.mask 7

    4.3 iMX53 IPUv3 SISG控制闪光灯
    工作原理为SISG COUNTER(Still Image Synchronization Generator)对被VSYNC使能的SISG_CLK时钟计数,当该计数器值大于SISG_SET寄存器设定值时将sisg_out对应引脚执行SET操作,当该计数器继续计数到大于SISG_CLR寄存器值时对sisg_out对应引脚执行CLR操作,这样就可以产生与VSYNC相关的触发脉冲了,并且脉冲的起始边沿offset与脉宽都可以用户配置。

    4.4 ISP vendor
    AMD: silicon image, dream chip. Lattice acquired silicon image
    ARM: apical
    huawei: apical, altek
    qcom: csr acquired zoran, later qcom acquired csr
    rockchip: dream chip, ceva

    4.5 x86 A39X0 IPU4
    1) Automotive A39X0 CSI2 PORT_CONFIG (split mode) is set by ABL Converged Security Engine.
    2) Automotive A39X0 IPU4 (4th generation Image Processing Unit), part number is CSS2600, contains both 3 scalar (RISC) processors running control firmware and 4 VLIW SIMD vector processors running algorithmic firmware. The DMA is controlled by the scalar processors.
    3) media-ctl is used to map virtual channel to /dev/videoN.

    5 Camera SerDes
    5.1 车规级CIS模组
    ISP:FH8310
    FPGA:Lattice
    Serializer:TI UB953,Camera SerDes的本质是把摄像头模组中的DVP数据转换成SoC端的MIPI数据,SerDes的lock是指Deserializer CDR时钟的锁定;一般使用50Ω同轴电缆或100Ω屏蔽双绞线(STP)电缆。

    5.2 TI SerDes
    TI FPD-Link RnD跟Maxim的GMSL RnD都在加州San Jose,两者相距10分钟车程。
    TI De-Serializer中有一个寄存器SER_ID(0x5B)存储远端即Serializer的8bit I2C地址,另外一个寄存器SLAVE_ID0(0x5D)存储CMOS sensor的8bit I2C地址。TI芯片部件号是偶数的一般做De-Serializer,奇数的做Serializer。
    Maximum MAX9288 De-Serializer中有一个寄存器I2CMSTBT(0x1C)存储远端即Serializer的8bit I2C地址。

    5.3 ADAS Box
    [6th-Mar-2022]
    DS90UB960-Q1: Deserializer
    DS90UB935-Q1: Serializer
    Jacinto: TDA2x

    5.4 SerDes port mirror (CSI-2 Replicate Mode)
    以DS90UB960-Q1为例,它有两个CSI TX Port,都支持4 lane输出,可以把CSI TX 0的输出复制到CSI TX 1,两路输出都可以用4 lane。Port Mirror主要用途,双芯片双系统,共享一套SerDes输入。
    The DS90UB960-Q1 is a HUB Deserializer.

    5.5 ADAS Camera Trigger
    SerDes摄像头出图分两种:一种是给它上电,配置好了后,按设定的帧率自己出,这种称为master模式;另一种是给一次触发信号出一帧,这个trigger信号来至于激光雷达,这种称为slave模式。
    SerDes摄像头数据和激光雷达要同步,时间对时通过Linux ptp4l,这时的摄像头出图采用slave模式,也就是需要激光雷达trigger。

    6 其它视频输入接口
    CVBS:中间的一根是信号线,外面包着的一层是地线
    DVP:传统的并行camera sensor接口,全称Digital Video Port
    LVDS:PIN脚与MIPI兼容

    7 Program
    7.1 v4l-utils
    media-ctl
    v4l2-ctl

    7.2 libyuv
    YUV422:水平width方向上的UV分量减半,而垂直height方向不变
    YUV420:水平width和垂直height方向上的UV分量都会减半

    external/libyuv
    system分区的模块:
    LOCAL_C_INCLUDES += external/libyuv/files/include/
    LOCAL_SHARED_LIBRARIES += libyuv

    vendor分区的模块:
    LOCAL_C_INCLUDES += external/libyuv/files/include/
    LOCAL_SHARED_LIBRARIES += libyuv.vendor

    8 Abbreviations
    光学防抖传感器L2G2IS:Linear 2-axis gyroscope for optical image stabilization,微型双轴OIS、MEMS陀螺仪
    ADAS/360 4PIN HSD: one lane LVDS + power, HSD means High Speed Data
    AHD: Analog High Definition
    AIS:QCOM Automotive Image Sensor Service
    A-PHY:MIPI Automotive PHY,技术来源于Valens,代替私有的GMSL
    ADAS:Advanced Driver Assistance System,先进驾驶辅助系统,Bosch提供整个方案模块
    AR023ZWDR:A表示Aptina,R表示RGB,02表示2M,3表示1/3 inch,WDR表示Wide Dynamic Range
    BG0805:brigates
    CSID:QCOM CSI Decoder
    DBL:Camera SerDes double-input mode,大多数摄像头输出的是RawData格式的数据,位数比较低。因此,可以把两个像素的数据放到一个帧里进行传输。即24位或32位的数据里包含两个像素的数据。这种每帧传输两个像素的方式称为双输入模式
    demosaic算法:“猜色”算法,也叫反拜耳算法
    DIN:Deutsches Institut für Normung,航空插头
    DMS:Driver Monitoring System,疲劳驾驶监控,使用GHS INTEGRITY RTOS系统,通过车载以太网通信(PHY工作在Master模式,连接时,会主动和Slave PHY进行链路训练),法国Valeo提供方案
    DOL HDR:Digital Overlap
    DVP:Digital Video Port
    DVR:Digital Video Recorder
    EVS:Exterior View System,Android车载系统Camera架构HAL层(不同于手机Camera架构)
    FFmpeg: Fast Forward MPEG
    Leica:Leitz Camera
    MDP:MTK Camera Media Data Path
    NVR:Network Video Recorder
    PVC:Pixel Visual Core
    RDI:QCOM Raw Dump Interface
    ROI:Region of Interest
    SLAM:Simultaneous Localization and Mapping,即时定位与地图构建
    SLVS-EC:Scalable Low Voltage Signaling Embedded Clock,Sony开发,一般与MIPI CSI引脚复用
    Titan M:Titan Mobile
    VIC:Tegra K1 Video Image Compositor,用到了Falcon MCU
    ZSL:Zero Shutter Lag

  • 相关阅读:
    线性代数---第四章线性方程组
    机器学习(四十二):遗传算法对机器学习多分类器的寻优
    TinyOs操作系统---第6章 存储管理与应用
    若安装了Python3且没有删除Python2,那么启动yum命令会报错:
    win11安装anaconda, tenserflow gpu 版本 ,cuda toolkit ,cudnn
    RA8D1-Vision Board上OSPI-Flash实践
    代码整洁之道
    信息系统项目管理师 第四版 第15章 项目风险管理
    【Java】栈和队列的模拟实现(包括循环队列)
    EPICS简单实例1 -- 向IOCSH注册自己的函数
  • 原文地址:https://blog.csdn.net/zoosenpin/article/details/73558584