Introduction
Ce document technique présente la configuration des caméras sur les plateformes Rockchip utilisant le RK3588. Environnement de référence :
- Carte : ArmSoM-W3
- Noyau Linux : 5.10.160
- Système : Debian 11
Concepts clés :
- CSI : Interface série hôte-caméra
- DSI : Interface série hôte-écran
- ISP : Processeur de traitement du signal image
- VICAP : Unité de capture vidéo
- MIPI-DPHY : Contrôleur physique MIPI
Fondements du MIPI-CSI
MIPI-CSI2 est un protocole dédié aux interfaces caméra, caractérisé par :
- Haute vitesse et faible consommation
- Support des standards D-PHY et C-PHY
- D-PHY v1.2 et v2.0 supportés sur RK3588
Architecture matérielle
Le RK3588 intègre :
- 2 contrôleurs DCPHY
- 2 contrôleurs DPHY
- 1 interface DVP
- 6 hôtes CSI
- 1 contrôleur VICAP
- 2 processeurs ISP
Capacités maxmiales :
- 4 voies : 10 Gbps (bende passante)
- 2 voies : 5 Gbps
Implémentation MIPI-CSI
Modes DPHY
- Mode complet : 4 voies maximum via csi2_dphy0
- Mode fractionné : 2x2 voies via csi2_dphy1 et csi2_dphy2
Support multi-capteurs
Jusqu'à 7 sources simultanées : 6 flux MIPI + 1 DVP
Configuraton logicielle
Structure des pilotes
drivers/
├── phy/rockchip/ # Pilotes PHY
│ ├── phy-mipi-rx.c
│ └── phy-csi2-dphy.c
├── media/
│ ├── platform/cif # Pilote CIF
│ ├── platform/isp # Pilote ISP
│ └── i2c/ # Pilotes capteurs
Portage de capteur
Étapes clés :
- Séquence d'alimentation
- Configuration des registres
- Implémentation V4L2
- Initialisation Media Controller
static int __sensor_power_on(struct device *dev)
{
// Logique d'alimentation
}
static int sensor_check_id(struct i2c_client *client)
{
// Vérification CID
}
Configuration DTS
Exemple pour capteur IMX415 :
&i2c3 {
imx415: camera@1a {
compatible = "sony,imx415";
reg = <0x1a>;
clocks = <&cru CLK_CAM_MCLK>;
pwdn-gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
port {
endpoint {
remote-endpoint = <&mipi_input>;
data-lanes = <1 2 3 4>;
};
};
};
};
&csi_phy0 {
ports {
port@0 {
mipi_input: endpoint {
remote-endpoint = <&imx415_endpoint>;
};
};
};
};
Configuration multi-caméras
Exemple pour 4 capteurs en mode fractionné :
&csi_phy1 {
status = "okay";
ports {
port@0 {
cam2_input: endpoint {
remote-endpoint = <&sensor2_out>;
data-lanes = <1 2>;
};
};
};
};
&i2c5 {
sensor2: cam_sensor@1a {
port {
sensor2_out: endpoint {
remote-endpoint = <&cam2_input>;
};
};
};
};