4.9. Magistralele senzorului¶
Un senzor de cameră și MCU-ul cu care comunică schimbă două tipuri diferite de date pe două magistrale diferite.
4.9.1. Magistrala de control¶
Fiecare setare a senzorului se află într-un registru de pe cip – formatul pixelilor, dimensiunea cadrului, timpul de expunere, amplificarea (gain), amplificările balansului de alb, țintele controlului automat și așa mai departe. MCU-ul citește și scrie acele registre printr-o magistrală I2C (unii senzori folosesc SPI în schimb). Două fire (SCL și SDA) conectează perifericul I2C al MCU-ului la interfața I2C a senzorului, iar fiecare configurație aleasă de utilizator este transpusă de către driver în una sau mai multe scrieri de registre pe această magistrală.
Magistrala de control rulează la o viteză moderată – de obicei 100 kHz sau 400 kHz. Setarea unui registru durează zeci de microsecunde; reconfigurarea întregului senzor (o resetare, o nouă dimensiune de cadru, un nou format de pixeli) durează de la zeci la sute de milisecunde, în principal pentru că, după fiecare scriere de registru, cipul are nevoie de o clipă pentru a aduce noul mod într-o stare stabilă. Niciuna dintre aceste operații nu trebuie să țină pasul cu fluxul de pixeli.
4.9.2. Magistrala de date pentru pixeli¶
Datele pixelilor părăsesc senzorul pe o magistrală separată, mai lată și mult mai rapidă. Domină două familii.
Paralelă este cea mai veche dintre cele două. Aceasta transportă opt sau zece linii de date pentru biții pixelilor, plus un ceas de pixel (PCLK), un semnal de validare a liniei (HSYNC) și un semnal de validare a cadrului (VSYNC). La fiecare front de ceas, un octet de pixel apare pe liniile de date; HSYNC și VSYNC îi indică receptorului unde încep și se termină fiecare rând și fiecare cadru. Magistralele paralele sunt simple, dar debitul este limitat de cât de repede poate matricea de pini a MCU-ului să recepționeze datele – de obicei un ceas de pixel de 50 până la 100 MHz la limita superioară.
MIPI CSI-2 – Mobile Industry Processor Interface Camera Serial Interface, versiunea 2 – a înlocuit în mare măsură magistrala paralelă pe noii senzori de imagine. Aceasta transportă pixelii pe una sau mai multe perechi de linii diferențiale, la sute de megabiți pe secundă pe fiecare pereche, cu un număr mai mic de pini, lățime de bandă mult mai mare și EMI mai redus. Magistrala paralelă persistă în special pe proiectele mai vechi și pe componentele mai mici, cu rate mai scăzute, unde simplitatea sa încă merită.
Senzorul și MCU-ul schimbă date de control pe o magistrală I2C bidirecțională lentă și date de pixeli pe o magistrală paralelă sau MIPI mai lată, mai rapidă și unidirecțională.¶
Indiferent de familia folosită de senzor, partea MCU-ului are un periferic cu funcție fixă care captează pixelii primiți și îi scrie într-un framebuffer din memorie. Codul Python nu controlează niciodată direct această magistrală; el doar citește framebufferul după ce hardware-ul a terminat de umplut.