Как адаптировать камеру mipi к dts на платформе rk?
Как адаптировать камеру mipi к dts на платформе rk?

Предисловие:

Многие друзья раньше спрашивали, как адаптировать mipi камеру на платформе rk, или как модифицировать ее в дереве устройств. Сегодня хотел бы поделиться с вами хорошей статьей!

MIPI-CSI:

Введение в ресурс MIPI-CSI RK3588s:

Примечание. D/C-PHY доступен только в версии DPHY-V2.0.

VICAP:

RK3588/RK3588S VICAP поддерживает характеристики ввода и вывода:

ISP:

Интернет-провайдер RK3588/RK3588s относится к версии RK ISP v3.0 и имеет 2 интернет-провайдера:

Примечание. CIS означает датчик изображения CMOS.

Введение в конфигурацию DTS, связанную с камерой RK3588:

Здесь мы используем конфигурацию камеры платы разработки RK3588-EVB для иллюстрации канала камеры RK3588, на следующем рисунке представлена ​​принципиальная схема канала подключения камеры RK3588, который может поддерживать 7 камер.

Описание блок-схемы:

  • rk3588 поддерживает два dcphy, имена узлов — csi2_dcphy0/csi2_dcphy1. Каждое оборудование dcphy поддерживает одновременное использование RX/TX, а RX используется для входа камеры. Поддерживает мультиплексирование протоколов DPHY/CPHY. Следует отметить, что TX/RX одного и того же dcphy может одновременно использовать только DPHY или CPHY. Другие параметры dcphy см. в техническом описании rk3588.
  • rk3588 поддерживает 2 оборудования dphy, здесь мы называем его dphy0_hw/dphy1_hw. Оба оборудования dphy могут работать в полном режиме и в разделенном режиме.

dphy0_hw:

  • Полный режим: имя узла использует csi2_dphy0 и поддерживает до 4 полос.
  • Режим разделения: разделение на 2 физических для использования, а именно csi2_dphy1 (с использованием полосы 0/1) и csi2_dphy2 (с использованием полосы 2/3). Каждая физа поддерживает до 2 полос.
  • Когда dphy0_hw использует полную режим,Ссылка должна быть по ссылке csi2_dphy1 Конфигурация,Но имя узла csi2_dphy1 необходимо изменить на csi2_dphy0.,Программное обеспечение использует серийный номер phy, чтобы определить режим, используемый phy.

dphy1_hw:

  • Полный режим: имя узла использует csi2_dphy3 и поддерживает до 4 полос.
  • Режим разделения: разделение на 2 физических для использования, а именно csi2_dphy4 (с использованием полосы 0/1) и csi2_dphy5 (с использованием полосы 2/3). Каждая физическая часть поддерживает до 2 полос.
  • Когда dphy1_hw использует полную режим,Ссылка должна быть по ссылке csi2_dphy4 Конфигурация,Но имя узла csi2_dphy4 необходимо изменить на csi2_dphy3.,Программное обеспечение использует серийный номер phy, чтобы определить режим, используемый phy.

Чтобы использовать указанный выше узел mipi phy, вам необходимо настроить соответствующий физический узел.

(csi2_dcphy0_hw/csi2_dcphy1_hw/csi2_dphy0_hw/csi2_dphy1_hw) Каждому mipi phy требуется модуль csi2 для анализа протокола mipi, а имена узлов — mipi0_csi2~mipi5_csi2.

Все данные камеры rk3588 должны пройти vicap, а затем подключиться к интернет-провайдеру. rk3588 поддерживает только одно оборудование vicap. Этот vicap поддерживает одновременный ввод 6 данных mipi phy и 1 dvp, поэтому мы разделяем vicap на 7 узлов, включая rkcif_mipi_lvds~rkcif_mipi_lvds5, rkcif_dvp. Отношения привязки каждого узла должны строго соответствовать узлам блока. Схема конфигурации серийного номера.

Связь между каждым узлом vicap и интернет-провайдером указывается соответствующим виртуальным XXX_sditf.

rk3588 поддерживает 2 оборудования ISP. Каждое устройство ISP может виртуализировать несколько виртуальных узлов. Программное обеспечение использует обратное чтение для считывания данных изображения каждого канала из DDR для обработки ISP. Для многокамерных решений рекомендуется равномерно распределять поток данных между двумя интернет-провайдерами.

Режимы прохождения и обратного чтения:

  • Прямой проход: означает, что данные собираются vicap и отправляются непосредственно провайдеру для обработки без сохранения в ddr. Следует отметить, что при использовании сквозной передачи HDR действительно сквозной передачей являются только короткие кадры. Длинные кадры требуют DDR, и интернет-провайдер читает из DDR.
  • Обратное чтение: это означает, что данные собираются из DDR через vicap. После того, как приложение получает данные, оно передает адрес буфера интернет-провайдеру, и интернет-провайдер получает данные изображения из DDR.

При настройке dts, если оборудование интернет-провайдера настроено только с одним виртуальным узлом, по умолчанию будет использоваться режим сквозной передачи. Если настроено несколько виртуальных узлов, по умолчанию будет использоваться режим обратного чтения.

Инструкция по настройке одноканальной камеры dts:

Плата разработки RK3588 EVB по умолчанию имеет только 1 камеру, а метод ее подключения такой, как показано на mipi camera0 выше. Конфигурация DTS находится в файле kernel-5.10\arch\arm64\boot\dts\rockchip\rk3588-evb1-imx415.dtsi. Вы можете понять конфигурацию этого dts в сочетании с приведенным выше рисунком следующим образом:

Язык кода:javascript
копировать
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
 *
 */

/ {
 
 Инфракрасный фильтр (IRCUT) управляется двумя проводами. К этим двум проводам подается питание напряжением 3,5–6 В путем замены положительного и отрицательного полюсов источника питания IRCUT и соблюдения времени включения 100 мс±10. %, IRCUT может быть реализован. Драйвер управляет направлением выходного тока драйвера двигателя с помощью двух команд gpio: открытие (красная линия) и закрытие (черная линия). Ток течет от открытого к закрытому, что представляет собой инфракрасный фильтр, работающий в течение дня; ток течет от закрытого к открытому, которое представляет собой кусок белого стекла и работает ночью. Его Конфигурация следующая:
 cam_ircut0: cam_ircut {
  status = "okay";
  compatible = "rockchip,ircut";
  ircut-open-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
  ircut-close-gpios  = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>;
  rockchip,camera-module-index = <0>;
  rockchip,camera-module-facing = "back";
 };
};
//Здесь используется csi2_dcphy0
&csi2_dcphy0 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;
  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi_in_ucam0: endpoint@1 {
    reg = <1>;
    //Имя порта на стороне датчика
    remote-endpoint = <&imx415_out0>;
    //mipi laneчисло,1laneдля<1>,4laneдля<1 2 3 4>,Здесь Конфигурация 4-полосная.,Это обязательно Конфигурация Иначе его не признаютmipiтип
    data-lanes = <1 2 3 4>;
   };
  };
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csidcphy0_out: endpoint@0 {
    reg = <0>;
    //mipi0_csi2_input — имя порта соответствующей стороны интернет-провайдера
    remote-endpoint = <&mipi0_csi2_input>;
   };
  };
 };
};

&i2c5 {
 status = "okay";

 imx415: imx415@1a {
  compatible = "sony,imx415" //Должно соответствовать строке, определенной драйвером
  reg = <0x1a>;//sensorизI2CАдрес устройства,7 бит
  clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;//sensor clockinКонфигурация
  clock-names = "xvclk";
  pinctrl-names = "default";
  pinctrl-0 = <&mipim0_camera1_clk>;
  //источник питания Конфигурация  power-domains = <&power RK3588_PD_VI>;
  //Конфигурация питания
  pwdn-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;  
  avdd-supply = <&vcc_mipidcphy0>;
  //Номер модуля, не повторяйте этот номер
  rockchip,camera-module-index = <0>;
  //Ориентация модуля, в том числе «спереди» и «сзади»
  rockchip,camera-module-facing = "back";
  //Имя модуля
  rockchip,camera-module-name = "CMK-OT2022-PX1";
  //IR Устройство резки
  rockchip,camera-module-lens-name = "IR0147-50IRC-8M-F20";
  lens-focus = <&cam_ircut0>;
  port {
   imx415_out0: endpoint {
   //mipi Имя порта на стороне dphy
    remote-endpoint = <&mipi_in_ucam0>;
    //mipi laneчисло,1laneдля<1>,4laneдля<1 2 3 4>,Здесь Конфигурация 4-полосная.,Это обязательно Конфигурация Иначе его не признаютmipiтип
    data-lanes = <1 2 3 4>;
   };
  };
 };
};

&mipi_dcphy0 {
 status = "okay";
};

&mipi0_csi2 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;

  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi0_csi2_input: endpoint@1 {
    reg = <1>;
    //csi2 Имя порта на стороне dphy
    remote-endpoint = <&csidcphy0_out>;
   };
  };

  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi0_csi2_output: endpoint@0 {
    reg = <0>;
    //имя порта на стороне vicap
    remote-endpoint = <&cif_mipi_in0>;
   };
  };
 };
};
//Конфигурация vicap, здесь узел rkcif используется для представления vicap
&rkcif {
 status = "okay";
};

&rkcif_mipi_lvds {
 status = "okay";

 port {
  cif_mipi_in0: endpoint {
  //csi2 Имя порта на стороне хоста
   remote-endpoint = <&mipi0_csi2_output>;
  };
 };
};

&rkcif_mipi_lvds_sditf {
 status = "okay";

 port {
  mipi_lvds_sditf: endpoint {
  //имя порта виртуального устройства ISP
   remote-endpoint = <&isp0_vir0>;
  };
 };
};

&rkcif_mmu {
 status = "okay";
};

&rkisp0 {
 status = "okay";
};

&isp0_mmu {
 status = "okay";
};

&rkisp0_vir0 {
 status = "okay";

 port {
  #address-cells = <1>;
  #size-cells = <0>;

  isp0_vir0: endpoint@0 {
   reg = <0>;
   //vicap mipi имя конечной точки sditf
   remote-endpoint = <&mipi_lvds_sditf>;
  };
 };
};

Инструкции по настройке DTS для 6-канальной камеры:

На основе платы разработки RK3588-EVB и платы адаптера 6-канальной камеры можно реализовать 6-канальную камеру. Конфигурация DTS находится в файле kernel-5.10\arch\arm64\boot\dts\rockchip\rk3588-evb1-cam-. 6х.дци. Для подключения 6-канальной камеры вы можете обратиться к приведенной выше схеме и понять конфигурацию dts на основе схемы следующим образом:

Язык кода:javascript
копировать
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
 *
 */
//Далее представлена ​​конфигурация физ, всего 6 физ.
&csi2_dcphy0 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;
  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi_in_ucam0: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&imx464_out0>;
    data-lanes = <1 2>;
   };
  };
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csidcphy0_out: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&mipi0_csi2_input>;
   };
  };
 };
};

&csi2_dcphy1 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;
  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi_in_ucam1: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&imx464_out1>;
    data-lanes = <1 2>;
   };
  };
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csidcphy1_out: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&mipi1_csi2_input>;
   };
  };
 };
};

&csi2_dphy0_hw {
 status = "okay";
};

&csi2_dphy1_hw {
 status = "okay";
};

&csi2_dphy1 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;
  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi_in_ucam2: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&imx464_out2>;
    data-lanes = <1 2>;
   };
  };
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csidphy1_out: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&mipi2_csi2_input>;
   };
  };
 };
};

&csi2_dphy2 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;
  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi_in_ucam3: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&imx464_out3>;
    data-lanes = <1 2>;
   };
  };
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csidphy2_out: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&mipi3_csi2_input>;
   };
  };
 };
};

&csi2_dphy4 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;
  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi_in_ucam4: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&imx464_out4>;
    data-lanes = <1 2>;
   };
  };
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csidphy4_out: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&mipi4_csi2_input>;
   };
  };
 };
};

&csi2_dphy5 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;
  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi_in_ucam5: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&imx464_out5>;
    data-lanes = <1 2>;
   };
  };
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csidphy5_out: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&mipi5_csi2_input>;
   };
  };
 };
};
//Ниже приведена общая конфигурация датчика. Конфигурация imx464_0 до imx464_5. Шесть датчиков
&i2c3 {
 status = "okay";

 /* module 77/79 0x1a 78/80 0x36 */
 imx464_2: imx464-2@1a {
  compatible = "sony,imx464";
  status = "okay";
  reg = <0x1a>;
  clocks = <&cru CLK_MIPI_CAMARAOUT_M3>;
  clock-names = "xvclk";
  power-domains = <&power RK3588_PD_VI>;
  pinctrl-names = "default";
  pinctrl-0 = <&mipim0_camera3_clk>;
  avdd-supply = <&vcc_mipicsi0>;
  pwdn-gpios = <&gpio1 RK_PB3 GPIO_ACTIVE_HIGH>;
  rockchip,camera-module-index = <2>;
  rockchip,camera-module-facing = "back";
  rockchip,camera-module-name = "CMK-OT1980-PX1";
  rockchip,camera-module-lens-name = "SHG102";
  port {
   imx464_out2: endpoint {
    remote-endpoint = <&mipi_in_ucam2>;
    data-lanes = <1 2>;
   };
  };
 };

 imx464_3: imx464-3@36 {
  compatible = "sony,imx464";
  status = "okay";
  reg = <0x36>;
  clocks = <&cru CLK_MIPI_CAMARAOUT_M3>;
  clock-names = "xvclk";
  power-domains = <&power RK3588_PD_VI>;
  avdd-supply = <&vcc_mipicsi0>;
  pwdn-gpios = <&gpio1 RK_PA7 GPIO_ACTIVE_HIGH>;
  rockchip,camera-module-index = <3>;
  rockchip,camera-module-facing = "back";
  rockchip,camera-module-name = "CMK-OT1980-PX1";
  rockchip,camera-module-lens-name = "SHG102";
  port {
   imx464_out3: endpoint {
    remote-endpoint = <&mipi_in_ucam3>;
    data-lanes = <1 2>;
   };
  };
 };
};

&i2c4 {
 status = "okay";
 pinctrl-0 = <&i2c4m3_xfer>;

 /* 77/79 0x1a 78/80 0x36 */
 imx464_4: imx464-4@1a {
  compatible = "sony,imx464";
  status = "okay";
  reg = <0x1a>;
  clocks = <&cru CLK_MIPI_CAMARAOUT_M4>;
  clock-names = "xvclk";
  power-domains = <&power RK3588_PD_VI>;
  pinctrl-names = "default";
  pinctrl-0 = <&mipim0_camera4_clk>;
  avdd-supply = <&vcc_mipicsi1>;
  pwdn-gpios = <&gpio1 RK_PB4 GPIO_ACTIVE_HIGH>;
  rockchip,camera-module-index = <0>;
  rockchip,camera-module-facing = "back";
  rockchip,camera-module-name = "CMK-OT1980-PX1";
  rockchip,camera-module-lens-name = "SHG102";
  port {
   imx464_out4: endpoint {
    remote-endpoint = <&mipi_in_ucam4>;
    data-lanes = <1 2>;
   };
  };
 };

 imx464_5: imx464-5@36 {
  compatible = "sony,imx464";
  status = "okay";
  reg = <0x36>;
  clocks = <&cru CLK_MIPI_CAMARAOUT_M4>;
  clock-names = "xvclk";
  power-domains = <&power RK3588_PD_VI>;
  avdd-supply = <&vcc_mipicsi1>;
  pwdn-gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;
  rockchip,camera-module-index = <1>;
  rockchip,camera-module-facing = "back";
  rockchip,camera-module-name = "CMK-OT1980-PX1";
  rockchip,camera-module-lens-name = "SHG102";
  port {
   imx464_out5: endpoint {
    remote-endpoint = <&mipi_in_ucam5>;
    data-lanes = <1 2>;
   };
  };
 };
};

&i2c5 {
 status = "okay";

 /* 77/79 0x1a 78/80 0x36 */
 imx464_0: imx464-0@1a {
  compatible = "sony,imx464";
  status = "okay";
  reg = <0x1a>;
  clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;
  clock-names = "xvclk";
  power-domains = <&power RK3588_PD_VI>;
  pwdn-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;
  pinctrl-names = "default";
  pinctrl-0 = <&mipim0_camera1_clk>;
  avdd-supply = <&vcc_mipidcphy0>;
  rockchip,camera-module-index = <4>;
  rockchip,camera-module-facing = "back";
  rockchip,camera-module-name = "CMK-OT1980-PX1";
  rockchip,camera-module-lens-name = "SHG102";
  port {
   imx464_out0: endpoint {
    remote-endpoint = <&mipi_in_ucam0>;
    data-lanes = <1 2>;
   };
  };
 };

 imx464_1: imx464-1@36 {
  compatible = "sony,imx464";
  status = "okay";
  reg = <0x36>;
  clocks = <&cru CLK_MIPI_CAMARAOUT_M2>;
  clock-names = "xvclk";
  power-domains = <&power RK3588_PD_VI>;
  pinctrl-names = "default";
  pinctrl-0 = <&mipim0_camera2_clk>;
  pwdn-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
  avdd-supply = <&vcc_mipidcphy0>;
  rockchip,camera-module-index = <5>;
  rockchip,camera-module-facing = "back";
  rockchip,camera-module-name = "CMK-OT1980-PX1";
  rockchip,camera-module-lens-name = "SHG102";
  port {
   imx464_out1: endpoint {
    remote-endpoint = <&mipi_in_ucam1>;
    data-lanes = <1 2>;
   };
  };
 };
};

&mipi_dcphy0 {
 status = "okay";
};

&mipi_dcphy1 {
 status = "okay";
};
//Далее — mipi Конфигурация для контроллеров, всего 6 контроллеров
&mipi0_csi2 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;

  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi0_csi2_input: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&csidcphy0_out>;
   };
  };

  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi0_csi2_output: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&cif_mipi_in0>;
   };
  };
 };
};

&mipi1_csi2 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;

  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi1_csi2_input: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&csidcphy1_out>;
   };
  };

  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi1_csi2_output: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&cif_mipi_in1>;
   };
  };
 };
};

&mipi2_csi2 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;

  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi2_csi2_input: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&csidphy1_out>;
   };
  };

  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi2_csi2_output: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&cif_mipi_in2>;
   };
  };
 };
};

&mipi3_csi2 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;

  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi3_csi2_input: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&csidphy2_out>;
   };
  };

  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi3_csi2_output: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&cif_mipi_in3>;
   };
  };
 };
};

&mipi4_csi2 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;

  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi4_csi2_input: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&csidphy4_out>;
   };
  };

  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi4_csi2_output: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&cif_mipi_in4>;
   };
  };
 };
};

&mipi5_csi2 {
 status = "okay";

 ports {
  #address-cells = <1>;
  #size-cells = <0>;

  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi5_csi2_input: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&csidphy5_out>;
   };
  };

  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   mipi5_csi2_output: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&cif_mipi_in5>;
   };
  };
 };
};
//Ниже приведена конфигурация vicap, которая разделена на 6 узлов vicap и соответствующие 6 узлов виртуального канала sditf.
&rkcif {
 status = "okay";
};

&rkcif_mipi_lvds {
 status = "okay";

 port {
  cif_mipi_in0: endpoint {
   remote-endpoint = <&mipi0_csi2_output>;
  };
 };
};

&rkcif_mipi_lvds_sditf {
 status = "okay";

 port {
  mipi_lvds_sditf: endpoint {
   remote-endpoint = <&isp0_vir0>;
  };
 };
};

&rkcif_mipi_lvds1 {
 status = "okay";

 port {
  cif_mipi_in1: endpoint {
   remote-endpoint = <&mipi1_csi2_output>;
  };
 };
};

&rkcif_mipi_lvds1_sditf {
 status = "okay";

 port {
  mipi1_lvds_sditf: endpoint {
   remote-endpoint = <&isp1_vir0>;
  };
 };
};

&rkcif_mipi_lvds2 {
 status = "okay";

 port {
  cif_mipi_in2: endpoint {
   remote-endpoint = <&mipi2_csi2_output>;
  };
 };
};

&rkcif_mipi_lvds2_sditf {
 status = "okay";

 port {
  mipi2_lvds_sditf: endpoint {
   remote-endpoint = <&isp0_vir1>;
  };
 };
};

&rkcif_mipi_lvds3 {
 status = "okay";

 port {
  cif_mipi_in3: endpoint {
   remote-endpoint = <&mipi3_csi2_output>;
  };
 };
};

&rkcif_mipi_lvds3_sditf {
 status = "okay";

 port {
  mipi3_lvds_sditf: endpoint {
   remote-endpoint = <&isp1_vir1>;
  };
 };
};

&rkcif_mipi_lvds4 {
 status = "okay";

 port {
  cif_mipi_in4: endpoint {
   remote-endpoint = <&mipi4_csi2_output>;
  };
 };
};

&rkcif_mipi_lvds4_sditf {
 status = "okay";

 port {
  mipi4_lvds_sditf: endpoint {
   remote-endpoint = <&isp0_vir2>;
  };
 };
};

&rkcif_mipi_lvds5 {
 status = "okay";

 port {
  cif_mipi_in5: endpoint {
   remote-endpoint = <&mipi5_csi2_output>;
  };
 };
};

&rkcif_mipi_lvds5_sditf {
 status = "okay";

 port {
  mipi5_lvds_sditf: endpoint {
   remote-endpoint = <&isp1_vir2>;
  };
 };
};

&rkcif_mmu {
 status = "okay";
};
// Ниже приводится конфигурация провайдера. Два провайдера разделены на 6 виртуальных узлов, и каждый провайдер виртуализирует 3 узла.
&rkisp0 {
 status = "okay";
};

&isp0_mmu {
 status = "okay";
};

&rkisp0_vir0 {
 status = "okay";

 port {
  #address-cells = <1>;
  #size-cells = <0>;

  isp0_vir0: endpoint@0 {
   reg = <0>;
   remote-endpoint = <&mipi_lvds_sditf>;
  };
 };
};

&rkisp0_vir1 {
 status = "okay";

 port {
  #address-cells = <1>;
  #size-cells = <0>;

  isp0_vir1: endpoint@0 {
   reg = <0>;
   remote-endpoint = <&mipi2_lvds_sditf>;
  };
 };
};

&rkisp0_vir2 {
 status = "okay";

 port {
  #address-cells = <1>;
  #size-cells = <0>;

  isp0_vir2: endpoint@0 {
   reg = <0>;
   remote-endpoint = <&mipi4_lvds_sditf>;
  };
 };
};

&rkisp1 {
 status = "okay";
};

&isp1_mmu {
 status = "okay";
};

&rkisp1_vir0 {
 status = "okay";

 port {
  #address-cells = <1>;
  #size-cells = <0>;

  isp1_vir0: endpoint@0 {
   reg = <0>;
   remote-endpoint = <&mipi1_lvds_sditf>;
  };
 };
};

&rkisp1_vir1 {
 status = "okay";

 port {
  #address-cells = <1>;
  #size-cells = <0>;

  isp1_vir1: endpoint@0 {
   reg = <0>;
   remote-endpoint = <&mipi3_lvds_sditf>;
  };
 };
};


&rkisp1_vir2 {
 status = "okay";

 port {
  #address-cells = <1>;
  #size-cells = <0>;

  isp1_vir2: endpoint@0 {
   reg = <0>;
   remote-endpoint = <&mipi5_lvds_sditf>;
  };
 };
};

Надеюсь, сегодняшний рассказ будет полезен всем!

Ссылка на статью: http://t.csdnimg.cn/6IZPE.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода