4.9. Sensorbussen

Een camerasensor en de MCU waarmee hij communiceert wisselen twee verschillende soorten data uit op twee verschillende bussen.

4.9.1. Besturingsbus

Elke sensorinstelling staat in een register op de chip – pixelformaat, framegrootte, belichtingstijd, versterking, witbalansversterkingen, autobesturingsdoelen, enzovoort. De MCU leest en schrijft die registers via een I2C-bus (sommige sensoren gebruiken in plaats daarvan SPI). Twee draden (SCL en SDA) verbinden het I2C-randapparaat van de MCU met de I2C-interface van de sensor, en elke configuratie die de gebruiker kiest wordt door de driver vertaald naar een of meer registerschrijfacties op deze bus.

De besturingsbus draait op een rustige snelheid – meestal 100 kHz of 400 kHz. Het instellen van een register duurt tientallen microseconden; het opnieuw configureren van de hele sensor (een reset, een nieuwe framegrootte, een nieuw pixelformaat) duurt tientallen tot honderden milliseconden, vooral omdat de chip even nodig heeft om de nieuwe modus na elke registerschrijfactie in een schone toestand te brengen. Niets daarvan hoeft de pixelstroom bij te houden.

4.9.2. Pixeldatabus

De pixeldata verlaat de sensor via een aparte, bredere en veel snellere bus. Twee families domineren.

Parallel is de oudste van de twee. Hij bevat acht of tien datalijnen voor de pixelbits, plus een pixelklok (PCLK), een line-valid-signaal (HSYNC) en een frame-valid-signaal (VSYNC). Bij elke klokflank verschijnt er een pixelbyte op de datalijnen; HSYNC en VSYNC vertellen de ontvanger waar elke rij en elk frame begint en eindigt. Parallelle bussen zijn eenvoudig, maar de doorvoer wordt beperkt door hoe snel de pinmatrix van de MCU data kan inklokken – meestal een pixelklok van 50 tot 100 MHz aan de bovenkant.

MIPI CSI-2 – de Mobile Industry Processor Interface Camera Serial Interface, versie 2 – heeft parallel grotendeels vervangen op nieuwe beeldsensoren. Hij draagt de pixels over op een of meer differentiële lanepaaren met honderden megabits per seconde per paar, met een lager aantal pinnen, veel hogere bandbreedte en lagere EMI. Parallel blijft vooral bestaan op oudere ontwerpen en op kleinere, langzamere onderdelen waar de eenvoud nog loont.

Een diagram met een sensorblok aan de linkerkant en een MCU-blok aan de rechterkant. Een bidirectionele pijl ertussen is gelabeld "I2C (SCL, SDA)". Een dikkere pijl die van de sensor naar de MCU wijst is gelabeld "parallel of MIPI".

De sensor en de MCU wisselen besturing uit via een trage bidirectionele I2C-bus en pixeldata via een bredere, snellere, eenrichtings parallelle of MIPI-bus.

Welke familie de sensor ook gebruikt, aan de MCU-kant zit een randapparaat met vaste functie dat de binnenkomende pixels opvangt en in een framebuffer in het geheugen schrijft. De Python-code stuurt deze bus nooit rechtstreeks aan; hij leest alleen de framebuffer uit zodra die hardware klaar is met het vullen ervan.