基于ARM7的無(wú)線內(nèi)窺系統(tǒng)設(shè)計(jì)
引 言
本文引用地址:http://m.butianyuan.cn/article/80831.htm目前微米、納米技術(shù)的研究非常活躍,使得微小技術(shù)、微型機(jī)械電子系統(tǒng)(MEMS)技術(shù)得到迅速發(fā)展,從而大大促進(jìn),醫(yī)用器材的微型化、微觀化,出現(xiàn)了醫(yī)用光電微傳感器(如無(wú)線內(nèi)窺鏡)。無(wú)線內(nèi)窺鏡以微機(jī)電系統(tǒng)為基礎(chǔ),由感知外界信息(力、熱、光、生、磁、化等)的微型傳感器、控制對(duì)象的執(zhí)行器、信號(hào)處理和控制電路、通信接口和電源等部件組成,將信息的獲取、處理和執(zhí)行集成在一起,形成一體化的、具有多種功能的微型系統(tǒng)。
當(dāng)前,醫(yī)用無(wú)線內(nèi)窺鏡已有產(chǎn)品問(wèn)世。以色列GI公司早在2001年5月即推出其M2A無(wú)線內(nèi)窺鏡產(chǎn)品,并獲得美國(guó)FDA認(rèn)證。GI公司生產(chǎn)的膠囊型內(nèi)窺鏡長(zhǎng)為26 mm,直徑為11mm,重3.5g;采用微功耗CMOS圖像傳感器,可觀察視角為14O°,可看清0.lmm左右的物體,采集速度為2幀/s。日本RF公司也于2001年底研制出NORIKA3膠囊型內(nèi)窺鏡系統(tǒng)。該產(chǎn)品采用超小型CCD攝像頭,含有8個(gè)鏡頭,可觀察視角為360°,圖像幀率可達(dá)30幀/s。“NORIKA3”利用位于藥丸內(nèi)的轉(zhuǎn)子線圈與產(chǎn)生磁場(chǎng)的體外定子線圈形成馬達(dá)結(jié)構(gòu)來(lái)實(shí)現(xiàn)藥丸系統(tǒng)姿態(tài)控制。RF公司在其網(wǎng)站上發(fā)布了產(chǎn)品的設(shè)計(jì)模型。此外,Gong和Park等人電獨(dú)立發(fā)表論文,描述了各自關(guān)于無(wú)線內(nèi)窺鏡的設(shè)計(jì)。
目前國(guó)內(nèi)尚無(wú)獨(dú)立制造該產(chǎn)品的能力,而國(guó)外的產(chǎn)品價(jià)格昂貴,因此,研發(fā)具有自主知識(shí)產(chǎn)權(quán)的無(wú)線內(nèi)窺鏡產(chǎn)品具有重要意義。本文介紹無(wú)線內(nèi)窺系統(tǒng)的系統(tǒng)結(jié)構(gòu),圖像壓縮標(biāo)準(zhǔn)JPEG-LS在ARM7平臺(tái)上的實(shí)現(xiàn),以及實(shí)現(xiàn)過(guò)程中所采用的調(diào)試方法、優(yōu)化方法。
1 系統(tǒng)組成與工作原理
1.1 內(nèi)窺系統(tǒng)組成結(jié)構(gòu)
如圖1所示,無(wú)線內(nèi)窺鏡系統(tǒng)主要由主機(jī)和從機(jī)(無(wú)線內(nèi)窺鏡)組成。從機(jī)由攝像頭采集原始圖像,經(jīng)過(guò)壓縮處理,通過(guò)無(wú)線方式把壓縮后的圖像數(shù)據(jù)傳輸給主機(jī);主機(jī)通過(guò)USB連接藍(lán)牙適配器接收壓縮圖像,并轉(zhuǎn)發(fā)給PC上的管理軟件,管理軟件將圖像解壓縮并顯示出來(lái)。
1.2 無(wú)線內(nèi)窺鏡組成結(jié)構(gòu)
如圖2所示,無(wú)線內(nèi)窺鏡采用CPLD芯片EPM7256-144,實(shí)現(xiàn)30萬(wàn)像素CMOS攝像頭OV7660的圖像采集控制,以及數(shù)據(jù)和地址總線的切換。利用Atmel(代理商:聚興科技)公司的ARM7芯片AT91R40008,實(shí)現(xiàn)JPEG-LS無(wú)損圖像壓縮與藍(lán)牙無(wú)線數(shù)據(jù)傳輸,實(shí)現(xiàn)溫度、壓力采集以及可控光源和系統(tǒng)控制。CPLD和ARM7之間的圖像數(shù)據(jù)交換通過(guò)8位數(shù)據(jù)總線實(shí)現(xiàn),ARM7和CPLD之間的握手控制則通過(guò)I/O口線實(shí)現(xiàn)。由于圖像數(shù)據(jù)量較大,按640×480分辨率、8位圖像的格式計(jì)算達(dá)幾十萬(wàn)字節(jié),故本系統(tǒng)外部擴(kuò)展了2片上作在乒乓方式的512KB的SRAM作數(shù)據(jù)緩存。
1.3 系統(tǒng)工作原理
內(nèi)窺系統(tǒng)可以實(shí)現(xiàn)圖像的連續(xù)采集以及溫度、濕度、照明亮度等的控制。其中圖像采集是系統(tǒng)的核心,其工作流程如下:
?、倌J(rèn)情況下,系統(tǒng)工作在休眠狀態(tài)。
②工作人員通過(guò)PC管理軟件發(fā)送命令開(kāi)始采集圖像,軟件通過(guò)USB接口把命令發(fā)送給藍(lán)牙適配器,然后發(fā)送給無(wú)線內(nèi)窺鏡。
?、蹆?nèi)窺鏡接收到圖像采集命令后,ARM控制CPLD開(kāi)始采集圖像數(shù)據(jù)。
④CPLD把采集到的一幀圖像數(shù)據(jù)寫(xiě)入一塊SRAM中,把ARM的總線切換到該SRAM上,并通知ARM進(jìn)行壓縮;同時(shí)CPLD往另一塊SRAM中繼續(xù)采集下一幀圖像,便于提高系統(tǒng)的吞吐率。
?、軦RM通過(guò)藍(lán)牙模塊返回響應(yīng)命令,并返回采集JPEG-LS圖像的頭信息。
?、轕C管理軟件發(fā)送命令接收下一行壓縮圖像,ARM壓縮該行原始圖像,并發(fā)送壓縮數(shù)據(jù);如果出錯(cuò),可以重新發(fā)送。重復(fù)本步驟可以獲取整幀壓縮圖像。
⑦PC軟件對(duì)壓縮圖像解碼并顯示,并提供其他附加功能,如圖像處理、保存等。
?、嘀貜?fù)步驟②~⑦,獲取下一幀壓縮圖像。
由上述流程可以看出,JPEG-LS壓縮以及無(wú)線信道傳輸決定整個(gè)系統(tǒng)的圖像傳輸速率。無(wú)線傳輸采用藍(lán)牙技術(shù),其標(biāo)稱(chēng)空中速率為1 Mbps,不易提高;因此,系統(tǒng)設(shè)計(jì)的核心是JPEG-LS的編碼效率。
2 ARM與攝像頭接口設(shè)計(jì)
系統(tǒng)采用美國(guó)Omni Vision公司(簡(jiǎn)稱(chēng)為“OV公司”)開(kāi)發(fā)的CMOS彩色圖像傳感器芯片。該芯片將CMOS光感應(yīng)核與外圍支持電路集成在一起,具有可編程控制與視頻模/數(shù)混合輸出等功能。
(1)SSCB配置
為使芯片正常上作,需要通過(guò)SCCB總線來(lái)完成配置工作。SCCB總線是OV公司定義的一套串行總線標(biāo)準(zhǔn),與I2C總線類(lèi)似。配置時(shí),主要是寫(xiě)OV7660的內(nèi)部寄存器,使芯片輸出格式正確的彩色圖像數(shù)據(jù)。OV7660共有100個(gè)左右的寄存器可以配置,其數(shù)據(jù)手冊(cè)并未提供可用的配置值。系統(tǒng)調(diào)試過(guò)程中,通過(guò)各種測(cè)試,測(cè)出以下一系列配置數(shù)據(jù),可使OV7660輸出顏色豐富的圖像,如表l所列。
(2)圖像數(shù)據(jù)訪問(wèn)
AT91R40008不帶攝像頭接口,因此系統(tǒng)增加了一塊CPLD實(shí)現(xiàn)CMOS攝像頭的時(shí)序,如圖3所示。ARM只須訪問(wèn)SRAM就可以訪問(wèn)圖像數(shù)據(jù)。CPLD確保ARM的總線每次都只掛接一塊有完整圖像的SRAM。
3 ARM與藍(lán)牙接口設(shè)計(jì)
藍(lán)牙是無(wú)線數(shù)據(jù)和語(yǔ)音傳輸?shù)拈_(kāi)放式標(biāo)準(zhǔn)。它將各種通信設(shè)備、計(jì)算機(jī)及其終端設(shè)備、各種數(shù)字系統(tǒng),甚至家用電器,采用無(wú)線方式連接起來(lái)。為了優(yōu)化系統(tǒng)設(shè)計(jì),我們采用性價(jià)比高的CSR BC2實(shí)現(xiàn)藍(lán)牙無(wú)線串口。CSRBC2是一款高度整合的模塊級(jí)藍(lán)牙芯片,主要包括:基帶控制器、2.4~2.5GHz的數(shù)字智能無(wú)線電和程序數(shù)據(jù)存儲(chǔ)器。通過(guò)該模塊,系統(tǒng)可以提供無(wú)線標(biāo)準(zhǔn)UART接口,支持多種波特率(如9.6 kbps、19.2 kbps、38.4 kbps、57.6kbps、115.2 1kbps、230.4 kbps、460.8 kbps、92l.6 kbps)。本系統(tǒng)經(jīng)過(guò)測(cè)試發(fā)現(xiàn),當(dāng)速率為460.8 kbps時(shí),藍(lán)牙芯片能夠正常工作;而在921.6kbps時(shí),會(huì)有很高的誤碼率。藍(lán)牙模塊接口電路如圖4所示?! ?/p>
4 JPEG-LS圖像編碼
系統(tǒng)采集的原始圖像相關(guān)性大、數(shù)據(jù)量大,需要進(jìn)行圖像壓縮。醫(yī)學(xué)圖像要求將圖像質(zhì)量放在首位,因此必須采用無(wú)損壓縮算法。本系統(tǒng)采用靜態(tài)圖像無(wú)損壓縮技術(shù)JPEG-LS,它是目前無(wú)損壓縮算法中性能較好的一種算法。JPEG-LS是ISO/ITU組織提出的最新的連續(xù)靜態(tài)圖像近無(wú)損壓縮標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)采用LOCO-I(Low Complexity Lossless Compression for Images)核心算法,建立簡(jiǎn)單的上下文模型,在低復(fù)雜度的情況下實(shí)現(xiàn)了高壓縮率;同時(shí),算法對(duì)圖像逐行進(jìn)行壓縮,降低了系統(tǒng)對(duì)圖像緩沖區(qū)的要求。
4.1 JPEG-LS工作原理簡(jiǎn)介
如圖5所示,JPEG-LS的編碼過(guò)程主要包括預(yù)測(cè)、上下文建模和熵編碼。核心算法LOCO-I采用鄰域非線性預(yù)測(cè)和Golomb熵編碼。
上下文建模是JPEG-LS編碼的基礎(chǔ),使用的建模方法是基于對(duì)上下文的認(rèn)識(shí)。上下文首先根據(jù)圖5中a、b、c、d處像素值決定對(duì)x處像素足采用常規(guī)模式編碼還是采用游程模式編碼。當(dāng)從上下文估計(jì)的連續(xù)像素在近似無(wú)失真編碼要求的容限內(nèi)幾乎完全相同時(shí),選擇游程模式;否則,選擇常規(guī)模式。
常規(guī)模式下首先完成預(yù)測(cè)。預(yù)測(cè)器對(duì)位于a、b、c等3個(gè)鄰近像素的重建組值Ra、Rb、Rc進(jìn)行綜合,形成x像素的預(yù)測(cè)值Px,即:
預(yù)測(cè)誤差是x像索的實(shí)際值和預(yù)測(cè)值的差分。通過(guò)一個(gè)與上下文有關(guān)的項(xiàng)對(duì)預(yù)測(cè)誤差進(jìn)行修正,以補(bǔ)償預(yù)測(cè)中的系統(tǒng)偏移。如果采用近無(wú)損編碼,則要對(duì)預(yù)測(cè)誤差進(jìn)行量化,所允許的最大誤差用一個(gè)“NEAR"參數(shù)表示。對(duì)已修正的預(yù)測(cè)誤差進(jìn)行Golomb編碼。Golomb編碼相當(dāng)于幾何分布下的Huffman編碼。它依賴于上下文,而前面編碼的預(yù)測(cè)誤差也是以相同的上下文為基礎(chǔ)。
為進(jìn)一步提高數(shù)據(jù)壓縮效率,JPEG-LS引入了游程模式。此時(shí)編碼過(guò)程直接跳過(guò)預(yù)測(cè)和誤差編碼程序:編碼器從x處開(kāi)始對(duì)像素值和a處像素重建值相同的一系列連續(xù)像素進(jìn)行計(jì)數(shù),即統(tǒng)計(jì)游程的長(zhǎng)度。當(dāng)遇到一個(gè)具有不同值的像素或當(dāng)前行的行尾時(shí),游程終止。該游程長(zhǎng)度經(jīng)過(guò)一個(gè)專(zhuān)門(mén)的性能更好、更適用的Golomb編碼擴(kuò)展程序來(lái)編碼。
4.2 JPEG-LS的移植問(wèn)題
本系統(tǒng)使用HP實(shí)驗(yàn)室提供的開(kāi)源JPEG-LS開(kāi)發(fā)包。完整的JPEG-LS開(kāi)發(fā)包支持多種顏色模型,如多平面壓縮、逐行或者逐點(diǎn)等壓縮方式。本系統(tǒng)考慮到ARM系統(tǒng)資源的限制,只裁減了其中的逐行單文件壓縮方式。原始開(kāi)發(fā)包運(yùn)行在Linux或者Windows平臺(tái)上,移植過(guò)程最主要的工作包括3點(diǎn)。
①裁減不必要的功能,如原始開(kāi)發(fā)包中對(duì)多圖像編碼的支持。
②針對(duì)系統(tǒng)設(shè)計(jì)移植后的接口,如本模塊移植后,只提供以下幾個(gè)接口:
jls_global_init,全局初始化函數(shù),計(jì)算查詢表等,只需要啟動(dòng)時(shí)調(diào)用一次;
jls_image_init,每幀圖像開(kāi)始?jí)嚎s時(shí)都要調(diào)用一次的初始化;
jls_encode_one_line,壓縮一行圖像。
③對(duì)原開(kāi)發(fā)包中使用的動(dòng)態(tài)內(nèi)存分配需要移植,解決的方案有2個(gè):
開(kāi)發(fā)一個(gè)簡(jiǎn)單的內(nèi)存管理模塊;
手動(dòng)分配內(nèi)存。
考慮到源碼包中使用的動(dòng)態(tài)內(nèi)存不多,系統(tǒng)采用第2種方案。在移植過(guò)程中,建議先在PC上分配好一大塊內(nèi)存,然后,給開(kāi)發(fā)包中需要分配的地方手動(dòng)分配。在PC上調(diào)試通過(guò)之后,就可以直接在ARM上面使用了。
5 調(diào)試及優(yōu)化方法
5.1調(diào)試方法
嵌入式系統(tǒng)的調(diào)試是一個(gè)很繁瑣而復(fù)雜的過(guò)程。在調(diào)試之前劃分好模塊,可以大大提高調(diào)試效率;另外為了調(diào)試,還需要添加一些計(jì)劃項(xiàng)目之外的調(diào)試工具。
本系統(tǒng)的調(diào)試工作分為3個(gè)部分。
(1)藍(lán)牙無(wú)線鏈路層調(diào)試
藍(lán)牙無(wú)線鏈路層的調(diào)試可以直接借助PC上很多現(xiàn)有的串口工具來(lái)實(shí)現(xiàn)。
(2)CMOS攝像頭調(diào)試
CMOS攝像頭的調(diào)試有兩個(gè)部分:SCCB配置時(shí)序、RGB圖像數(shù)據(jù)時(shí)序。
一般的處理器都不帶SCCB接口,因此要用處理器的口線模擬SCCB時(shí)序。此時(shí)的調(diào)試一般都是通過(guò)示波器觀察模擬的時(shí)序,看足否符合芯片手冊(cè)上的要求。為了驗(yàn)證是否正確,一般可先讀一個(gè)指定的寄存器(這些寄存器都有出廠默認(rèn)值);然后寫(xiě)一個(gè)數(shù)據(jù),讀取出來(lái)驗(yàn)證是否吻合。
RGB圖像數(shù)據(jù)時(shí)序由CPLD產(chǎn)生,此時(shí)的調(diào)試需要ARM來(lái)配合。本系統(tǒng)在調(diào)試時(shí),在PC上編寫(xiě)了一個(gè)簡(jiǎn)單的串口接收程序,ARM把SRAM中的圖像數(shù)據(jù)通過(guò)串口發(fā)送給該P(yáng)C,PC上的程序把這些原始的RGB數(shù)據(jù)插值并顯示出來(lái),從而可以得知CPLD的時(shí)序是否正確。當(dāng)然,調(diào)試時(shí)序時(shí),示波器仍然是必不可少的工具。
(3)JPEG-LS算法調(diào)試
JPEG-LS算法的調(diào)試分為兩個(gè)步驟:PC上的算法驗(yàn)證和目標(biāo)板上的調(diào)試。
PC上的算法驗(yàn)證使用VC6.O模擬目標(biāo)板上的運(yùn)行環(huán)境,測(cè)試目標(biāo)板上的各個(gè)功能接口。本部分的驗(yàn)證代碼可供下載。
目標(biāo)板上調(diào)試時(shí),還是要借助串口,把壓縮的圖像和原始圖像通過(guò)串口發(fā)送至PC。Pc上的JPEG-LS解碼程序解碼壓縮圖像,然后與原始圖像對(duì)比,從而找出算法中的錯(cuò)誤。
5.2 優(yōu)化方法
為提高圖像傳輸?shù)膸?,本系統(tǒng)主要采用了2種優(yōu)化方法。
(1)硬件優(yōu)化
硬件優(yōu)化主要是在CPLD采集數(shù)據(jù)時(shí),使用雙緩沖,使得連續(xù)采集下一幀圖像和傳輸上一幀圖像可以并行,從而提高系統(tǒng)的吞吐率。
(2)軟件優(yōu)化
軟件優(yōu)化的作用在本系統(tǒng)的調(diào)試過(guò)程中效果明顯;本系統(tǒng)的第一個(gè)版本,圖像采集速率僅為3 s/幀;通過(guò)軟件優(yōu)化后,達(dá)到了最終的O.3 s/幀。其優(yōu)化如下:
?、傺h(huán)外移,避免在循環(huán)中重復(fù)運(yùn)算;
?、陬l繁使用的變量申明為寄存器變量;
③把所有的JPEG-LS編碼函數(shù)代碼拷貝到RAM中執(zhí)行。
默認(rèn)情況下,所有的代碼都存放在Flash中。ARM運(yùn)行時(shí),從Flash中讀取指令并且執(zhí)行。眾所周知,F(xiàn)lash的訪問(wèn)速度相對(duì)RAM而言,相差一個(gè)數(shù)量級(jí),因此,如果把關(guān)鍵代碼放在RAM中,執(zhí)行速率將會(huì)大大提高。而AT9lR40008內(nèi)部自帶512 KB的RAM,足夠本系統(tǒng)使用,因此,這個(gè)方法可行。
解決的方法有兩個(gè),一是寫(xiě)一個(gè)啟動(dòng)程序,在啟動(dòng)時(shí),把系統(tǒng)所有的代碼都拷貝到RAM中,這樣系統(tǒng)速度會(huì)提高。然而,該方法實(shí)現(xiàn)起來(lái)較麻煩,且如果程序擴(kuò)展,可能會(huì)超過(guò)RAM的512 KB限制。因此,本系統(tǒng)采用另外一個(gè)簡(jiǎn)單方法。采用IAR Embedded Workbench開(kāi)發(fā)環(huán)境,通過(guò)閱讀其編譯器手冊(cè)發(fā)現(xiàn),在函數(shù)之前添加一個(gè)__ramfunc偽指令,那么鏈接器在生成啟動(dòng)代碼時(shí),會(huì)將該函數(shù)拷貝到RAM中,從而提高運(yùn)行效率。其使用例子如下:
__ramfunc void encode_oneline(vcrid)
通過(guò)使用該方法,系統(tǒng)的運(yùn)行效率提高了約lO倍。
結(jié)語(yǔ)
本系統(tǒng)以ARM為核心,實(shí)現(xiàn)了JPEG-LS無(wú)損圖像壓縮算法,并日結(jié)合CPLD實(shí)現(xiàn)了CMOS攝像頭的時(shí)序控制。通過(guò)藍(lán)牙傳輸,實(shí)現(xiàn)了數(shù)字化的無(wú)線內(nèi)窺系統(tǒng)。
本系統(tǒng)具有良好的擴(kuò)充性,可以使得系統(tǒng)更加微型化。首先,如果采用CSR公司更新的BC3系列芯片,則將融合ARM核以及藍(lán)牙功能,可以更加減小內(nèi)窺鏡的體積。最重要的是,如果發(fā)展自主產(chǎn)權(quán)的內(nèi)窺鏡芯片,那么以現(xiàn)有的SOPC技術(shù),可以將ARM核、CPLD邏輯門(mén)以及藍(lán)牙通信功能集成在一起,形成無(wú)線內(nèi)窺鏡的集成解決方案,從而使其產(chǎn)業(yè)化成為可能。
本系統(tǒng)在實(shí)現(xiàn)過(guò)程中,完成了一系列的調(diào)試工具,積累了調(diào)試以及優(yōu)化經(jīng)驗(yàn)。我國(guó)現(xiàn)有的醫(yī)療設(shè)備開(kāi)發(fā)技術(shù)相對(duì)比較落后,在此分享,希望對(duì)同類(lèi)型的產(chǎn)品設(shè)計(jì)以及芯片生產(chǎn)能有一些參考價(jià)值。
藍(lán)牙技術(shù)相關(guān)文章:藍(lán)牙技術(shù)原理 攝像頭相關(guān)文章:攝像頭原理
評(píng)論