找回密码
 注册
关于网站域名变更的通知
查看: 240|回复: 0
打印 上一主题 下一主题

RK3576处理器MIPI-CSI调试的通路解析

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-7-25 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

; e( }- V1 q  A6 j4 u

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

! U, g; x6 J- E0 \* W: v7 G


. ~/ B6 P6 O, x/ }2 d  k

1 RK3576的camera通路

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

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

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


. M+ l4 I$ f$ l' L5 j" x0 Z) V

硬件通路框图如下:


/ u9 r# H3 Z) q7 K7 t  O

- C' }: N& d6 `! Q5 ]

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

& s5 k2 Q: C7 t" T( E/ {4 Z0 O

单摄(接第一个dphy)

  • $ l  L  [% o2 Q) s8 x- v
sensor0->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir0

双摄(接两个dphy)

  • 2 i: L1 n# E' k) q- w
sensor0->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir0sensor1->csi2_dphy3->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir1
+ P. `; h7 X5 {" \

三摄(接dcphy和2个dphy)

7 r$ K# r8 j5 k; u

/ H8 x* z3 H  Asensor0->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_vir24 e* G/ \1 W0 T" e% {, h# S: n8 l+ c

五摄(接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

$ \1 P5 p  n7 ~$ g1 j( I! `4 C

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

- x  G: S/ h( ^

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


$ ?0 \/ |$ W& \8 k, |) g
1 `. C, B3 N4 U- O/ T, A, ~" T

2 不同平台的sensor链路情况

yuv422/rgb888输入

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


4 Y6 q+ ?, y# L/ ]

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

, Z) P( T, \# m/ V4 x: j1 Y9 x! R3 l

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


% J$ ?* }5 A) `; X( ^

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


  • 7 a' P3 z! Y  M! g6 D0 @% i: b
sensor->csi2_dphyX->mipiX_csi2->rkcif_mipi_lvdsX rkcif_mipi_lvdsx_sditf

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


/ o4 g9 d! L0 @: U# g# Z

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

root@ok3576-buildroot:/# media-ctl -p -d /dev/media1Media controller API version 6.1.57driver          rkcifmodel           rkcif-mipi-lvds1serialbus info        platform:rkcif-mipi-lvds1hw revision     0x0driver version  6.1.57Device topology- entity 1: stream_cif_mipi_id0 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video11  pad0: Sink          <- "rockchip-mipi-csi2":1 [ENABLED]          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 5: stream_cif_mipi_id1 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video12  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 [ENABLED]          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 9: stream_cif_mipi_id2 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video13  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 [ENABLED]          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 13: stream_cif_mipi_id3 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video14  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 [ENABLED]          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 17: rkcif_scale_ch0 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video15  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 [ENABLED]          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 21: rkcif_scale_ch1 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video16  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 [ENABLED]          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 25: rkcif_scale_ch2 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video17  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 [ENABLED]          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 29: rkcif_scale_ch3 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video18  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 [ENABLED]          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 33: rkcif_tools_id0 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video19  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 [ENABLED]          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 []- entity 37: rkcif_tools_id1 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video20  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 [ENABLED]          <- "rockchip-mipi-csi2":11 []- entity 41: rkcif_tools_id2 (1 pad, 11 links)      type Node subtype V4L flags 0      device node name /dev/video21  pad0: Sink          <- "rockchip-mipi-csi2":1 []          <- "rockchip-mipi-csi2":2 []          <- "rockchip-mipi-csi2":3 []          <- "rockchip-mipi-csi2":4 []          <- "rockchip-mipi-csi2":5 []          <- "rockchip-mipi-csi2":6 []          <- "rockchip-mipi-csi2":7 []          <- "rockchip-mipi-csi2":8 []          <- "rockchip-mipi-csi2":9 []          <- "rockchip-mipi-csi2":10 []          <- "rockchip-mipi-csi2":11 [ENABLED]- entity 45: rockchip-mipi-csi2 (12 pads, 122 links)      type V4L2 subdev subtype Unknown flags 0      device node name /dev/v4l-subdev1  pad0: Sink          [fmt:UYVY8_2X8/1920x1080 field:none colorspace:srgb           crop.bounds0,0)/1920x1080           crop0,0)/1920x1080]          <- "rockchip-csi2-dphy0":1 [ENABLED]  pad1: Source          -> "stream_cif_mipi_id0":0 [ENABLED]          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad2: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 [ENABLED]          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad3: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 [ENABLED]          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad4: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 [ENABLED]          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad5: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 [ENABLED]          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad6: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 [ENABLED]          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad7: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 [ENABLED]          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad8: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 [ENABLED]          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad9: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 [ENABLED]          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 []  pad10: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 [ENABLED]          -> "rkcif_tools_id2":0 []  pad11: Source          -> "stream_cif_mipi_id0":0 []          -> "stream_cif_mipi_id1":0 []          -> "stream_cif_mipi_id2":0 []          -> "stream_cif_mipi_id3":0 []          -> "rkcif_scale_ch0":0 []          -> "rkcif_scale_ch1":0 []          -> "rkcif_scale_ch2":0 []          -> "rkcif_scale_ch3":0 []          -> "rkcif_tools_id0":0 []          -> "rkcif_tools_id1":0 []          -> "rkcif_tools_id2":0 [ENABLED]- entity 58: rockchip-csi2-dphy0 (2 pads, 2 links)      type V4L2 subdev subtype Unknown flags 0      device node name /dev/v4l-subdev2  pad0: Sink          [fmt:UYVY8_2X8/1920x1080@10000/300000 field:none colorspace:srgb           crop0,0)/1920x1080]          <- "m01_f_ov5645 3-003c":0 [ENABLED]  pad1: Source          -> "rockchip-mipi-csi2":0 [ENABLED]- entity 63: m01_f_ov5645 3-003c (1 pad, 1 link)      type V4L2 subdev subtype Sensor flags 0      device node name /dev/v4l-subdev3  pad0: Source          [fmt:UYVY8_2X8/1920x1080@10000/300000 field:none colorspace:srgb           crop:(0,0)/1920x1080]          -> "rockchip-csi2-dphy0":0 [ENABLED]- G) r9 j$ [. C; c1 U& J, G) b. Q, h

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

! l/ c! y$ L6 X

RAW格式输入

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


  • 0 E4 M" t9 G. v& R
sensor->csi2_dphyX->mipiX_csi2->rkcif_mipi_lvdsX rkcif_mipi_lvdsX_sditf->rkispx_virX 2 |! d0 x! C+ r- w. {/ s

这里需要说明一下:

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


; g, v# p" ?/ o" P. l$ I( N

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

* q, O( r# @1 G

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

; d' L, q+ W$ k! \

! x4 E$ E5 R4 l9 k- R% |

3 总结

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


* L  e- v8 z& H' Q

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

9 I/ x8 r# n4 E! J6 P, U& Q; s
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 13:25 , Processed in 0.171875 second(s), 22 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表