4.9. Bus du capteur¶
Un capteur de caméra et le microcontrôleur avec lequel il dialogue échangent deux types de données différents sur deux bus différents.
4.9.1. Bus de contrôle¶
Chaque réglage du capteur réside dans un registre de la puce – format de pixel, taille de trame, temps d’exposition, gain, gains de balance des blancs, cibles des contrôles automatiques, et ainsi de suite. Le microcontrôleur lit et écrit ces registres via un bus I2C (certains capteurs utilisent SPI à la place). Deux fils (SCL et SDA) relient le périphérique I2C du microcontrôleur à l’interface I2C du capteur, et chaque configuration choisie par l’utilisateur est traduite par le pilote en une ou plusieurs écritures de registre sur ce bus.
Le bus de contrôle fonctionne à une vitesse modérée – 100 kHz ou 400 kHz généralement. Régler un registre prend des dizaines de microsecondes ; reconfigurer l’ensemble du capteur (une réinitialisation, une nouvelle taille de trame, un nouveau format de pixel) prend des dizaines à des centaines de millisecondes, principalement parce que la puce a besoin d’un instant pour amener le nouveau mode à un état propre après chaque écriture de registre. Rien de tout cela n’a à suivre le flux de pixels.
4.9.2. Bus de données de pixels¶
Les données de pixels quittent le capteur sur un bus distinct, plus large et beaucoup plus rapide. Deux familles dominent.
Le bus parallèle est le plus ancien des deux. Il achemine huit ou dix lignes de données pour les bits de pixel, plus une horloge de pixel (PCLK), un signal de validité de ligne (HSYNC) et un signal de validité de trame (VSYNC). À chaque front d’horloge, un octet de pixel apparaît sur les lignes de données ; HSYNC et VSYNC indiquent au récepteur où chaque ligne et chaque trame commencent et se terminent. Les bus parallèles sont simples, mais le débit est limité par la vitesse à laquelle la matrice de broches du microcontrôleur peut cadencer l’entrée des données – généralement une horloge de pixel de 50 à 100 MHz au maximum.
MIPI CSI-2 – le Mobile Industry Processor Interface Camera Serial Interface, version 2 – a largement remplacé le parallèle sur les nouveaux capteurs d’image. Il achemine les pixels sur une ou plusieurs paires de voies différentielles à des centaines de mégabits par seconde et par paire, avec un nombre de broches réduit, une bande passante bien plus élevée et moins de perturbations électromagnétiques. Le parallèle subsiste surtout sur les conceptions héritées et sur les composants plus petits et à plus faible débit, où sa simplicité reste avantageuse.
Le capteur et le microcontrôleur échangent des informations de contrôle sur un bus I2C bidirectionnel lent et des données de pixels sur un bus parallèle ou MIPI plus large, plus rapide et unidirectionnel.¶
Quelle que soit la famille utilisée par le capteur, le côté microcontrôleur dispose d’un périphérique à fonction fixe qui capte les pixels entrants et les écrit dans un tampon d’image en mémoire. Le code Python ne pilote jamais ce bus directement ; il se contente de lire le tampon d’image une fois que ce matériel a fini de le remplir.