4.9. Шины датчика¶
Датчик камеры и MCU, с которым он взаимодействует, обмениваются двумя различными видами данных по двум различным шинам.
4.9.1. Управляющая шина¶
Каждая настройка датчика хранится в регистре микросхемы – формат пикселей, размер кадра, время экспозиции, усиление, коэффициенты усиления баланса белого, целевые значения автоматического управления и так далее. MCU читает и записывает эти регистры по шине I2C (некоторые датчики вместо этого используют SPI). Два провода (SCL и SDA) соединяют периферийное устройство I2C микроконтроллера с интерфейсом I2C датчика, и каждая выбранная пользователем конфигурация преобразуется драйвером в одну или несколько записей в регистры по этой шине.
Управляющая шина работает на невысокой скорости – обычно 100 кГц или 400 кГц. Установка одного регистра занимает десятки микросекунд; перенастройка всего датчика (сброс, новый размер кадра, новый формат пикселей) занимает от десятков до сотен миллисекунд, в основном потому, что микросхеме нужно немного времени, чтобы привести новый режим в стабильное состояние после каждой записи в регистр. Ничему из этого не требуется поспевать за потоком пикселей.
4.9.2. Шина пиксельных данных¶
Пиксельные данные покидают датчик по отдельной, более широкой и гораздо более быстрой шине. Доминируют два семейства.
Параллельная шина – более старое из двух решений. Она содержит восемь или десять линий данных для битов пикселей, плюс тактовый сигнал пикселей (PCLK), сигнал достоверности строки (HSYNC) и сигнал достоверности кадра (VSYNC). На каждом фронте такта на линиях данных появляется один байт пикселя; HSYNC и VSYNC сообщают приёмнику, где начинается и заканчивается каждая строка и каждый кадр. Параллельные шины просты, но пропускная способность ограничена тем, насколько быстро матрица выводов MCU может тактировать ввод данных – обычно это тактовая частота пикселей от 50 до 100 МГц на верхней границе.
MIPI CSI-2 – Mobile Industry Processor Interface Camera Serial Interface, версия 2 – в значительной степени заменил параллельную шину в новых датчиках изображения. Он передаёт пиксели по одной или нескольким парам дифференциальных линий со скоростью в сотни мегабит в секунду на пару, при меньшем числе выводов, гораздо более высокой пропускной способности и более низком уровне электромагнитных помех. Параллельная шина сохраняется в основном в устаревших проектах и в меньших, низкоскоростных компонентах, где её простота всё ещё оправдана.
Датчик и MCU обмениваются управляющими сигналами по медленной двунаправленной шине I2C, а пиксельными данными – по более широкой, более быстрой, однонаправленной параллельной или MIPI шине.¶
Какое бы семейство ни использовал датчик, на стороне MCU имеется периферийное устройство с фиксированной функцией, которое перехватывает входящие пиксели и записывает их в буфер кадра в памяти. Код на Python никогда не управляет этой шиной напрямую; он лишь читает буфер кадра после того, как это оборудование закончило его заполнять.