Видеоанализ RV1126 ----- Обзор каждого модуля драйвера
Видеоанализ RV1126 ----- Обзор каждого модуля драйвера

1. Общая теория:

1. Ссылка на оборудование:

Как правило, камера и SOC имеют два интерфейса для подключения, которые разделены на интерфейс MIPI и интерфейс I2C. Интерфейс MIPI используется для передачи данных изображения, а путь передачи данных — от датчика к SOC. Другой интерфейс — это интерфейс I2C, который в основном используется SOC для настройки регистра конфигурации инициализации датчика и параметров камеры. Например, при захвате данных изображения вам необходимо настроить регистр датчика через i2c.

2. Поток данных изображения:

После того, как свет проходит через датчик, чип датчика генерирует исходные данные изображения (необработанные) посредством преобразования АЦП, а затем исходные данные изображения (необработанные), сгенерированные датчиком, поступают в SOC через шину MIPI. После входа в SOC они проходят. через чип обработки изображений (например, ISP) для обработки изображений. Итак, видно, что драйвер камеры V4L2 должен состоять из этих трех частей:

  • Часть первая связана с датчиком.,Например, управляйте регистром датчика для настройки.,Эта деталь предоставлена ​​производителем датчика.
  • Вторая часть связана с MIPI.,MIPI необходим для передачи изображений,Таким образом, у водителя должна быть эта часть драйвера,Эта часть обычно предоставляется производителями SOC.
  • Третья часть — часть ISP.,Некоторые SOC имеют модуль ISPобработка изображений.,После того, как изображение, переданное через MIPI, попадает в SOC, изображение необходимо дополнительно обработать в модуле ISP входящего SOC.,Значит, должен быть какой-то драйвер, описывающий модуль ISP.

(Свет) -------> [sensor] ----->(rawизображениеданные) ----->[mipiавтобус] ----->[обработка изображенийчип(нравитьсяISP)] -----> (NV16/NV12 и данные изображения других форматов)

Выходной формат датчика необработанного формата — это исходная запись уровня, когда датчик преобразует оптический сигнал в электрический сигнал. Необработанные данные не обрабатываются:

2. Найдите эти три части из DTS:

Мы уже знаем, что у камеры есть три части драйверов, которые описывают сенсор, MIPI и чип обработки изображений, поэтому эти три части также описаны в dts.

Часть 1: dts, связанные с датчиком

Язык кода:javascript
копировать
&i2c1 {                                          
                                                                                   
 tp2855_1: tp2855_1@44 {  
  
  compatible = "techpoint,tp2855";                        
  reg = <0x44>;  //i2c-адрес                     
  ...
  port {                                        
   ucam_out0: endpoint {                       
    remote-endpoint = <&csi_dphy0_input>; //Сенсорсоединять к mipi
    data-lanes = <1 2 3 4>;                   
   };                                          
  };   
 }; 
 
 tp2855_2: tp2855_2@45 {
  compatible = "techpoint,tp2855";
  reg = <0x45>; //i2c-адрес         
  ...

  port {
   ucam_out1: endpoint {
    remote-endpoint = <&csi_dphy1_input>; //Сенсорсоединять к mipi    csi_dphy1_input
    data-lanes = <1 2 3 4>; 
   };
  };
 };
};    

Часть 2. Связанная с физической шиной MIPI:

Для платформ RV1126 и RV1106 поддерживаются два оборудования DPHY. Существует два независимых и полных стандартных физических файла mipi csi2, соответствующих csi_dphy0 и csi_dphy1 в dts (см. rv1126.dtsi). Характеристики следующие:

Язык кода:javascript
копировать
data полоса максимум 4 lanes;
Максимальная скорость 2,5 Гбит/с/линия;

sensor----mipi dphy:

Язык кода:javascript
копировать
//соединять 0x44 первые четыре канала Камера
&csi_dphy0 {                                     
 status = "okay";                 

  //mipi имеет два конца один сегмент соединятьSensor,Другойодинконецсоединять mipi_csi2_input
  ports {                                         
  #address-cells = <1>;                         
  #size-cells = <0>;                            
          //соединятьприезжатьSensor                                        
  port@0 {                                      
   reg = <0>;                                  
   #address-cells = <1>;                       
   #size-cells = <0>;                          
                                                 
   csi_dphy0_input: endpoint@1 {               
    reg = <1>;                                
    remote-endpoint = <&ucam_out0>;    // соединятьприезжатьSensor : ucam_out0       
    data-lanes = <1 2 3 4>;                   
   };                                          
  };                                            
         //соединятьприезжать mipi_csi2_input                             
  port@1 {                                      
   reg = <1>;                                  
   #address-cells = <1>;                       
   #size-cells = <0>;                          
                                                 
   csi_dphy0_output: endpoint@0 {              
    reg = <0>;                                
    remote-endpoint = <&mipi_csi2_input>;     // соединятьприезжать mipi_csi2_input
    data-lanes = <1 2 3 4>;                   
   };                                          
  };                                            
 };                                             
};                                             

//соединять 0x45 тыловые четыре канала Камера             
&csi_dphy1 {                                     
 status = "okay";

  //соединятьприезжатьSensor      
 ports {
  #address-cells = <1>;
  #size-cells = <0>;

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

   csi_dphy1_input: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&ucam_out1>;// соединятьприезжатьSensor : ucam_out1 
    data-lanes = <1 2 3 4>;
   };
  };

   //соединятьприезжатьISP   
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csi_dphy1_output: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&isp_in>; // соединятьприезжатьISP : isp_in
    data-lanes = <1 2 3 4>;
   };
  };
 };     
};     

Часть 3: анализ протокола mipi (хост MIPI)

Каждому mipi phy требуется модуль csi2 для анализа датчика протокола mipi ---- mipi dphy ---- mipi_csi2

Язык кода:javascript
копировать
&mipi_csi2 {                                     
 status = "okay";                                
    
 ports {                                         
  #address-cells = <1>;                         
  #size-cells = <0>;                            
                                                 
  port@0 {                                      
   reg = <0>;                                  
   #address-cells = <1>;                       
   #size-cells = <0>;                          
                                                 
   mipi_csi2_input: endpoint@1 {               
    reg = <1>;                                
    remote-endpoint = <&csi_dphy0_output>;    
    data-lanes = <1 2 3 4>;                   
   };                                          
  };                                            
                                                                                     
  port@1 {                                      
   reg = <1>;                                  
   #address-cells = <1>;                       
   #size-cells = <0>;                          
                                                 
   mipi_csi2_output: endpoint@0 {              
    reg = <0>;                                
    remote-endpoint = <&cif_mipi_in>;         
    data-lanes = <1 2 3 4>;                   
   };                                          
  };                                            
 };                                            
};    

Часть 4: Связано с микросхемой обработки изображений (викап)

sensor----mipi dphy ---- mipi_csi2-----vicap

Язык кода:javascript
копировать
rkcif_mipi_lvds: rkcif_mipi_lvds {
 compatible = "rockchip,rkcif-mipi-lvds";
 rockchip,hw = <&rkcif>;
 // iommus = <&rkcif_mmu>;
 memory-region = <&isp_reserved>;
 status = "disabled";
};

&rkcif_mipi_lvds {                               
 status = "okay";                                
     rockchip,cif-monitor = <3 2 25 1000 5>;
  port {                                          
  /* MIPI CSI-2 endpoint */                     
  cif_mipi_in: endpoint {                       
   remote-endpoint = <&mipi_csi2_output>;      
   data-lanes = <1 2 3 4>;                     
  };                                            
 };                                            
};     

Чип обработки изображений (ISP), связанный:

Язык кода:javascript
копировать
&rkisp_vir0 {                                    
 status = "okay";
 ports {
  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   isp_in: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&csi_dphy1_output>;//соединятьприезжать mipi : csi_dphy1_output
   };
  };
 };                         
}; 

0x44 Обработка изображения взаимосвязи соединений первых четырех каналов через vicap:

Язык кода:javascript
копировать
ucam_out0 - csi_dphy0_input - csi_dphy0_output - mipi_csi2_input <-> mipi_csi2_output


  tp2855_1@44        csi_dphy0                                 mipi_csi2                           rkcif_mipi_lvds
   ucam_out0 ---> csi_dphy0_input -- csi_dphy0_output   -->   mipi_csi2_input -- mipi_csi2_output   <--->    cif_mipi_in

Разделение драйверов на первые четыре канала:

Язык кода:javascript
копировать
1 о Анализ сенсорного модуля: Sensor.c
  kernel\drivers\media\i2c\techpoint\techpoint_v4l2.c
  
2 о mipi физический уровень (csi dphy) модуль (csi_dphy0 / csi_dphy1) анализ : mipi_csi_dphy.c
  kernel\drivers\phy\rockchip\phy-rockchip-mipi-rx.c

3 о модуль парсинга mipi( mipi csi)(MIPI Анализ модуля хоста: mipi_csi.c
 kernel\drivers\media\platform\rockchip\cif\mipi-csi2.c
 
        
4 о обработка изображенийvicap Анализ модуля: rkcif_mipi.c 
 kernel\drivers\media\platform\rockchip\cif\dev.c    

0x45 Связь последних четырех каналов и маршрута обработки изображения isp:

Язык кода:javascript
копировать
ucam_out1 - csi_dphy1_input - csi_dphy1_output <-> isp_in

tp2855_2@45           csi_dphy1      rkisp_vir0
ucam_out1  -->  csi_dphy1_input -- csi_dphy1_output   <--->  isp_in

Из приведенного выше анализа мы можем узнать, что в структуре камеры есть три части, которые необходимо реализовать на разных платах или разных платформах.

  • Нет.одинчастьSensorСвязанные означает разные доски Камера Выбора точно нетодин Такой,Эта часть драйвера предназначена для инициализации датчика.,Регистрация конфигурации и т. д.,Например, при запуске захвата изображения,Нужен реестр конфигурации,Уровень приложения будет использовать один ioctloодин пошаговый вызов драйвера.,Итак, эта часть связана с датчиком,Датчику необходимо предоставить соответствующий драйвер.
  • Раздел два, связанный с MIPI,Например, наши часто используемые SOC и Sensorсоединять используют интерфейс MIPI.,Поэтому необходимо реализовать драйвер для частей, связанных с MIPI.,Эта часть обычно предоставляется производителями SOC.
  • Часть третья обработка изображенийчип(нравитьсяISP)часть,Если наша платформа SOC имеет модуль ISP, то для части модуля ISP будет код драйвера.,Эту часть также предоставляют производители SOC.

Из конфигурации dts мы видим, что путь привязки драйвера — от датчика к MIPI, а затем от MIPI к интернет-провайдеру. Таким образом, данные, полученные датчиком, передаются интернет-провайдеру через MIPI, а затем обрабатываются интернет-провайдером. и затем передается на прикладной уровень обработки, вероятно, этим процессом является вся структура драйвера камеры.

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

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 и детали кода