SCCB 接口:摄像头控制的串行通信标准(下)
扫描二维码
随时随地手机看文章
一、SCCB 与 I2C 的异同
SCCB 接口源于 I2C 协议,两者在物理层和协议层有诸多相似之处,但也存在关键差异:
1. 相同点
均采用两根信号线(时钟线和数据线)实现通信
都支持多从机架构,通过地址区分不同设备
采用开漏输出和上拉电阻的电气设计
数据传输以 8 位为单位,伴随应答机制
这些共性使得熟悉 I2C 的开发者能够快速掌握 SCCB 的使用方法,甚至可以通过软件配置使 I2C 控制器兼容 SCCB 通信。
2. 兼容性
虽然存在差异,SCCB 与 I2C 仍具有一定兼容性:
多数 SCCB 设备可接受 I2C 控制器发出的标准命令
通过调整 I2C 的时序参数(降低速率、放宽建立 / 保持时间),可实现与 SCCB 设备的通信
反之,SCCB 控制器通常无法兼容高速 I2C 设备
在实际应用中,很多微处理器通过软件模拟 SCCB 时序,而非使用专用硬件控制器,这种灵活性进一步增强了兼容性。
二、SCCB 接口的配置与实现
1. 硬件实现方式
SCCB 接口的实现有两种常见方式:
软件模拟
通过通用 IO 口(GPIO)模拟 SCCB 时序
优点:无需专用硬件支持,适用于任何微处理器
缺点:占用 CPU 时间,速率较低
实现要点:精确控制 GPIO 的高低电平切换时间,满足 t_HIGH 和 t_LOW 要求
软件模拟的关键代码片段(以写操作为例):
// 延时函数,确保至少5us低电平
void sccb_delay() {
for(int i = 0; i < 100; i++) __NOP();
}
// 发送起始条件
void sccb_start() {
SIO_D_LOW();
sccb_delay();
SIO_C_LOW();
}
// 发送停止条件
void sccb_stop() {
SIO_C_HIGH();
sccb_delay();
SIO_D_HIGH();
}
// 发送一个字节并返回应答状态
bool sccb_write_byte(uint8_t data) {
bool ack;
for(int i = 7; i >= 0; i--) {
// 设置数据位
if(data & (1 << i)) SIO_D_HIGH();
else SIO_D_LOW();
sccb_delay();
// 时钟脉冲
SIO_C_HIGH();
sccb_delay();
SIO_C_LOW();
}
// 读取应答位
SIO_D_INPUT(); // 切换为输入
sccb_delay();
SIO_C_HIGH();
ack = (SIO_D_READ() == 0); // 低电平表示应答
sccb_delay();
SIO_C_LOW();
SIO_D_OUTPUT(); // 切换回输出
return ack;
}
硬件控制器
部分微处理器(如 STM32、NXP Kinetis)的 I2C 控制器可通过配置时序兼容 SCCB
优点:不占用 CPU 时间,通信更可靠
缺点:需要控制器支持,灵活性较低
硬件实现时需将 I2C 的时钟频率降低到 100kbps 以下,并禁用快速模式和 PEC 校验功能。
2. 地址分配
SCCB 设备的 7 位地址由厂商预设,通常可通过硬件引脚调整部分位,以避免地址冲突:
OmniVision 摄像头通常使用 0x42(写)和 0x43(读)作为默认地址
GalaxyCore 传感器常用 0x20(写)和 0x21(读)
部分设备通过 AD0 引脚可切换地址的最低位
在多设备系统中,需确保所有 SCCB 设备的地址唯一,必要时通过硬件引脚配置不同地址。
三、SCCB 接口的典型应用
1. 摄像头配置
SCCB 最主要的应用是配置 CMOS 图像传感器的工作参数,典型配置项包括:
分辨率设置:通过寄存器配置输出图像的宽度和高度
帧率控制:调整传感器的积分时间和输出速率
曝光参数:设置自动曝光模式、曝光时间和增益
白平衡:配置红 / 蓝增益,调整图像色温
图像质量:设置降噪、锐化等图像增强功能
电源管理:控制传感器的工作模式和功耗
例如,通过 SCCB 配置 OmniVision OV7670 摄像头分辨率的流程:
// 初始化SCCB通信
sccb_init();
// 写入寄存器:设置格式为QVGA
sccb_write(OV7670_ADDR, 0x12, 0x04); // 0x12寄存器控制图像格式
// 设置水平尺寸
sccb_write(OV7670_ADDR, 0x32, 0x00); // HOUT低8位
sccb_write(OV7670_ADDR, 0x33, 0x1E); // HOUT高8位(0x1E0=480)
// 设置垂直尺寸
sccb_write(OV7670_ADDR, 0x34, 0x00); // VOUT低8位
sccb_write(OV7670_ADDR, 0x35, 0x14); // VOUT高8位(0x140=320)
2. 状态读取
除了配置参数,SCCB 还可用于读取传感器的状态信息:
读取设备 ID 寄存器,确认传感器型号
获取温度传感器数据,进行温度补偿
读取帧同步信号状态,同步主机与传感器
获取错误状态寄存器,诊断通信问题
3. 系统集成
在实际系统中,SCCB 通常与图像数据传输接口配合工作:
SCCB 负责传输控制信号(低速)
MIPI-CSI 或并行接口负责传输图像数据(高速)
这种分离设计使控制通道和数据通道各自优化,兼顾了可靠性和传输效率。
四、SCCB 接口的优缺点与发展趋势
1. 优点
硬件简单:仅需两根信号线,无需专用控制器
实现容易:时序要求宽松,软件模拟简单
可靠性高:开漏输出设计支持多设备共存,应答机制确保数据正确传输
低功耗:空闲时总线处于高电平,几乎不消耗电流
2. 缺点
速率较低:最高速率通常限制在 400kbps,不适合大量数据传输
功能单一:仅支持基本的寄存器读写,缺乏复杂的错误处理和流控制
兼容性有限:主要用于图像传感器,其他外设支持较少
无仲裁机制:多主机场景下可能出现总线冲突
3. 发展趋势
随着图像传感器数据速率的提升,SCCB 作为控制接口仍将长期存在,但也在向以下方向发展:
与高速接口融合:在 MIPI-CSI-2 等高速接口中嵌入控制通道,减少信号线数量
增强功能:部分厂商的新型传感器在 SCCB 基础上增加了中断信号和唤醒功能
向后兼容:新传感器仍保留 SCCB 接口,确保与传统系统的兼容性
向 I2C 靠拢:越来越多的传感器同时支持 SCCB 和标准 I2C 模式,提高灵活性