4.9. 传感器总线¶
摄像头传感器与它通信的 MCU 通过两条不同的总线交换两种不同类型的数据。
4.9.1. 控制总线¶
每一项传感器设置都存放在芯片上的一个寄存器中——像素格式、帧大小、曝光时间、增益、白平衡增益、自动控制目标等等。MCU 通过 I2C 总线 读写这些寄存器(有些传感器改用 SPI)。两根线(SCL 和 SDA)将 MCU 的 I2C 外设连接到传感器的 I2C 接口,用户所做的每一项配置都会被驱动程序转换成在这条总线上对一个或多个寄存器的写操作。
控制总线的速度相对宽松——通常为 100 kHz 或 400 kHz。设置一个寄存器需要几十微秒;重新配置整个传感器(一次复位、一个新的帧大小、一个新的像素格式)则需要几十到几百毫秒,这主要是因为芯片在每次寄存器写入后需要片刻时间使新模式进入稳定状态。这一切都不必跟上像素流的节奏。
4.9.2. 像素数据总线¶
像素数据通过一条独立的、更宽、快得多的总线离开传感器。有两大类总线占据主导地位。
并行(Parallel) 是两者中较早出现的一种。它使用八条或十条数据线来传输像素位,外加一个像素时钟(PCLK)、一个行有效信号(HSYNC)和一个帧有效信号(VSYNC)。在每个时钟边沿,数据线上会出现一个像素字节;HSYNC 和 VSYNC 告诉接收方每一行和每一帧从哪里开始、到哪里结束。并行总线结构简单,但吞吐量受限于 MCU 引脚矩阵能以多快的速度将数据时钟进来——高端情况下通常为 50 到 100 MHz 的像素时钟。
MIPI CSI-2——即移动产业处理器接口摄像头串行接口第 2 版(Mobile Industry Processor Interface Camera Serial Interface, version 2)——已在新型图像传感器上基本取代了并行接口。它通过一对或多对差分通道传输像素,每对的速率达到每秒数百兆比特,引脚数更少、带宽高得多、EMI 也更低。并行接口主要存留于一些遗留设计以及较小、速率较低的器件上,因为在这些场合其简洁性仍然划算。
传感器和 MCU 通过一条速度较慢的双向 I2C 总线交换控制信息,通过一条更宽、更快、单向的并行或 MIPI 总线传输像素数据。¶
无论传感器使用哪一类总线,MCU 侧都有一个固定功能的外设负责捕获进来的像素并将它们写入内存中的帧缓冲区。Python 代码从不直接驱动这条总线;它只是在硬件填充完成后读取帧缓冲区。