Cet article présente l'interface caméra MIPI CSI-2 et aborde son architecture système, la transmission D-PHY, les mécanismes de paquets, les formats d'image et l'estimation de la bande passante, ainsi que l'intégration et le diagnostic dans l'environnement Linux media-controller. Il s'adresse aux projets d'intégration matérielle et logicielle mettant en œuvre des SoC ARM, des capteurs d'image, des ISP et des pipelines vidéo V4L2.

Architecture du système MIPI CSI
MIPI CSI-2 (Camera Serial Interface 2) est un protocole série haut débit utilisé pour transmettre les données d'image d'un capteur vers un SoC, un ISP ou un FPGA. CSI-2 définit les formats de paquets, les Data Types, les Virtual Channels et les mécanismes de protection contre les erreurs, tandis que D-PHY ou C-PHY assurent la transmission physique des signaux.

| Couche |
Fonction principale |
Implémentation Linux / SoC typique |
| Plan de contrôle |
Mode, exposition, gain et contrôle du streaming |
Pilote du capteur et I²C/I³C |
| Couche protocole CSI-2 |
Mise en paquets, VC, DT, ECC et CRC |
Contrôleur CSI-2 TX/RX |
| Couche PHY |
États LP/HS, horloge et signalisation différentielle |
D-PHY/C-PHY et pilote PHY |
| Pipeline d'image |
Décodage, traitement, DMA et acquisition |
ISP, DMA et nœud V4L2 |
Transmission et timing D-PHY
Lorsqu'elle est inactive, une Data Lane D-PHY reste dans l'état LP Stop State, puis passe en mode HS en suivant la séquence des états LP avant de transmettre les paquets CSI-2. L'accès aux registres du capteur et le contrôle du streaming sont généralement assurés par un bus I²C/I³C distinct des états LP de la Data Lane D-PHY.

| État / Phase |
Fonction |
Points à vérifier lors de l'intégration |
| LP-11 Stop State |
État inactif et état de référence pour le fonctionnement LP |
Vérifier l'état de la lane et la prise en charge par le PHY TX/RX |
| LP-01, LP-00 |
Partie de la séquence d'entrée/sortie du mode HS |
Ne pas interpréter ces états comme des données de contrôle I²C |
| HS-Prepare, HS-Zero |
Préparation et stabilisation avant la transmission à haut débit |
Influe sur la détection RX et le réglage de HS-Settle |
| SoT |
Indique le début de la transmission des paquets à haut débit |
Les erreurs SoT peuvent indiquer un problème de timing, de lane ou de configuration |
| HS data transmission |
Transmet le flux d'octets des paquets CSI-2 |
Vérifier la link frequency, le nombre de lanes et l'intégrité du signal |
- En clocked mode, la Clock Lane permet l'échantillonnage côté récepteur pendant la transmission HS. Le fonctionnement en continuous clock ou non-continuous clock doit être vérifié en fonction du capteur d'image, du PHY du SoC et de la configuration du pilote.
- HS-Settle doit être réglé en fonction de la link frequency réelle, de la documentation du récepteur SoC et des compteurs d'erreurs ; une valeur plus élevée n'est pas nécessairement préférable.
Paquets CSI-2 et synchronisation
CSI-2 utilise les Short Packets pour transmettre les événements du protocole ou les informations de synchronisation, tandis que les Long Packets transportent les données RAW, YUV, RGB ou les données embedded. Un Long Packet se compose d'un header de 4 octets, d'un payload et d'un CRC footer de 2 octets.

| Champ |
Fonction |
Points à vérifier |
| Virtual Channel (VC) |
Distingue les flux de données logiques |
Le Virtual Channel du capteur et celui du RX doivent être compatibles |
| Data Type (DT) |
Identifie le format des pixels ou le type de paquet |
Doit correspondre au mode de sortie du capteur et aux capacités du RX |
| Word Count (WC) |
Indique en octets la longueur du payload du Long Packet |
Devrait correspondre à la largeur de ligne et au pixel packing |
| ECC |
Protège le header du paquet |
Vérifier la synchronisation, la lane, la configuration et le décodage RX |
| CRC |
Protège le payload du Long Packet |
Vérifier le PHY, le data rate, le lane mapping et l'implémentation TX/RX |
Frame Start (FS) et Frame End (FE) assurent la synchronisation au niveau de la frame. Line Start (LS) et Line End (LE) assurent, de manière optionnelle, la synchronisation au niveau de la ligne. La transmission effective de LS et LE doit être vérifiée dans la documentation du capteur d'image, à partir des traces du récepteur CSI ou des compteurs du pilote.
Formats d'image et bande passante
Les Data Types CSI-2, les codes media-bus V4L2, les formats mémoire de capture V4L2 et la négociation des formats au niveau de l'ISP doivent représenter des données d'image compatibles. Ils appartiennent toutefois à des couches d'abstraction différentes ; les noms et les emplacements de leurs paramètres ne doivent donc pas nécessairement correspondre un à un. Pour les données RAW, il faut vérifier à la fois la profondeur de bits et l'ordre Bayer ; pour les données YUV, il faut vérifier l'ordre des octets.
Le payload minimal correspondant aux pixels actifs peut être estimé comme suit :
Active-pixel payload = Width × Height × FPS × Bits per pixel
Ce calcul représente uniquement le payload minimal requis pour les données des pixels actifs. Le débit CSI-2 et le lane rate D-PHY réels doivent également tenir compte des headers de paquets, du CRC, des paquets de synchronisation, de la stratégie de transmission pendant le blanking, du nombre de Data Lanes, du clock mode, des paramètres link-frequency disponibles pour le capteur et des limitations du récepteur CSI du SoC.
Per-lane rate ≳ Total CSI-2 throughput / Number of Data Lanes
Intégration Linux et Bring-up
Le Device Tree décrit généralement les graph endpoints, les data-lanes, les clock-lanes et les connexions remote-endpoint. Dans la plupart des architectures media-controller, les formats d'image sont négociés à l'exécution via les formats de pad des sub-devices, les media links et la routing negotiation. Les bindings et les formats effectivement pris en charge dépendent du pilote du noyau pour le SoC concerné.
# Vérifier les entity, pad et link
media-ctl -p -d /dev/media0
# Exemple : configurer le pad format du capteur en amont
media-ctl -d /dev/media0 --set-v4l2 '"sensor 1-001a":0 [fmt:SRGGB10_1X10/1920x1080]'
# Exemple : activer le link
media-ctl -d /dev/media0 --links '"sensor 1-001a":0 -> "csi2rx":0 [1]'
# Configurer le memory format du capture node et démarrer le streaming
v4l2-ctl -d /dev/videoX \
--set-fmt-video=width=1920,height=1080,pixelformat=RG10 \
--stream-mmap=4 --stream-count=100
dmesg -w
Les noms d'entity, les index de pad, les media-bus codes, les valeurs FourCC et les video nodes utilisés dans cet exemple doivent être adaptés au media graph réel et ne sont pas fixes d'une plateforme à l'autre.

Compatibilité et analyse des erreurs
| Catégorie |
Points à vérifier |
Symptômes typiques |
| PHY |
Nombre de lanes, mapping, link frequency, clock mode et HS-Settle |
Erreurs SoT, absence de données ou pertes de frames intermittentes |
| Protocole |
VC, DT, comportement des paquets et ECC/CRC |
Erreurs de header, erreurs CRC ou problèmes de synchronisation des frames |
| Format |
Profondeur de bits, ordre Bayer, ordre YUV et packing |
Couleurs incorrectes, frames vertes ou images corrompues |
| Pipeline |
DT graph, media links, pad formats, ISP et DMA |
Échec de STREAMON ou timeout du buffer |
- Si la communication I²C fonctionne mais qu'aucune image n'est reçue, vérifier power/reset/MCLK, l'état stream-on du capteur, les data-lanes, le lane mapping, la link frequency, le media graph et l'état du CSI RX.
- Si une activité des frames est détectée mais que des erreurs ECC/CRC se produisent, vérifier les compteurs d'erreurs RX, le lane mapping, le link rate, HS-Settle, l'intégrité du signal au niveau de la carte et la configuration TX/RX.
- Si les frames peuvent être capturées mais que les couleurs sont incorrectes, vérifier la profondeur de bits RAW, l'ordre Bayer, le media-bus code, le memory FourCC et l'ISP pipeline.
Questions fréquentes
1. CSI-2 et D-PHY sont-ils identiques ?
Non. CSI-2 est un protocole par paquets destiné aux données d'image, tandis que D-PHY est une interface de transmission couramment utilisée au niveau de la couche physique.
2. Pourquoi aucune image n'est-elle reçue alors que la communication I²C fonctionne correctement ?
Une communication I²C fonctionnelle confirme uniquement le canal de contrôle. Le chemin des données d'image peut toujours être affecté par des problèmes liés à MCLK, aux lanes, au timing PHY, au protocole, au media graph, à l'ISP ou au DMA.
3. Quelle est la différence entre ECC et CRC ?
ECC protège principalement le Packet Header et permet de corriger les erreurs sur un bit et de détecter les erreurs sur deux bits. CRC vérifie l'intégrité du payload du Long Packet. Si les erreurs persistent, il est généralement nécessaire de vérifier à la fois la configuration du protocole et l'intégrité du signal au niveau de la couche physique.
4. Pourquoi un même capteur d'image peut-il se comporter différemment selon la carte utilisée ?
L'impédance du PCB, la longueur des pistes, le FPC, les chemins de retour à la masse et les conditions EMI peuvent tous affecter l'intégrité du signal D-PHY et la marge de timing.
Références
- MIPI Alliance, "Camera Serial Interface 2 (MIPI CSI-2)", mipi.org/specifications/csi-2
- MIPI Alliance, "MIPI D-PHY", mipi.org/specifications/d-phy