Questo articolo presenta l'interfaccia per fotocamere MIPI CSI-2, illustrandone l'architettura di sistema, la trasmissione D-PHY, i meccanismi dei pacchetti, i formati immagine e il calcolo della larghezza di banda, oltre all'integrazione e alla diagnostica nell'ambiente Linux media-controller. I contenuti sono rivolti all'integrazione hardware e software di sistemi basati su SoC ARM, sensori di immagine, ISP e pipeline video V4L2.

Architettura del sistema MIPI CSI
MIPI CSI-2 (Camera Serial Interface 2) è un protocollo seriale ad alta velocità utilizzato per trasferire i dati di immagine da un sensore a un SoC, ISP o FPGA. CSI-2 definisce i formati dei pacchetti, i Data Type, i Virtual Channel e i meccanismi di protezione dagli errori, mentre D-PHY o C-PHY gestiscono la trasmissione fisica dei segnali.

| Livello |
Funzione principale |
Implementazione tipica Linux / SoC |
| Piano di controllo |
Modalità, esposizione, guadagno e controllo dello streaming |
Driver del sensore e I²C/I³C |
| Livello protocollo CSI-2 |
Pacchettizzazione, VC, DT, ECC e CRC |
Controller CSI-2 TX/RX |
| Livello PHY |
Stati LP/HS, clock e segnalazione differenziale |
D-PHY/C-PHY e driver PHY |
| Pipeline di elaborazione delle immagini |
Decodifica, elaborazione, DMA e acquisizione |
ISP, DMA e nodo V4L2 |
Trasmissione e timing D-PHY
Quando è inattiva, una Data Lane D-PHY rimane nello stato LP Stop State e passa alla modalità HS attraverso la sequenza degli stati LP prima di trasmettere i pacchetti CSI-2. L'accesso ai registri del sensore e il controllo dello streaming vengono normalmente gestiti tramite un bus I²C/I³C separato, distinto dagli stati LP della Data Lane D-PHY.

| Stato / Fase |
Funzione |
Aspetti da verificare durante l'integrazione |
| LP-11 Stop State |
Stato di inattività e condizione di base per il funzionamento LP |
Verificare lo stato della lane e il supporto del PHY TX/RX |
| LP-01, LP-00 |
Parte della sequenza di ingresso/uscita dalla modalità HS |
Non interpretare questi stati come dati di controllo I²C |
| HS-Prepare, HS-Zero |
Preparazione e stabilizzazione prima della trasmissione ad alta velocità |
Influisce sul rilevamento RX e sulla regolazione di HS-Settle |
| SoT |
Indica l'inizio della trasmissione dei pacchetti ad alta velocità |
Gli errori SoT possono indicare problemi di timing, lane o configurazione |
| HS data transmission |
Trasferisce il flusso di byte dei pacchetti CSI-2 |
Verificare link frequency, numero di lane e integrità del segnale |
- In clocked mode, la Clock Lane supporta il campionamento sul lato ricevitore durante la trasmissione HS. Il funzionamento continuous clock o non-continuous clock deve essere verificato in base al sensore di immagine, al PHY del SoC e alla configurazione del driver.
- HS-Settle deve essere regolato in base alla link frequency effettiva, alla documentazione del ricevitore SoC e ai contatori degli errori; un valore più elevato non è necessariamente migliore.
Pacchetti CSI-2 e sincronizzazione
CSI-2 utilizza gli Short Packet per trasmettere eventi di protocollo o informazioni di sincronizzazione, mentre i Long Packet trasportano dati RAW, YUV, RGB o dati embedded. Un Long Packet è composto da un header di 4 byte, un payload e un CRC footer di 2 byte.

| Campo |
Funzione |
Elementi da verificare |
| Virtual Channel (VC) |
Distingue i flussi di dati logici |
Il Virtual Channel del sensore e quello RX devono essere compatibili |
| Data Type (DT) |
Identifica il formato dei pixel o il tipo di pacchetto |
Deve corrispondere alla modalità di uscita del sensore e alle capacità RX |
| Word Count (WC) |
Specifica in byte la lunghezza del payload del Long Packet |
Dovrebbe essere coerente con la larghezza della linea e il pixel packing |
| ECC |
Protegge l'header del pacchetto |
Verificare sincronizzazione, lane, configurazione e decodifica RX |
| CRC |
Protegge il payload del Long Packet |
Verificare PHY, data rate, lane mapping e implementazione TX/RX |
Frame Start (FS) e Frame End (FE) forniscono la sincronizzazione a livello di frame. Line Start (LS) e Line End (LE) forniscono invece la sincronizzazione opzionale a livello di linea. L'effettiva trasmissione di LS e LE deve essere verificata nella documentazione del sensore di immagine, nelle tracce del ricevitore CSI o nei contatori del driver.
Formati immagine e larghezza di banda
I Data Type CSI-2, i media-bus code V4L2, i formati di memoria per l'acquisizione V4L2 e la negoziazione del formato ISP devono rappresentare dati immagine compatibili. Appartengono tuttavia a livelli di astrazione diversi, quindi i nomi e le posizioni delle relative configurazioni non devono necessariamente corrispondere uno a uno. Per i dati RAW è necessario verificare sia la bit depth sia il Bayer order; per i dati YUV, invece, va verificato il byte order.
Il payload minimo dei pixel attivi può essere stimato come segue:
Active-pixel payload = Width × Height × FPS × Bits per pixel
Questo calcolo rappresenta soltanto il payload minimo richiesto per i dati dei pixel attivi. Per determinare il throughput CSI-2 e il lane rate D-PHY effettivi, è necessario considerare anche i packet header, il CRC, i pacchetti di sincronizzazione, la modalità di trasmissione durante il blanking, il numero di Data Lanes, il clock mode, le impostazioni link-frequency disponibili per il sensore e i limiti del ricevitore CSI del SoC.
Per-lane rate ≳ Total CSI-2 throughput / Number of Data Lanes
Integrazione Linux e Bring-up
Il Device Tree descrive generalmente i graph endpoint, le data-lanes, le clock-lanes e le connessioni remote-endpoint. Nella maggior parte delle architetture media-controller, i formati immagine vengono negoziati a runtime tramite i formati dei pad dei sub-device, i media link e la routing negotiation. I binding effettivi e i formati supportati dipendono dal driver del kernel per il SoC utilizzato.
# Verificare entity, pad e link
media-ctl -p -d /dev/media0
# Esempio: configurare il pad format del sensore a monte
media-ctl -d /dev/media0 --set-v4l2 '"sensor 1-001a":0 [fmt:SRGGB10_1X10/1920x1080]'
# Esempio: abilitare il link
media-ctl -d /dev/media0 --links '"sensor 1-001a":0 -> "csi2rx":0 [1]'
# Configurare il memory format del capture node e avviare lo streaming
v4l2-ctl -d /dev/videoX \
--set-fmt-video=width=1920,height=1080,pixelformat=RG10 \
--stream-mmap=4 --stream-count=100
dmesg -w
I nomi delle entity, gli indici dei pad, i media-bus code, i valori FourCC e i video node riportati nell'esempio devono essere adattati al media graph effettivo e non sono definiti in modo univoco per tutte le piattaforme.

Compatibilità e analisi degli errori
| Area |
Elementi da verificare |
Sintomi tipici |
| PHY |
Numero di lane, mapping, link frequency, clock mode e HS-Settle |
Errori SoT, assenza di dati o perdita intermittente di frame |
| Protocollo |
VC, DT, comportamento dei pacchetti ed ECC/CRC |
Errori nell'header, errori CRC o problemi di sincronizzazione dei frame |
| Formato |
Bit depth, Bayer order, YUV order e packing |
Colori errati, frame verdi o immagini corrotte |
| Pipeline |
DT graph, media link, pad format, ISP e DMA |
Errore STREAMON o timeout del buffer |
- Se la comunicazione I²C funziona ma non viene ricevuta alcuna immagine, verificare power/reset/MCLK, lo stato stream-on del sensore, data-lanes, lane mapping, link frequency, media graph e lo stato CSI RX.
- Se viene rilevata attività dei frame ma si verificano errori ECC/CRC, controllare i contatori degli errori RX, lane mapping, link rate, HS-Settle, l'integrità del segnale a livello di scheda e la configurazione TX/RX.
- Se è possibile acquisire i frame ma i colori non sono corretti, verificare RAW bit depth, Bayer order, media-bus code, memory FourCC e ISP pipeline.
Domande frequenti
1. CSI-2 e D-PHY sono la stessa cosa?
No. CSI-2 è un protocollo a pacchetti per la trasmissione dei dati immagine, mentre D-PHY è un'interfaccia di trasmissione comunemente utilizzata a livello fisico.
2. Perché non viene ricevuta alcuna immagine anche se la comunicazione I²C funziona correttamente?
Il corretto funzionamento della comunicazione I²C conferma soltanto il funzionamento del canale di controllo. Il percorso dei dati immagine può comunque essere interessato da problemi relativi a MCLK, lane, timing PHY, protocollo, media graph, ISP o DMA.
3. Qual è la differenza tra ECC e CRC?
ECC protegge principalmente il Packet Header ed è in grado di correggere errori di un singolo bit e rilevare errori di due bit. CRC verifica l'integrità del payload del Long Packet. Se gli errori persistono, è generalmente necessario verificare sia la configurazione del protocollo sia l'integrità del segnale a livello fisico.
4. Perché lo stesso sensore di immagine può comportarsi diversamente su schede differenti?
L'impedenza del PCB, la lunghezza delle piste, l'FPC, i percorsi di ritorno a massa e le condizioni EMI possono influire sull'integrità del segnale D-PHY e sul margine di timing.
Riferimenti
- MIPI Alliance, "Camera Serial Interface 2 (MIPI CSI-2)", mipi.org/specifications/csi-2
- MIPI Alliance, "MIPI D-PHY", mipi.org/specifications/d-phy