Видеоанализ 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose