石汶奇,干鈺靜,黃光明
華中師范大學(xué) 物理科學(xué)與技術(shù)學(xué)院,湖北 武漢 430079
近 年 來, 隨 著CMOS(Complementary Metal Oxide Semiconductor)圖像傳感器技術(shù)的發(fā)展,越來越多廉價(jià)且圖像效果優(yōu)良的CMOS 傳感器芯片誕生。新興的CMOS 傳感器逐漸取代一些傳統(tǒng)CCD(Charge Coupled Device)圖像傳感器被廣泛應(yīng)用于醫(yī)療、安保等各個(gè)行業(yè)和領(lǐng)域[1-3]。
德 國Awaiba 公 司 設(shè) 計(jì) 的1 mm×1 mm×1.7 mm,250×250 像素的小封裝、低功耗、異步通信的CMOS 微型圖像傳感器NanEye 2D,體積微小且具有優(yōu)良的EMC 特性[4-5]。該攝像頭在安保、醫(yī)療、科學(xué)研究和生物測(cè)定等有特殊要求的領(lǐng)域具有很大的開發(fā)和應(yīng)用前景[2-3,5]。但是NanEye 2D 特有的4 線接口、異步通信模式以及其自身內(nèi)部串行數(shù)據(jù)輸出時(shí)鐘存在±20%的抖動(dòng)[6],這使得我們對(duì)NanEye 2D 傳感器數(shù)據(jù)的采集變得比較困難。再加上目前國內(nèi)外并沒有NanEye 2D 攝像頭數(shù)據(jù)采集方面相關(guān)的公開的應(yīng)用研究和應(yīng)用文獻(xiàn),使得NanEye 2D 攝像頭的開發(fā)和應(yīng)用變得更加困難。
為了解決這一技術(shù)難題,本文對(duì)NanEye 2D 攝像頭的4 線接口、異步通信模式以及內(nèi)部時(shí)鐘±20%的抖動(dòng)等進(jìn)行了分析,在Altera 公司的FPGA 平臺(tái)上設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)針對(duì)NanEye 2D 攝像頭數(shù)據(jù)采集的定制IP 核。該設(shè)計(jì)對(duì)于進(jìn)一步開發(fā)NanEye 2D 圖像傳感器具有一定的借鑒意義。
NanEye 2D 全數(shù)字?jǐn)z像頭是2016 年歐洲Sensor Expo & Conference 的創(chuàng)新銀獎(jiǎng)作品[7]。NanEye 2D 傳感器是一個(gè)提供真正的片上系統(tǒng)的攝像頭。該傳感器內(nèi)的片上系統(tǒng)具有10 位ADC(Analog-to-Digital Converter)轉(zhuǎn)換功能,自定時(shí)順序讀出功能以及串行位數(shù)據(jù)LVDS(Low-Voltage Differential Signaling)傳輸功能[7]。NanEye 2D 攝像頭能夠以42~55 Fps 的幀速率通過4 線的接口傳輸250×250 分辨率的圖像。幀速率大于40 Fps 使得該攝像頭的圖像能夠流暢地同步到絕大多數(shù)顯示接口上。此外,Awaiba 特有的4線數(shù)據(jù)接口技術(shù)允許NanEye 2D 攝像頭的傳輸線在遠(yuǎn)端沒有任何輔助部件的情況下可以達(dá)到3 m 的長度。由于這種接口的低能量損耗,攝像頭不需要復(fù)雜的屏蔽來滿足EMC(Electro Magnetic Compatibility)規(guī)范接口耗散[8]。該攝像頭可應(yīng)用于安保、醫(yī)療、科學(xué)應(yīng)用和生物測(cè)定等領(lǐng)域。
如圖1 和圖2 所示,NanEye 2D 圖像傳感器具體的工作時(shí)序?yàn)椋簭牡谝恍虚_始,每一行都有一段3 PP(1 PP 為12 bit 數(shù)據(jù))的行開頭,接著是每一行的pixel 數(shù)據(jù),如此反復(fù),直到完成傳輸所有pixel 值。當(dāng)完成250 行pixel 數(shù)據(jù)的傳輸后,系統(tǒng)進(jìn)入phase nbr 251 幀結(jié)尾階段,連續(xù)傳輸4 PP 的0;之后進(jìn)入phase nbr 252 階段(即NanEye 2D攝像頭寄存器上行配置階段),外部可以通過差分?jǐn)?shù)據(jù)線對(duì)攝像頭的有關(guān)寄存器進(jìn)行配置。配置結(jié)束后,進(jìn)入phase nbr 253 數(shù)據(jù)時(shí)鐘同步階段和phase nbr 253a 狀態(tài)跳轉(zhuǎn)階段并開始新的一幀圖像數(shù)據(jù)傳輸[6,8]。在每個(gè)角落都有兩個(gè)具有電氣特性的黑像素和兩個(gè)電氣上飽和的像素,用于檢查接收數(shù)據(jù)的一致性[6,8]。
圖1 內(nèi)部自定時(shí)工作流程示意圖
圖2 數(shù)據(jù)流協(xié)議
攝像頭的數(shù)據(jù)格式為12 bit,其中數(shù)據(jù)頭部是固定的“1”,尾部是固定的“0”,中間10 bit 為有效的pixel 數(shù)據(jù)[6,8]。pixel 數(shù)據(jù)格式如圖3 所示。
圖3 pixel數(shù)據(jù)格式
如圖4 所示,攝像頭的數(shù)據(jù)在向外傳輸時(shí)會(huì)經(jīng)過內(nèi)部時(shí)鐘的異或,將1 bit 的數(shù)據(jù)變成兩位的數(shù)據(jù),即進(jìn)行了曼徹斯特編碼,其中“01”表示“1”,“10”表示“0”。例如:有效pixel 數(shù)據(jù)“0110001101”,包含數(shù)據(jù)起始位和結(jié)尾位為“101100011010”,經(jīng)過異或后為“0110010110101001011 00110”[6,8]。
圖4 數(shù)據(jù)異或編碼(曼徹斯特編碼)
攝像頭進(jìn)行上行配置階段的數(shù)據(jù)格式如圖5 所示,寄存器配置的數(shù)據(jù)為16 bit 的格式。對(duì)攝像頭寄存器進(jìn)行寫操作的順序如下:首先,向寄存器發(fā)送4 bit 的 update code(“1001”),接著發(fā)送3 bit 的register address(“000”),最后發(fā)送16 bit 的寄存器配置數(shù)據(jù)。當(dāng)不對(duì)寄存器操作時(shí),寄存器默認(rèn)值為“1010011000000010”[6,8]。了解NanEye 2D 圖像傳感器的數(shù)據(jù)傳輸方式后,通過過采樣監(jiān)測(cè)數(shù)據(jù)流,對(duì)數(shù)據(jù)進(jìn)行曼徹斯特解碼后找到對(duì)應(yīng)的幀同步、行同步、上行配置階段等就可以對(duì)有效的pixel 數(shù)據(jù)進(jìn)行提取,從而獲取原始的幀圖像數(shù)據(jù)。
圖5 上行寄存器配置數(shù)據(jù)格式
整個(gè)IP 核模塊內(nèi)部主要由Rx_decoder(串行數(shù)據(jù)接收和解碼模塊)、Deserializer(串行數(shù)據(jù)轉(zhuǎn)并行數(shù)據(jù)模塊)、Sensor_confi gure(上行配置模塊)、ram_ctrl(存儲(chǔ)控制模塊)和uart(UART 傳輸接口模塊)五個(gè)部分組成(圖6)。
圖6 NanEye 2D攝像頭數(shù)據(jù)采集IP核數(shù)據(jù)流框圖
在該設(shè)計(jì)中,數(shù)據(jù)采集主要由兩部分完成。其中一個(gè)部分是Rx_decoder 模塊,該部分負(fù)責(zé)攝像頭的串行信號(hào)的接收,過采樣解碼恢復(fù)獲取原始的串行有效數(shù)據(jù);另一部分是Deserializer 模塊,該模塊實(shí)現(xiàn)對(duì)Rx_decoder 部分獲得的原始串行數(shù)據(jù)的行開頭、幀結(jié)尾的識(shí)別、pixel 有效10位串行數(shù)據(jù)的提取,串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)輸出和當(dāng)前幀的行列數(shù)計(jì)數(shù)。
ram_ctrl 模塊負(fù)責(zé)將解串后的并行數(shù)據(jù)存儲(chǔ)到RAM對(duì)應(yīng)的地址中。通過外部按鍵產(chǎn)生傳輸開始信號(hào),觸發(fā)UART 的數(shù)據(jù)傳輸。IP 核通過uart 將一幀完整的數(shù)據(jù)上傳到上位機(jī),供后面進(jìn)一步處理和分析。Sensor_confi gure 模塊則負(fù)責(zé)在數(shù)據(jù)上行配置階段通過I2C 通信協(xié)議對(duì)NanEye 2D 傳感器的寄存器參數(shù)進(jìn)行配置。本設(shè)計(jì)中的測(cè)試,NanEye 2D 寄存器的參數(shù)均為默認(rèn)值。
Rx_decoder 模塊是數(shù)據(jù)采集IP 核部分最重要的模塊,本模塊負(fù)責(zé)對(duì)攝像頭傳感器輸出的曼徹斯特編碼的數(shù)據(jù)流進(jìn)行接收和解碼。此外,Rx_decoder 模塊還通過一直觀察輸入信號(hào),檢測(cè)和產(chǎn)生幀開始信號(hào)“frame_sync_start”和上行配置開始信號(hào)“confi g_en”(該信號(hào)供Sensor_confi gure上行配置模塊使用)。
曼徹斯特編碼表示串行數(shù)據(jù)(DATA)與其串行時(shí)鐘(CLOCK)的邏輯組合(圖7)。一個(gè)時(shí)鐘周期信號(hào)至少改變一次其高低電平狀態(tài),這使得接收器在不需要發(fā)送器同時(shí)發(fā)送時(shí)鐘信號(hào)和數(shù)據(jù)信號(hào)的情況下,能夠正確對(duì)齊數(shù)據(jù)流。被接收器解碼的數(shù)據(jù)流可以看作只有兩個(gè)可能的高或低持續(xù)時(shí)間的脈沖序列,一種是T_short=0.5 T_Bit(這里也稱為“半位周期”)和T_long = T_Bit(這里也稱為“全位周期”)。
圖7 曼徹斯特編碼的數(shù)據(jù)流
為了解碼攝像頭輸出的曼徹斯特編碼后的信號(hào),接收機(jī)需要不斷測(cè)量兩次電平轉(zhuǎn)換之間的時(shí)間。在這種測(cè)量的基礎(chǔ)上,解碼器必須區(qū)分最后的電平轉(zhuǎn)換是由短脈沖(S)引起的還是長脈沖(L)引起的。短脈沖總是意味著原始數(shù)據(jù)流沒有改變電平狀態(tài),而長脈沖意味著在原始比特流內(nèi)發(fā)生了電平轉(zhuǎn)換。將上面例子中的曼徹斯特編碼的數(shù)據(jù)流(圖7)應(yīng)用到接收器應(yīng)該最終產(chǎn)生圖8 中所示的脈沖序列。每個(gè)長脈沖都會(huì)導(dǎo)致解碼輸出信號(hào)改變其狀態(tài)。如果數(shù)據(jù)信號(hào)的最初狀態(tài)是已知的,原始數(shù)據(jù)的比特流就可以如圖8 所示重構(gòu)。在這個(gè)例子中,NanEye 圖像傳感器發(fā)送的每行的行開始,原始數(shù)據(jù)的初始狀態(tài)信號(hào)都是“0”。
圖8 曼徹斯特解碼的數(shù)據(jù)流
由此可知,正確判定還原信號(hào)脈沖時(shí)間的長度是正確解碼恢復(fù)原始數(shù)據(jù)的必要條件。但是由于傳感器內(nèi)部設(shè)計(jì)的不足,該時(shí)鐘會(huì)根據(jù)變化的溫度或電源電壓等條件產(chǎn)生漂移,即其內(nèi)部異或時(shí)鐘Sensor Clock 存在±20%的抖動(dòng),該時(shí)鐘發(fā)生器的頻率并不完全已知。Rx_decoder 必須通過使用它自己的采樣時(shí)種SCLOCK,將傳感器的輸出信號(hào)作為異步信號(hào)進(jìn)行采樣。由于這個(gè)原因,選擇適當(dāng)?shù)牟蓸宇l率是很重要的。合適的采樣頻率保證了通過分析計(jì)數(shù)器總是可以區(qū)分長脈沖值和短脈沖值,但是又不能對(duì)FPGA 芯片要求太高[9-11]。為了解決這個(gè)問題,我們調(diào)用了Altera FPGA 的雙邊沿采樣IP 核模塊,通過FPGA PLL IP 核模塊將50 MHz 時(shí)鐘倍頻到200 MHz 來實(shí)現(xiàn)400 MHz 的采樣效果[12-13]。另一方面為了能夠適應(yīng)攝像頭的時(shí)鐘抖動(dòng),我們?cè)O(shè)計(jì)了一個(gè)脈沖寬度計(jì)數(shù)模塊。將上一幀數(shù)據(jù)的脈沖寬度統(tǒng)計(jì)值用于下一幀數(shù)據(jù)的長脈沖和短脈沖的判定閾值,從而實(shí)現(xiàn)判定門限值的動(dòng)態(tài)調(diào)節(jié)。
這樣設(shè)計(jì)的Rx_decoder 模塊能夠正確穩(wěn)定地對(duì)NanEye 2D 攝像頭數(shù)據(jù)進(jìn)行采樣和解碼恢復(fù),同時(shí)產(chǎn)生位有效信號(hào)。
Deserializer 模塊用于將Rx_decoder 部分輸出的串行數(shù)據(jù)轉(zhuǎn)換成10 位并行的數(shù)據(jù),并輸出存儲(chǔ)到ram_ctrl 部分。Deserializer 模塊將數(shù)據(jù)串轉(zhuǎn)并的主要組成部分是一個(gè)12 位移位寄存器。該模塊通過該移位寄存器實(shí)現(xiàn)對(duì)Rx_decoder解碼輸出的比特序列的串并轉(zhuǎn)換。每當(dāng)串行位數(shù)據(jù)有效信號(hào)s_wren=“1”時(shí),移位寄存器的數(shù)據(jù)向高位移一位。同時(shí),移位計(jì)數(shù)器的值會(huì)“+1”。當(dāng)移位寄存器中的數(shù)據(jù)被識(shí)別為有效的pixel 數(shù)據(jù)值(“1xxxxxxxxxx0”)時(shí),有效的10 位pixel 數(shù)據(jù)將被提取出來,同時(shí)產(chǎn)生輸出使能信號(hào),存入到ram_ctrl 模塊的片上RAM 中[14]。當(dāng)收到的完整的像素點(diǎn)值,但其起始位不為“1”或是結(jié)束位不為“0”時(shí),表示該像素點(diǎn)值出錯(cuò),錯(cuò)誤標(biāo)志位error 被激活。
該模塊的另一個(gè)功能是使用解碼的比特流,在正確的時(shí)間點(diǎn)激活信號(hào)行同步和行結(jié)尾信號(hào),通過計(jì)算列和行的數(shù)量,來檢測(cè)由NanEye 傳感器輸出數(shù)據(jù)的行和幀邊界。
結(jié)合上面的模塊,通過狀態(tài)機(jī)等邏輯我們可以對(duì)圖像有效數(shù)據(jù)進(jìn)行正確提取。值得一提的是,傳感器實(shí)際上每行只發(fā)送249 個(gè)像素。最后一行(第250 行)只包含248個(gè)像素。狀態(tài)機(jī)在設(shè)計(jì)時(shí)已經(jīng)考慮到該問題。當(dāng)錯(cuò)誤標(biāo)志位信號(hào)error 被激活時(shí),上述有關(guān)信號(hào)都被重置并且重新開始解串,這樣保證了每幀的第一行始終被正確接收。
IP 核編譯后接上NanEye 2D 傳感器在SignalTap II(Altera 公司的Quartus II 開發(fā)軟平臺(tái)軟件自帶的嵌入式邏輯分析儀)上測(cè)試,觀察到的信號(hào)如圖9 所示。結(jié)果表明,該IP 核可以每秒44 幀正常識(shí)別和提取攝像頭的幀同步、行同步、列同步和pixel 值等數(shù)據(jù),實(shí)現(xiàn)了設(shè)計(jì)的目標(biāo)功能。
圖9 IP核SignalTap II測(cè)試結(jié)果
IP 核正常獲取到NanEye 2D 的幀圖像數(shù)據(jù)后,將IP核采集到的幀圖像流通過UART 上傳到PC 機(jī)上,經(jīng)過軟件Bayer 解碼算法[15-16]恢復(fù)后得到的結(jié)果圖(圖10a,手機(jī)打光,偏黃)。圖10b 為手機(jī)拍攝的實(shí)物圖(白色日光燈照射,由華為榮耀10 拍攝)。對(duì)比圖10a 和圖10b,雖然獲得的圖像整體較暗且色彩飽和度不夠,但結(jié)果表明IP 核采集到的幀圖像數(shù)據(jù)經(jīng)過軟件解碼算法后可正確顯示流暢的視頻流,本IP 核獲取的數(shù)據(jù)是正確連續(xù)且穩(wěn)定可靠的。
圖10 圖像數(shù)據(jù)顯示測(cè)試
本IP 核作為NanEye 2D 微型圖像傳感器的數(shù)據(jù)采集部分,負(fù)責(zé)完成圖像數(shù)據(jù)的采樣和幀數(shù)據(jù)提取。經(jīng)測(cè)試結(jié)果證明,該IP 核運(yùn)用在NanEye 2D 攝像頭傳感器上可以每秒44 幀的速率采集和提取圖像數(shù)據(jù)。該速率大于NanEye 2D 理論的最小幀速率42 Fps,小于最大幀速率55 Fps。采集到的幀圖像數(shù)據(jù)通過UART 接口上傳到PC 機(jī)上,經(jīng)過軟件漢密爾頓Bayer 插值解碼算法[17]后可以顯示流暢的視頻流。結(jié)果表明,本IP 核很好地解決了NanEye 2D 圖像傳感器的數(shù)據(jù)采集問題。本文中的研究成果為后續(xù)開發(fā)基于NanEye 2D 微型圖像傳感器的醫(yī)用內(nèi)窺鏡成像系統(tǒng)奠定了重要基礎(chǔ)。