4.9. 센서 버스

카메라 센서와 그와 통신하는 MCU는 서로 다른 두 종류의 데이터를 서로 다른 두 개의 버스로 주고받습니다.

4.9.1. 제어 버스

모든 센서 설정은 칩 내부의 레지스터에 저장됩니다 – 픽셀 포맷, 프레임 크기, 노출 시간, 게인, 화이트 밸런스 게인, 자동 제어 타깃 등이 그렇습니다. MCU는 이러한 레지스터를 I2C 버스를 통해 읽고 씁니다(일부 센서는 대신 SPI를 사용합니다). 두 개의 신호선(SCL과 SDA)이 MCU의 I2C 주변장치를 센서의 I2C 인터페이스에 연결하며, 사용자가 선택하는 모든 구성은 드라이버에 의해 이 버스에서 하나 이상의 레지스터 쓰기로 변환됩니다.

제어 버스는 비교적 느린 속도로 동작합니다 – 일반적으로 100 kHz 또는 400 kHz입니다. 레지스터 하나를 설정하는 데는 수십 마이크로초가 걸리고, 센서 전체를 재구성하는 작업(리셋, 새 프레임 크기, 새 픽셀 포맷)에는 수십에서 수백 밀리초가 걸리는데, 이는 주로 각 레지스터 쓰기 이후 칩이 새 모드를 깨끗한 상태로 안정화하는 데 잠깐의 시간이 필요하기 때문입니다. 이 중 어느 것도 픽셀 스트림의 속도를 따라잡을 필요는 없습니다.

4.9.2. 픽셀 데이터 버스

픽셀 데이터는 별도의, 더 넓고 훨씬 빠른 버스를 통해 센서를 떠납니다. 두 계열이 주류를 이룹니다.

병렬(Parallel) 방식은 둘 중 더 오래된 것입니다. 픽셀 비트를 위한 8개 또는 10개의 데이터 신호선과, 픽셀 클럭(PCLK), 라인 유효 신호(HSYNC), 프레임 유효 신호(VSYNC)를 함께 전달합니다. 각 클럭 에지마다 하나의 픽셀 바이트가 데이터 신호선에 나타나며, HSYNC와 VSYNC는 수신 측에 각 행과 각 프레임이 어디서 시작하고 끝나는지를 알려줍니다. 병렬 버스는 단순하지만, 처리량은 MCU의 핀 매트릭스가 데이터를 얼마나 빠르게 클럭킹할 수 있는지에 의해 제한됩니다 – 일반적으로 최고 수준에서 50~100 MHz 정도의 픽셀 클럭입니다.

MIPI CSI-2 – Mobile Industry Processor Interface Camera Serial Interface 버전 2 – 는 새로운 이미지 센서에서 병렬 방식을 대부분 대체했습니다. 픽셀을 하나 이상의 차동 레인 쌍을 통해 쌍당 초당 수백 메가비트의 속도로 전달하며, 더 적은 핀 수, 훨씬 높은 대역폭, 더 낮은 EMI를 제공합니다. 병렬 방식은 주로 레거시 설계나, 단순함이 여전히 이점이 되는 더 작고 낮은 속도의 부품에서 남아 있습니다.

왼쪽에 센서 블록, 오른쪽에 MCU 블록이 표시된 다이어그램. 두 블록 사이의 양방향 화살표에는 "I2C (SCL, SDA)"라는 레이블이 붙어 있습니다. 센서에서 MCU로 향하는 더 두꺼운 화살표에는 "parallel or MIPI"라는 레이블이 붙어 있습니다.

센서와 MCU는 느린 양방향 I2C 버스로 제어 정보를 주고받고, 더 넓고 빠른 단방향 병렬 또는 MIPI 버스로 픽셀 데이터를 주고받습니다.

센서가 어떤 계열을 사용하든, MCU 측에는 들어오는 픽셀을 받아서 메모리의 프레임 버퍼에 기록하는 고정 기능 주변장치가 있습니다. Python 코드는 이 버스를 직접 구동하지 않습니다. 단지 하드웨어가 프레임 버퍼를 다 채운 뒤에 그것을 읽기만 합니다.