x
x
查看: 1853|回复: 0

如何通过RK3576配置MIPI-CSI摄像头的不同输出格式

[复制链接]
发表于 2024-7-25 09:57:58 | 显示全部楼层 |阅读模式

MIPI-CSI是一种在嵌入式系统或移动设备中常见的摄像头接口,能够实现高速的图像数据传输。飞凌嵌入式最新推出的OK3576-C开发板拥有丰富的资源接口,其中支持5个CSI-2接口,意味着最多可同时支持5路摄像头的输入。


本篇内容就通过OK3576-C开发板为大家介绍一下RK3576处理器的Camera通路,以及如何配置MIPI-CSI摄像头的不同输出格式。



1 RK3576的camera通路

如果只有一个摄像头接入,则只开rkispx_vir0 。需要注意的是:

1. vicap和isp并没有对应关系;

2. 各个vir0/vir1这种关系本质是同一个硬件分时复用,效果等同。多个的时候尽量使用0,1,2 ... 去配置。


硬件通路框图如下:



有一个dcphy接口和两个dphy接口,接入路径如下:


单摄(接第一个dphy)


sensor0->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir0

双摄(接两个dphy)


sensor0->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir0sensor1->csi2_dphy3->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir1

三摄(接dcphy和2个dphy)



sensor0->csi2_dcphy0->mipi0_csi2->rkcif_mipi_lvds(sditf)->rkisp_vir0sensor1->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir1sensor2->csi2_dphy3->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir2

五摄(接dcphy,将2个dphy拆分)

sensor0->csi2_dcphy0->mipi0_csi2->rkcif_mipi_lvds(sditf)->rkisp_vir0sensor1->csi2_dphy1->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir1sensor2->csi2_dphy2->mipi2_csi2->rkcif_mipi_lvds2(sditf)->rkisp_vir2sensor3->csi2_dphy4->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir3sensor4->csi2_dphy5->mipi4_csi2->rkcif_mipi_lvds4(sditf)->rkisp_vir4


下图是camera各个通路的连接情况:


(注:如果是RGB数据输入后面还需要跟rkisp_virx)



2 不同平台的sensor链路情况

yuv422/rgb888输入

对于yuv422/rgb888输入的情况,常见的有三种情况:


1、自带isp的或者客户外接isp的摄像头。输入yuv422格式;


2、hdmi转mipi csi输入。一般如rk628d/f,lt6911xxx等芯片,常见的是转换成yuv422,也可以rgb888格式;


3、多路ahd,serdes。这种一个mipi口,最多可以支持4个虚拟通道,对于这几种情况,是不需要走isp的,只需要到cif即可,所以链路为 :


sensor->csi2_dphyX->mipiX_csi2->rkcif_mipi_lvdsX rkcif_mipi_lvdsx_sditf

以及isp节点有可以disabled掉,里面的X根据不同平台不同硬件的接法而定。


抓图使用的节点为rkcif_mipi_lvdsX对应的第一个video节点,这个可以通过media-ctl看拓扑得到,比如OK3576-C开发板上的OV5645摄像头,挂载在media1节点。

  1. root@ok3576-buildroot:/# media-ctl -p -d /dev/media1
  2. Media controller API version 6.1.57
  3. driver          rkcif
  4. model           rkcif-mipi-lvds1
  5. serial
  6. bus info        platform:rkcif-mipi-lvds1
  7. hw revision     0x0
  8. driver version  6.1.57

  9. Device topology

  10. - entity 1: stream_cif_mipi_id0 (1 pad, 11 links)
  11.       type Node subtype V4L flags 0
  12.       device node name /dev/video11
  13.   pad0: Sink
  14.           <- "rockchip-mipi-csi2":1 [ENABLED]
  15.           <- "rockchip-mipi-csi2":2 []
  16.           <- "rockchip-mipi-csi2":3 []
  17.           <- "rockchip-mipi-csi2":4 []
  18.           <- "rockchip-mipi-csi2":5 []
  19.           <- "rockchip-mipi-csi2":6 []
  20.           <- "rockchip-mipi-csi2":7 []
  21.           <- "rockchip-mipi-csi2":8 []
  22.           <- "rockchip-mipi-csi2":9 []
  23.           <- "rockchip-mipi-csi2":10 []
  24.           <- "rockchip-mipi-csi2":11 []
  25. - entity 5: stream_cif_mipi_id1 (1 pad, 11 links)
  26.       type Node subtype V4L flags 0
  27.       device node name /dev/video12
  28.   pad0: Sink
  29.           <- "rockchip-mipi-csi2":1 []
  30.           <- "rockchip-mipi-csi2":2 [ENABLED]
  31.           <- "rockchip-mipi-csi2":3 []
  32.           <- "rockchip-mipi-csi2":4 []
  33.           <- "rockchip-mipi-csi2":5 []
  34.           <- "rockchip-mipi-csi2":6 []
  35.           <- "rockchip-mipi-csi2":7 []
  36.           <- "rockchip-mipi-csi2":8 []
  37.           <- "rockchip-mipi-csi2":9 []
  38.           <- "rockchip-mipi-csi2":10 []
  39.           <- "rockchip-mipi-csi2":11 []
  40. - entity 9: stream_cif_mipi_id2 (1 pad, 11 links)
  41.       type Node subtype V4L flags 0
  42.       device node name /dev/video13
  43.   pad0: Sink
  44.           <- "rockchip-mipi-csi2":1 []
  45.           <- "rockchip-mipi-csi2":2 []
  46.           <- "rockchip-mipi-csi2":3 [ENABLED]
  47.           <- "rockchip-mipi-csi2":4 []
  48.           <- "rockchip-mipi-csi2":5 []
  49.           <- "rockchip-mipi-csi2":6 []
  50.           <- "rockchip-mipi-csi2":7 []
  51.           <- "rockchip-mipi-csi2":8 []
  52.           <- "rockchip-mipi-csi2":9 []
  53.           <- "rockchip-mipi-csi2":10 []
  54.           <- "rockchip-mipi-csi2":11 []
  55. - entity 13: stream_cif_mipi_id3 (1 pad, 11 links)
  56.       type Node subtype V4L flags 0
  57.       device node name /dev/video14
  58.   pad0: Sink
  59.           <- "rockchip-mipi-csi2":1 []
  60.           <- "rockchip-mipi-csi2":2 []
  61.           <- "rockchip-mipi-csi2":3 []
  62.           <- "rockchip-mipi-csi2":4 [ENABLED]
  63.           <- "rockchip-mipi-csi2":5 []
  64.           <- "rockchip-mipi-csi2":6 []
  65.           <- "rockchip-mipi-csi2":7 []
  66.           <- "rockchip-mipi-csi2":8 []
  67.           <- "rockchip-mipi-csi2":9 []
  68.           <- "rockchip-mipi-csi2":10 []
  69.           <- "rockchip-mipi-csi2":11 []
  70. - entity 17: rkcif_scale_ch0 (1 pad, 11 links)
  71.       type Node subtype V4L flags 0
  72.       device node name /dev/video15
  73.   pad0: Sink
  74.           <- "rockchip-mipi-csi2":1 []
  75.           <- "rockchip-mipi-csi2":2 []
  76.           <- "rockchip-mipi-csi2":3 []
  77.           <- "rockchip-mipi-csi2":4 []
  78.           <- "rockchip-mipi-csi2":5 [ENABLED]
  79.           <- "rockchip-mipi-csi2":6 []
  80.           <- "rockchip-mipi-csi2":7 []
  81.           <- "rockchip-mipi-csi2":8 []
  82.           <- "rockchip-mipi-csi2":9 []
  83.           <- "rockchip-mipi-csi2":10 []
  84.           <- "rockchip-mipi-csi2":11 []
  85. - entity 21: rkcif_scale_ch1 (1 pad, 11 links)
  86.       type Node subtype V4L flags 0
  87.       device node name /dev/video16
  88.   pad0: Sink
  89.           <- "rockchip-mipi-csi2":1 []
  90.           <- "rockchip-mipi-csi2":2 []
  91.           <- "rockchip-mipi-csi2":3 []
  92.           <- "rockchip-mipi-csi2":4 []
  93.           <- "rockchip-mipi-csi2":5 []
  94.           <- "rockchip-mipi-csi2":6 [ENABLED]
  95.           <- "rockchip-mipi-csi2":7 []
  96.           <- "rockchip-mipi-csi2":8 []
  97.           <- "rockchip-mipi-csi2":9 []
  98.           <- "rockchip-mipi-csi2":10 []
  99.           <- "rockchip-mipi-csi2":11 []
  100. - entity 25: rkcif_scale_ch2 (1 pad, 11 links)
  101.       type Node subtype V4L flags 0
  102.       device node name /dev/video17
  103.   pad0: Sink
  104.           <- "rockchip-mipi-csi2":1 []
  105.           <- "rockchip-mipi-csi2":2 []
  106.           <- "rockchip-mipi-csi2":3 []
  107.           <- "rockchip-mipi-csi2":4 []
  108.           <- "rockchip-mipi-csi2":5 []
  109.           <- "rockchip-mipi-csi2":6 []
  110.           <- "rockchip-mipi-csi2":7 [ENABLED]
  111.           <- "rockchip-mipi-csi2":8 []
  112.           <- "rockchip-mipi-csi2":9 []
  113.           <- "rockchip-mipi-csi2":10 []
  114.           <- "rockchip-mipi-csi2":11 []
  115. - entity 29: rkcif_scale_ch3 (1 pad, 11 links)
  116.       type Node subtype V4L flags 0
  117.       device node name /dev/video18
  118.   pad0: Sink
  119.           <- "rockchip-mipi-csi2":1 []
  120.           <- "rockchip-mipi-csi2":2 []
  121.           <- "rockchip-mipi-csi2":3 []
  122.           <- "rockchip-mipi-csi2":4 []
  123.           <- "rockchip-mipi-csi2":5 []
  124.           <- "rockchip-mipi-csi2":6 []
  125.           <- "rockchip-mipi-csi2":7 []
  126.           <- "rockchip-mipi-csi2":8 [ENABLED]
  127.           <- "rockchip-mipi-csi2":9 []
  128.           <- "rockchip-mipi-csi2":10 []
  129.           <- "rockchip-mipi-csi2":11 []
  130. - entity 33: rkcif_tools_id0 (1 pad, 11 links)
  131.       type Node subtype V4L flags 0
  132.       device node name /dev/video19
  133.   pad0: Sink
  134.           <- "rockchip-mipi-csi2":1 []
  135.           <- "rockchip-mipi-csi2":2 []
  136.           <- "rockchip-mipi-csi2":3 []
  137.           <- "rockchip-mipi-csi2":4 []
  138.           <- "rockchip-mipi-csi2":5 []
  139.           <- "rockchip-mipi-csi2":6 []
  140.           <- "rockchip-mipi-csi2":7 []
  141.           <- "rockchip-mipi-csi2":8 []
  142.           <- "rockchip-mipi-csi2":9 [ENABLED]
  143.           <- "rockchip-mipi-csi2":10 []
  144.           <- "rockchip-mipi-csi2":11 []
  145. - entity 37: rkcif_tools_id1 (1 pad, 11 links)
  146.       type Node subtype V4L flags 0
  147.       device node name /dev/video20
  148.   pad0: Sink
  149.           <- "rockchip-mipi-csi2":1 []
  150.           <- "rockchip-mipi-csi2":2 []
  151.           <- "rockchip-mipi-csi2":3 []
  152.           <- "rockchip-mipi-csi2":4 []
  153.           <- "rockchip-mipi-csi2":5 []
  154.           <- "rockchip-mipi-csi2":6 []
  155.           <- "rockchip-mipi-csi2":7 []
  156.           <- "rockchip-mipi-csi2":8 []
  157.           <- "rockchip-mipi-csi2":9 []
  158.           <- "rockchip-mipi-csi2":10 [ENABLED]
  159.           <- "rockchip-mipi-csi2":11 []
  160. - entity 41: rkcif_tools_id2 (1 pad, 11 links)
  161.       type Node subtype V4L flags 0
  162.       device node name /dev/video21
  163.   pad0: Sink
  164.           <- "rockchip-mipi-csi2":1 []
  165.           <- "rockchip-mipi-csi2":2 []
  166.           <- "rockchip-mipi-csi2":3 []
  167.           <- "rockchip-mipi-csi2":4 []
  168.           <- "rockchip-mipi-csi2":5 []
  169.           <- "rockchip-mipi-csi2":6 []
  170.           <- "rockchip-mipi-csi2":7 []
  171.           <- "rockchip-mipi-csi2":8 []
  172.           <- "rockchip-mipi-csi2":9 []
  173.           <- "rockchip-mipi-csi2":10 []
  174.           <- "rockchip-mipi-csi2":11 [ENABLED]
  175. - entity 45: rockchip-mipi-csi2 (12 pads, 122 links)
  176.       type V4L2 subdev subtype Unknown flags 0
  177.       device node name /dev/v4l-subdev1
  178.   pad0: Sink
  179.           [fmt:UYVY8_2X8/1920x1080 field:none colorspace:srgb
  180.            crop.bounds:(0,0)/1920x1080
  181.            crop:(0,0)/1920x1080]
  182.           <- "rockchip-csi2-dphy0":1 [ENABLED]
  183.   pad1: Source
  184.           -> "stream_cif_mipi_id0":0 [ENABLED]
  185.           -> "stream_cif_mipi_id1":0 []
  186.           -> "stream_cif_mipi_id2":0 []
  187.           -> "stream_cif_mipi_id3":0 []
  188.           -> "rkcif_scale_ch0":0 []
  189.           -> "rkcif_scale_ch1":0 []
  190.           -> "rkcif_scale_ch2":0 []
  191.           -> "rkcif_scale_ch3":0 []
  192.           -> "rkcif_tools_id0":0 []
  193.           -> "rkcif_tools_id1":0 []
  194.           -> "rkcif_tools_id2":0 []
  195.   pad2: Source
  196.           -> "stream_cif_mipi_id0":0 []
  197.           -> "stream_cif_mipi_id1":0 [ENABLED]
  198.           -> "stream_cif_mipi_id2":0 []
  199.           -> "stream_cif_mipi_id3":0 []
  200.           -> "rkcif_scale_ch0":0 []
  201.           -> "rkcif_scale_ch1":0 []
  202.           -> "rkcif_scale_ch2":0 []
  203.           -> "rkcif_scale_ch3":0 []
  204.           -> "rkcif_tools_id0":0 []
  205.           -> "rkcif_tools_id1":0 []
  206.           -> "rkcif_tools_id2":0 []
  207.   pad3: Source
  208.           -> "stream_cif_mipi_id0":0 []
  209.           -> "stream_cif_mipi_id1":0 []
  210.           -> "stream_cif_mipi_id2":0 [ENABLED]
  211.           -> "stream_cif_mipi_id3":0 []
  212.           -> "rkcif_scale_ch0":0 []
  213.           -> "rkcif_scale_ch1":0 []
  214.           -> "rkcif_scale_ch2":0 []
  215.           -> "rkcif_scale_ch3":0 []
  216.           -> "rkcif_tools_id0":0 []
  217.           -> "rkcif_tools_id1":0 []
  218.           -> "rkcif_tools_id2":0 []
  219.   pad4: Source
  220.           -> "stream_cif_mipi_id0":0 []
  221.           -> "stream_cif_mipi_id1":0 []
  222.           -> "stream_cif_mipi_id2":0 []
  223.           -> "stream_cif_mipi_id3":0 [ENABLED]
  224.           -> "rkcif_scale_ch0":0 []
  225.           -> "rkcif_scale_ch1":0 []
  226.           -> "rkcif_scale_ch2":0 []
  227.           -> "rkcif_scale_ch3":0 []
  228.           -> "rkcif_tools_id0":0 []
  229.           -> "rkcif_tools_id1":0 []
  230.           -> "rkcif_tools_id2":0 []
  231.   pad5: Source
  232.           -> "stream_cif_mipi_id0":0 []
  233.           -> "stream_cif_mipi_id1":0 []
  234.           -> "stream_cif_mipi_id2":0 []
  235.           -> "stream_cif_mipi_id3":0 []
  236.           -> "rkcif_scale_ch0":0 [ENABLED]
  237.           -> "rkcif_scale_ch1":0 []
  238.           -> "rkcif_scale_ch2":0 []
  239.           -> "rkcif_scale_ch3":0 []
  240.           -> "rkcif_tools_id0":0 []
  241.           -> "rkcif_tools_id1":0 []
  242.           -> "rkcif_tools_id2":0 []
  243.   pad6: Source
  244.           -> "stream_cif_mipi_id0":0 []
  245.           -> "stream_cif_mipi_id1":0 []
  246.           -> "stream_cif_mipi_id2":0 []
  247.           -> "stream_cif_mipi_id3":0 []
  248.           -> "rkcif_scale_ch0":0 []
  249.           -> "rkcif_scale_ch1":0 [ENABLED]
  250.           -> "rkcif_scale_ch2":0 []
  251.           -> "rkcif_scale_ch3":0 []
  252.           -> "rkcif_tools_id0":0 []
  253.           -> "rkcif_tools_id1":0 []
  254.           -> "rkcif_tools_id2":0 []
  255.   pad7: Source
  256.           -> "stream_cif_mipi_id0":0 []
  257.           -> "stream_cif_mipi_id1":0 []
  258.           -> "stream_cif_mipi_id2":0 []
  259.           -> "stream_cif_mipi_id3":0 []
  260.           -> "rkcif_scale_ch0":0 []
  261.           -> "rkcif_scale_ch1":0 []
  262.           -> "rkcif_scale_ch2":0 [ENABLED]
  263.           -> "rkcif_scale_ch3":0 []
  264.           -> "rkcif_tools_id0":0 []
  265.           -> "rkcif_tools_id1":0 []
  266.           -> "rkcif_tools_id2":0 []
  267.   pad8: Source
  268.           -> "stream_cif_mipi_id0":0 []
  269.           -> "stream_cif_mipi_id1":0 []
  270.           -> "stream_cif_mipi_id2":0 []
  271.           -> "stream_cif_mipi_id3":0 []
  272.           -> "rkcif_scale_ch0":0 []
  273.           -> "rkcif_scale_ch1":0 []
  274.           -> "rkcif_scale_ch2":0 []
  275.           -> "rkcif_scale_ch3":0 [ENABLED]
  276.           -> "rkcif_tools_id0":0 []
  277.           -> "rkcif_tools_id1":0 []
  278.           -> "rkcif_tools_id2":0 []
  279.   pad9: Source
  280.           -> "stream_cif_mipi_id0":0 []
  281.           -> "stream_cif_mipi_id1":0 []
  282.           -> "stream_cif_mipi_id2":0 []
  283.           -> "stream_cif_mipi_id3":0 []
  284.           -> "rkcif_scale_ch0":0 []
  285.           -> "rkcif_scale_ch1":0 []
  286.           -> "rkcif_scale_ch2":0 []
  287.           -> "rkcif_scale_ch3":0 []
  288.           -> "rkcif_tools_id0":0 [ENABLED]
  289.           -> "rkcif_tools_id1":0 []
  290.           -> "rkcif_tools_id2":0 []
  291.   pad10: Source
  292.           -> "stream_cif_mipi_id0":0 []
  293.           -> "stream_cif_mipi_id1":0 []
  294.           -> "stream_cif_mipi_id2":0 []
  295.           -> "stream_cif_mipi_id3":0 []
  296.           -> "rkcif_scale_ch0":0 []
  297.           -> "rkcif_scale_ch1":0 []
  298.           -> "rkcif_scale_ch2":0 []
  299.           -> "rkcif_scale_ch3":0 []
  300.           -> "rkcif_tools_id0":0 []
  301.           -> "rkcif_tools_id1":0 [ENABLED]
  302.           -> "rkcif_tools_id2":0 []
  303.   pad11: Source
  304.           -> "stream_cif_mipi_id0":0 []
  305.           -> "stream_cif_mipi_id1":0 []
  306.           -> "stream_cif_mipi_id2":0 []
  307.           -> "stream_cif_mipi_id3":0 []
  308.           -> "rkcif_scale_ch0":0 []
  309.           -> "rkcif_scale_ch1":0 []
  310.           -> "rkcif_scale_ch2":0 []
  311.           -> "rkcif_scale_ch3":0 []
  312.           -> "rkcif_tools_id0":0 []
  313.           -> "rkcif_tools_id1":0 []
  314.           -> "rkcif_tools_id2":0 [ENABLED]
  315. - entity 58: rockchip-csi2-dphy0 (2 pads, 2 links)
  316.       type V4L2 subdev subtype Unknown flags 0
  317.       device node name /dev/v4l-subdev2
  318.   pad0: Sink
  319.           [fmt:UYVY8_2X8/1920x1080@10000/300000 field:none colorspace:srgb
  320.            crop:(0,0)/1920x1080]
  321.           <- "m01_f_ov5645 3-003c":0 [ENABLED]
  322.   pad1: Source
  323.           -> "rockchip-mipi-csi2":0 [ENABLED]
  324. - entity 63: m01_f_ov5645 3-003c (1 pad, 1 link)
  325.       type V4L2 subdev subtype Sensor flags 0
  326.       device node name /dev/v4l-subdev3
  327.   pad0: Source
  328.           [fmt:UYVY8_2X8/1920x1080@10000/300000 field:none colorspace:srgb
  329.            crop:(0,0)/1920x1080]
  330.           -> "rockchip-csi2-dphy0":0 [ENABLED]
复制代码


如果是多路输入,就对应前4个,即video11-video14。


RAW格式输入

从RK3588开始,也就是isp3.0起,瑞芯微处理器的isp便不再有采集功能,而只做图像处理,所以整个通路为:


sensor->csi2_dphyX->mipiX_csi2->rkcif_mipi_lvdsX rkcif_mipi_lvdsX_sditf->rkispx_virX

这里需要说明一下:

1、在不跑aiq的时候,rkcif_mipi_lvdsX是可以拿RAW图的;


2、如果我们只打开isp节点的vir0即rkispx_vir0,不打开后面的rkispx_vir1/vir2...,这种就是直通的,不跑aiq,也能拿到nv12图,但是是未经过效果处理,一般是淡绿色;


3、打开其他vir节点,说明isp需要分时复用,isp节点就必须要开启aiq才能拿图(aiq会分时复用isp) ,所以如果只有一个camera,其他isp节点建议disabled掉。



3 总结

在配置摄像头时,首先要确定摄像头走的通路,并确定摄像头输出的格式,如果是RAW图则需要走rkisp,如果是yuv422/rgb888,则只需要配置到rkcif_mipi_lvdsx。


本文介绍了RK3576处理器的Camera通路,以及如何配置MIPI-CSI摄像头的不同输出格式。在后续的文章中,将会继续为大家带来RK3576处理器的摄像头参数配置和设备树配置方法。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表