当前位置:   article > 正文

飞凌嵌入式RK3576开发板的MIPI-CSI调试——通路解析

飞凌嵌入式RK3576开发板的MIPI-CSI调试——通路解析

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

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

一、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)

  1. sensor0->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir0
  2. sensor1->csi2_dphy3->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir1

三摄(接dcphy和2个dphy)

  1. sensor0->csi2_dcphy0->mipi0_csi2->rkcif_mipi_lvds(sditf)->rkisp_vir0
  2. sensor1->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir1
  3. sensor2->csi2_dphy3->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir2

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

  1. sensor0->csi2_dcphy0->mipi0_csi2->rkcif_mipi_lvds(sditf)->rkisp_vir0
  2. sensor1->csi2_dphy1->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir1
  3. sensor2->csi2_dphy2->mipi2_csi2->rkcif_mipi_lvds2(sditf)->rkisp_vir2
  4. sensor3->csi2_dphy4->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir3
  5. sensor4->csi2_dphy5->mipi4_csi2->rkcif_mipi_lvds4(sditf)->rkisp_vir4

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

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

二、不同平台的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掉。

三、总结

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

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号