MIPI-CSI — это общий интерфейс камеры во встроенных системах или мобильных устройствах, обеспечивающий высокоскоростную передачу данных изображений. Новейшая плата разработки OK3576-C от Forlinx Embedded предлагает множество интерфейсов ресурсов, включая поддержку 5 x CSI-2, что означает, что она может поддерживать до пяти входов камер одновременно.
В этой статье описывается путь камеры процессора RK3576 и способы настройки различных выходных форматов камеры MIPI-CSI с помощью платы разработки OK3576-C.
01. Каналы камеры RK3576
Если доступ только к одной камере, включите только rkispx_vir0. Пожалуйста, обрати внимание:
- викап и исп не имеют прямого соответствия;
- Взаимоотношения между различными каналами vir0/vir1, по сути, представляют собой мультиплексирование одного и того же оборудования с одинаковым эффектом. При использовании нескольких камер настройте их, используя 0, 1, 2 и т. д., насколько это возможно.
Схема аппаратных каналов выглядит следующим образом:
Существует один интерфейс dcphy и два интерфейса dphy. Пути подключения следующие:
Одиночная камера (подключена к одному dphy):
датчик0->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir0
Двойные камеры (подключены к двум физическим устройствам)
датчик0->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir0датчик1->csi2_dphy3->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir1
Три камеры (подключены к dcphy и двум dphys)
датчик0->csi2_dcphy0->mipi0_csi2->rkcif_mipi_lvds(sditf)->rkisp_vir0датчик1->csi2_dphy0->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir1датчик2->csi2_dphy3->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir2
Пять камер (подключены к dcphy и двум разделенным dphy)
датчик0->csi2_dcphy0->mipi0_csi2->rkcif_mipi_lvds(sditf)->rkisp_vir0датчик1->csi2_dphy1->mipi1_csi2->rkcif_mipi_lvds1(sditf)->rkisp_vir1датчик2->csi2_dphy2->mipi2_csi2->rkcif_mipi_lvds2(sditf)->rkisp_vir2датчик3->csi2_dphy4->mipi3_csi2->rkcif_mipi_lvds3(sditf)->rkisp_vir3датчик4->csi2_dphy5->mipi4_csi2->rkcif_mipi_lvds4(sditf)->rkisp_vir4
Схема подключения каналов камеры:
(Примечание: для ввода данных RGB также необходимо подключиться к rkisp_virx)
02. Сценарии связи датчиков для разных платформ
вход yuv422/rgb888
Существует три распространенных сценария ввода yuv422/rgb888:
- Камеры со встроенным или внешним провайдером. Введите формат yuv422;
- Вход HDMI-MIPI CSI. Обычные чипы, такие как rk628d/f,lt6911xxx и т. д., обычно преобразуют yuv422, но возможен также формат rgb888;
- Множественные ахд и сердесы. Один порт mipi может поддерживать до четырех виртуальных каналов. Для этих сценариев провайдер не требуется, и соединение должно идти только по cif. Таким образом, ссылка:
датчик->csi2_dphyX->mipiX_csi2->rkcif_mipi_lvdsX rkcif_mipi_lvdsx_sditf
Узел провайдера можно отключить. X варьируется в зависимости от платформы и аппаратных подключений.
Узел, используемый для захвата изображений, — это первый видеоузел, соответствующий rkcif_mipi_lvdsX. Это можно просмотреть с помощью media-ctl для проверки топологии. Например, на макетной плате ОК3576-С с камерой OV5645 она установлена на узле media1.
root@ok3576-buildroot:/# media-ctl -p -d /dev/media1
API медиаконтроллера версии 6.1.57
водитель rkcif
модель rkcif-mipi-lvds1
сериал
Информационная платформа автобуса: rkcif-mipi-lvds1
какая версия 0x0
версия драйвера 6.1.57
Топология устройства
- сущность 1:stream_cif_mipi_id0 (1 площадка, 11 ссылок)
тип Подтип узла Флаги V4L 0
имя узла устройства /dev/video11
Pad0: Раковина
<- "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 []
- объект 5:stream_cif_mipi_id1 (1 контактная площадка, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video12
Pad0: Раковина
<- "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 [] - объект 9:stream_cif_mipi_id2 (1 контактная площадка, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video13
Pad0: Раковина
<- "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 []
- объект 13:stream_cif_mipi_id3 (1 контактная площадка, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video14
Pad0: Раковина
<- "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 [] - объект 17: rkcif_scale_ch0 (1 контактная площадка, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video15
Pad0: Раковина
<- "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 []
- объект 21: rkcif_scale_ch1 (1 площадка, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video16
Pad0: Раковина
<- "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 []
- объект 25: rkcif_scale_ch2 (1 площадка, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video17
Pad0: Раковина
<- "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 []
- объект 29: rkcif_scale_ch3 (1 контактная площадка, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video18
Pad0: Раковина
<- "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 []
- объект 33: rkcif_tools_id0 (1 панель, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video19
Pad0: Раковина
<- "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 []
- объект 37: rkcif_tools_id1 (1 панель, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video20
Pad0: Раковина
<- "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 []
- объект 41: rkcif_tools_id2 (1 панель, 11 ссылок) тип Подтип узла Флаги V4L 0 имя узла устройства /dev/video21
Pad0: Раковина
<- "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 [ВКЛЮЧЕНО]
- объект 45: rockchip-mipi-csi2 (12 контактных площадок, 122 канала) тип подтип V4L2 subdev Неизвестные флаги 0 имя узла устройства /dev/v4l-subdev1
Pad0: Sink [fmt:UYVY8_2X8/1920x1080 поле: нет цветовое пространство: srgbcrop.bounds:(0,0)/1920x1080 обрезка:(0,0)/1920x1080]
<- "rockchip-csi2-dphy0":1 [ВКЛЮЧЕНО]
площадка1: Источник
-> «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 []
площадка2: Источник
-> "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 []
площадка3: Источник
-> "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 []
Pad4: Источник
-> "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 []
Pad5: Источник
-> "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 []
площадка6: Источник
-> "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 []
Pad7: Источник
-> "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 []
Pad8: Источник
-> "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 []
Pad9: Источник
-> "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 []
площадка 10: Источник
-> "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 []
Pad11: Источник
-> "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 [ВКЛЮЧЕНО]
— объект 58: rockchip-csi2-dphy0 (2 площадки, 2 ссылки)
тип V4L2 subdev подтип Неизвестные флаги 0
имя узла устройства /dev/v4l-subdev2
Pad0: Раковина
[fmt:UYVY8_2X8/1920x1080@10000/300000 поле: нет цветовое пространство: srgb
обрезка:(0,0)/1920x1080]
<- "m01_f_ov5645 3-003c":0 [ВКЛЮЧЕНО] Pad1: Источник -> "rockchip-mipi-csi2":0 [ВКЛЮЧЕНО]
- сущность 63: m01_f_ov5645 3-003c (1 площадка, 1 ссылка)
тип V4L2 subdev подтип Флаги датчиков 0
имя узла устройства /dev/v4l-subdev3
Pad0: Источник
[fmt:UYVY8_2X8/1920x1080@10000/300000 поле: нет цветовое пространство: srgb
обрезка:(0,0)/1920x1080]
-> «rockchip-csi2-dphy0»:0 [ВКЛЮЧЕНО]
Если это многоканальный вход, он соответствует первым четырем, то есть видео11-видео14.
Ввод формата RAW
Начиная с RK3588 , то есть с isp3.0, исп микропроцессора Rockchip уже не имеет функции сбора данных, а занимается только обработкой изображений, поэтому весь путь такой:
датчик->csi2_dphyX->mipiX_csi2->rkcif_mipi_lvdsX rkcif_mipi_lvdsX_sditf->rkispx_virX
Здесь необходимо объяснить:
- Без запуска aiq (автоматическое качество изображения) rkcif_mipi_lvdsX может напрямую захватывать изображения в формате RAW;
- Если включен только узел провайдера vir0, т. е. rkispx_vir0, а последующие узлы rkispx_vir1/vir2 и т. д. не включены, это конфигурация с прямым транзитом. Даже без запуска aiq изображения nv12 все равно можно получить, но эти изображения не обрабатываются и обычно имеют светло-зеленый цвет;
- Включение других узлов vir указывает на то, что провайдеру необходимо мультиплексировать по времени, что требует включения aiq для захвата изображений (aiq будет обрабатывать мультиплексирование по времени провайдера). Поэтому, если используется только одна камера, остальные узлы исп желательно отключить.
03. Резюме
При настройке камеры сначала определите путь канала камеры и формат вывода камеры. Если это данные в формате RAW, они должны пройти через rkisp. Если это yuv422/rgb888, его нужно настроить только на rkcif_mipi_lvdsx.
В этой статье были представлены каналы камер процессора RK3576 и объяснено, как настроить различные форматы вывода для камер MIPI-CSI. В будущих статьях мы продолжим рассказывать о настройке параметров камеры и настройке дерева устройств для процессора RK3576.
Первоначально опубликовано на www.forlinx.net.