4.9. Magistrale sensora

Sensor kamery i mikrokontroler, z którym się komunikuje, wymieniają dwa różne rodzaje danych na dwóch różnych magistralach.

4.9.1. Magistrala sterująca

Każde ustawienie sensora znajduje się w rejestrze na chipie – format piksela, rozmiar ramki, czas ekspozycji, wzmocnienie, wzmocnienia balansu bieli, cele auto-sterowania i tak dalej. Mikrokontroler odczytuje i zapisuje te rejestry przez magistralę I2C (niektóre sensory używają zamiast tego SPI). Dwa przewody (SCL i SDA) łączą urządzenie peryferyjne I2C mikrokontrolera z interfejsem I2C sensora, a każda konfiguracja wybrana przez użytkownika jest tłumaczona przez sterownik na jeden lub więcej zapisów do rejestru na tej magistrali.

Magistrala sterująca pracuje z umiarkowaną szybkością – zwykle 100 kHz lub 400 kHz. Ustawienie jednego rejestru zajmuje dziesiątki mikrosekund; ponowna konfiguracja całego sensora (reset, nowy rozmiar ramki, nowy format piksela) zajmuje od dziesiątek do setek milisekund, głównie dlatego, że chip potrzebuje chwili, aby po każdym zapisie do rejestru doprowadzić nowy tryb do czystego stanu. Nic z tego nie musi nadążać za strumieniem pikseli.

4.9.2. Magistrala danych pikseli

Dane pikseli opuszczają sensor osobną, szerszą i znacznie szybszą magistralą. Dominują dwie rodziny.

Parallel jest starszą z dwóch. Przenosi osiem lub dziesięć linii danych dla bitów piksela, a także zegar pikseli (PCLK), sygnał ważności linii (HSYNC) oraz sygnał ważności ramki (VSYNC). Na każdym zboczu zegara na liniach danych pojawia się jeden bajt piksela; HSYNC i VSYNC informują odbiornik, gdzie zaczyna się i kończy każdy wiersz oraz każda ramka. Magistrale parallel są proste, ale przepustowość jest ograniczona przez to, jak szybko macierz pinów mikrokontrolera może wczytywać dane – zwykle zegar pikseli od 50 do 100 MHz w górnym zakresie.

MIPI CSI-2 – Mobile Industry Processor Interface Camera Serial Interface, wersja 2 – w dużej mierze zastąpiła parallel w nowych sensorach obrazu. Przenosi piksele jedną lub kilkoma parami różnicowych linii z prędkością setek megabitów na sekundę na parę, przy mniejszej liczbie pinów, znacznie większej przepustowości i niższym EMI. Parallel utrzymuje się głównie w starszych projektach oraz w mniejszych, wolniejszych elementach, gdzie jego prostota wciąż się opłaca.

Schemat przedstawiający blok sensora po lewej stronie i blok mikrokontrolera po prawej. Dwukierunkowa strzałka między nimi jest opisana "I2C (SCL, SDA)". Grubsza strzałka skierowana od sensora do mikrokontrolera jest opisana "parallel lub MIPI".

Sensor i mikrokontroler wymieniają sterowanie na wolnej, dwukierunkowej magistrali I2C, a dane pikseli na szerszej, szybszej, jednokierunkowej magistrali parallel lub MIPI.

Niezależnie od tego, której rodziny używa sensor, po stronie mikrokontrolera znajduje się urządzenie peryferyjne o stałej funkcji, które przechwytuje napływające piksele i zapisuje je do bufora ramki w pamięci. Kod Python nigdy nie steruje tą magistralą bezpośrednio; odczytuje jedynie bufor ramki, gdy sprzęt zakończy jego wypełnianie.