4.9. Шини датчика

Датчик камери та мікроконтролер, з яким він взаємодіє, обмінюються двома різними видами даних через дві окремі шини.

4.9.1. Шина керування

Кожне налаштування датчика зберігається в регістрі на мікросхемі – формат пікселів, розмір кадру, час витримки, підсилення, коефіцієнти балансу білого, цілі значення автоматичного керування тощо. Мікроконтролер зчитує та записує ці регістри через шину I2C (деякі датчики використовують SPI). Два дроти (SCL і SDA) з’єднують периферійний пристрій I2C мікроконтролера з інтерфейсом I2C датчика, і кожне налаштування, вибране користувачем, переводиться драйвером в один або кілька записів до регістрів на цій шині.

Шина керування працює на відносно невисокій швидкості – зазвичай 100 кГц або 400 кГц. Запис одного регістра займає десятки мікросекунд; перенастроювання всього датчика (скидання, новий розмір кадру, новий формат пікселів) займає від десятків до сотень мілісекунд, здебільшого тому, що мікросхемі потрібен момент, щоб привести новий режим у стабільний стан після кожного запису до регістра. Нічого з цього не потребує відповідності швидкості потоку пікселів.

4.9.2. Шина даних пікселів

Дані пікселів виходять з датчика по окремій, ширшій та значно швидшій шині. Домінують два сімейства.

Паралельна – старіша з двох. Вона несе вісім або десять ліній даних для бітів пікселів, а також тактовий сигнал пікселів (PCLK), сигнал дійсності рядка (HSYNC) і сигнал дійсності кадру (VSYNC). На кожному перепаді тактового сигналу на лініях даних з’являється один байт пікселя; HSYNC і VSYNC повідомляють приймачу, де починається і закінчується кожен рядок і кожен кадр. Паралельні шини прості, але пропускна здатність обмежена тим, наскільки швидко матриця виводів мікроконтролера може приймати дані – зазвичай тактова частота пікселів не перевищує 50–100 МГц.

MIPI CSI-2 – Mobile Industry Processor Interface Camera Serial Interface версії 2 – здебільшого витіснив паралельний інтерфейс на нових датчиках зображень. Він передає пікселі через одну або кілька диференційних пар ліній зі швидкістю сотні мегабіт на секунду на пару, з меншою кількістю виводів, значно вищою пропускною здатністю та нижчим рівнем електромагнітних завад. Паралельний інтерфейс залишається переважно у застарілих конструкціях і в менших компонентах з нижчою швидкістю передачі, де його простота все ще виправдана.

A diagram showing a sensor block on the left and an MCU block on the right. A bidirectional arrow between them is labelled "I2C (SCL, SDA)". A thicker arrow pointing from the sensor to the MCU is labelled "parallel or MIPI".

Датчик і мікроконтролер обмінюються керуючими сигналами через повільну двонаправлену шину I2C, а даними пікселів – через ширшу, швидшу, односторонню паралельну шину або MIPI.

Незалежно від сімейства, що використовує датчик, на стороні мікроконтролера є спеціалізований периферійний пристрій, який перехоплює вхідні пікселі та записує їх у кадровий буфер у пам’яті. Код Python ніколи не керує цією шиною безпосередньо; він лише зчитує кадровий буфер після того, як апаратне забезпечення завершило його заповнення.