SCCB 接口:攝像頭控制的串行通信標(biāo)準(zhǔn)(下)
一、SCCB 與 I2C 的異同
SCCB 接口源于 I2C 協(xié)議,兩者在物理層和協(xié)議層有諸多相似之處,但也存在關(guān)鍵差異:
1. 相同點(diǎn)
均采用兩根信號(hào)線(xiàn)(時(shí)鐘線(xiàn)和數(shù)據(jù)線(xiàn))實(shí)現(xiàn)通信
都支持多從機(jī)架構(gòu),通過(guò)地址區(qū)分不同設(shè)備
采用開(kāi)漏輸出和上拉電阻的電氣設(shè)計(jì)
數(shù)據(jù)傳輸以 8 位為單位,伴隨應(yīng)答機(jī)制
這些共性使得熟悉 I2C 的開(kāi)發(fā)者能夠快速掌握 SCCB 的使用方法,甚至可以通過(guò)軟件配置使 I2C 控制器兼容 SCCB 通信。
2. 兼容性
雖然存在差異,SCCB 與 I2C 仍具有一定兼容性:
多數(shù) SCCB 設(shè)備可接受 I2C 控制器發(fā)出的標(biāo)準(zhǔn)命令
通過(guò)調(diào)整 I2C 的時(shí)序參數(shù)(降低速率、放寬建立 / 保持時(shí)間),可實(shí)現(xiàn)與 SCCB 設(shè)備的通信
反之,SCCB 控制器通常無(wú)法兼容高速 I2C 設(shè)備
在實(shí)際應(yīng)用中,很多微處理器通過(guò)軟件模擬 SCCB 時(shí)序,而非使用專(zhuān)用硬件控制器,這種靈活性進(jìn)一步增強(qiáng)了兼容性。
二、SCCB 接口的配置與實(shí)現(xiàn)
1. 硬件實(shí)現(xiàn)方式
SCCB 接口的實(shí)現(xiàn)有兩種常見(jiàn)方式:
軟件模擬
通過(guò)通用 IO 口(GPIO)模擬 SCCB 時(shí)序
優(yōu)點(diǎn):無(wú)需專(zhuān)用硬件支持,適用于任何微處理器
缺點(diǎn):占用 CPU 時(shí)間,速率較低
實(shí)現(xiàn)要點(diǎn):精確控制 GPIO 的高低電平切換時(shí)間,滿(mǎn)足 t_HIGH 和 t_LOW 要求
軟件模擬的關(guān)鍵代碼片段(以寫(xiě)操作為例):
// 延時(shí)函數(shù),確保至少5us低電平
void sccb_delay() {
for(int i = 0; i < 100; i++) __NOP();
}
// 發(fā)送起始條件
void sccb_start() {
SIO_D_LOW();
sccb_delay();
SIO_C_LOW();
}
// 發(fā)送停止條件
void sccb_stop() {
SIO_C_HIGH();
sccb_delay();
SIO_D_HIGH();
}
// 發(fā)送一個(gè)字節(jié)并返回應(yīng)答狀態(tài)
bool sccb_write_byte(uint8_t data) {
bool ack;
for(int i = 7; i >= 0; i--) {
// 設(shè)置數(shù)據(jù)位
if(data & (1 << i)) SIO_D_HIGH();
else SIO_D_LOW();
sccb_delay();
// 時(shí)鐘脈沖
SIO_C_HIGH();
sccb_delay();
SIO_C_LOW();
}
// 讀取應(yīng)答位
SIO_D_INPUT(); // 切換為輸入
sccb_delay();
SIO_C_HIGH();
ack = (SIO_D_READ() == 0); // 低電平表示應(yīng)答
sccb_delay();
SIO_C_LOW();
SIO_D_OUTPUT(); // 切換回輸出
return ack;
}
硬件控制器
部分微處理器(如 STM32、NXP Kinetis)的 I2C 控制器可通過(guò)配置時(shí)序兼容 SCCB
優(yōu)點(diǎn):不占用 CPU 時(shí)間,通信更可靠
缺點(diǎn):需要控制器支持,靈活性較低
硬件實(shí)現(xiàn)時(shí)需將 I2C 的時(shí)鐘頻率降低到 100kbps 以下,并禁用快速模式和 PEC 校驗(yàn)功能。
2. 地址分配
SCCB 設(shè)備的 7 位地址由廠(chǎng)商預(yù)設(shè),通常可通過(guò)硬件引腳調(diào)整部分位,以避免地址沖突:
OmniVision 攝像頭通常使用 0x42(寫(xiě))和 0x43(讀)作為默認(rèn)地址
GalaxyCore 傳感器常用 0x20(寫(xiě))和 0x21(讀)
部分設(shè)備通過(guò) AD0 引腳可切換地址的最低位
在多設(shè)備系統(tǒng)中,需確保所有 SCCB 設(shè)備的地址唯一,必要時(shí)通過(guò)硬件引腳配置不同地址。
三、SCCB 接口的典型應(yīng)用
1. 攝像頭配置
SCCB 最主要的應(yīng)用是配置 CMOS 圖像傳感器的工作參數(shù),典型配置項(xiàng)包括:
分辨率設(shè)置:通過(guò)寄存器配置輸出圖像的寬度和高度
幀率控制:調(diào)整傳感器的積分時(shí)間和輸出速率
曝光參數(shù):設(shè)置自動(dòng)曝光模式、曝光時(shí)間和增益
白平衡:配置紅 / 藍(lán)增益,調(diào)整圖像色溫
圖像質(zhì)量:設(shè)置降噪、銳化等圖像增強(qiáng)功能
電源管理:控制傳感器的工作模式和功耗
例如,通過(guò) SCCB 配置 OmniVision OV7670 攝像頭分辨率的流程:
// 初始化SCCB通信
sccb_init();
// 寫(xiě)入寄存器:設(shè)置格式為QVGA
sccb_write(OV7670_ADDR, 0x12, 0x04); // 0x12寄存器控制圖像格式
// 設(shè)置水平尺寸
sccb_write(OV7670_ADDR, 0x32, 0x00); // HOUT低8位
sccb_write(OV7670_ADDR, 0x33, 0x1E); // HOUT高8位(0x1E0=480)
// 設(shè)置垂直尺寸
sccb_write(OV7670_ADDR, 0x34, 0x00); // VOUT低8位
sccb_write(OV7670_ADDR, 0x35, 0x14); // VOUT高8位(0x140=320)
2. 狀態(tài)讀取
除了配置參數(shù),SCCB 還可用于讀取傳感器的狀態(tài)信息:
讀取設(shè)備 ID 寄存器,確認(rèn)傳感器型號(hào)
獲取溫度傳感器數(shù)據(jù),進(jìn)行溫度補(bǔ)償
讀取幀同步信號(hào)狀態(tài),同步主機(jī)與傳感器
獲取錯(cuò)誤狀態(tài)寄存器,診斷通信問(wèn)題
3. 系統(tǒng)集成
在實(shí)際系統(tǒng)中,SCCB 通常與圖像數(shù)據(jù)傳輸接口配合工作:
SCCB 負(fù)責(zé)傳輸控制信號(hào)(低速)
MIPI-CSI 或并行接口負(fù)責(zé)傳輸圖像數(shù)據(jù)(高速)
這種分離設(shè)計(jì)使控制通道和數(shù)據(jù)通道各自?xún)?yōu)化,兼顧了可靠性和傳輸效率。
四、SCCB 接口的優(yōu)缺點(diǎn)與發(fā)展趨勢(shì)
1. 優(yōu)點(diǎn)
硬件簡(jiǎn)單:僅需兩根信號(hào)線(xiàn),無(wú)需專(zhuān)用控制器
實(shí)現(xiàn)容易:時(shí)序要求寬松,軟件模擬簡(jiǎn)單
可靠性高:開(kāi)漏輸出設(shè)計(jì)支持多設(shè)備共存,應(yīng)答機(jī)制確保數(shù)據(jù)正確傳輸
低功耗:空閑時(shí)總線(xiàn)處于高電平,幾乎不消耗電流
2. 缺點(diǎn)
速率較低:最高速率通常限制在 400kbps,不適合大量數(shù)據(jù)傳輸
功能單一:僅支持基本的寄存器讀寫(xiě),缺乏復(fù)雜的錯(cuò)誤處理和流控制
兼容性有限:主要用于圖像傳感器,其他外設(shè)支持較少
無(wú)仲裁機(jī)制:多主機(jī)場(chǎng)景下可能出現(xiàn)總線(xiàn)沖突
3. 發(fā)展趨勢(shì)
隨著圖像傳感器數(shù)據(jù)速率的提升,SCCB 作為控制接口仍將長(zhǎng)期存在,但也在向以下方向發(fā)展:
與高速接口融合:在 MIPI-CSI-2 等高速接口中嵌入控制通道,減少信號(hào)線(xiàn)數(shù)量
增強(qiáng)功能:部分廠(chǎng)商的新型傳感器在 SCCB 基礎(chǔ)上增加了中斷信號(hào)和喚醒功能
向后兼容:新傳感器仍保留 SCCB 接口,確保與傳統(tǒng)系統(tǒng)的兼容性
向 I2C 靠攏:越來(lái)越多的傳感器同時(shí)支持 SCCB 和標(biāo)準(zhǔn) I2C 模式,提高靈活性