?
近幾年,隨著DSP及嵌入式技術的快速發展,采用DSP嵌入式系統的視頻設備已在各領域中被廣泛應用。本文利用ADSP Blackfin533(BF533)為核心處理器,設計了視頻檢測系統,實現了視頻圖像的采集、處理和網絡傳輸,該系統具有體積小、功耗低、性能高、可便攜等優點。
1 系統硬件平臺設計
系統工作原理:由圖像傳感器采集到的圖像信號以YUV(4:2:2)的格式輸出,通過BF533的PPI接口以DMA方式存入SDRAM。當采集完一幀數據后,BF533從SDRAM中讀入數據進行位圖數據格式轉化,將位圖圖像數據通過以太網接口傳輸到遠程PC機上,然后系統繼續采集下一幀圖像。
1.1 處理器
Blackfin處理器是ADI公司與Intel公司2003年4月聯合開發的體現高性能體系結構的首款第四代DSP產品,主要面向嵌入式音頻、視頻和通信等領域。ADSP-BF533是目前Blackfin系列數字信號處理器中性能較高的一款,具有600MHz的主頻、雙16位的MAC(乘加器)和兩個40位的ALU(算術邏輯單元)、四個8位的視頻處理單元、八個算術寄存器、10個地址尋址單元,并且集成了大量的外圍設備和存儲器接口,每秒運算速度最高達到1200MMAC(兆次乘法加法運算),并且ADSP-BF533在達到600MHz性能水平時的功耗僅為280mW,能耗很小。在圖像處理上的優點更為突出,可針對圖像特點運用二維DMA傳輸數據,大大加快和方便圖像數據的傳送和處理。ADSP-BF533系列DSP具有接口豐富,性能優良,更具有視頻處理接口及獨立的視頻指令,特別適用于各種音視頻、網絡設備領域,充分滿足了系統技術指標的要求,在實際中獲得了廣泛的應用。
1.2 圖像傳感器
美國Omnivision公司的彩色圖像傳感器OV7660具有30萬像素,芯片的像素陣列達到1300x1280,具有高靈敏度采光、低功耗電源供電等特點且功耗低、體積小,在攝像手機、網絡視頻等方面應用比較廣泛。通過先進的傳感器技術,還可以通過減少或者消除圖像瑕玷中的普通光/電資源(如固定樣式噪音(FPN)、拖尾效應、閃光等)來產生比較清晰、完全、穩定的彩色圖像。對于本系統來說,是一種很好的選擇。
0V7660圖像傳感器,內置自動曝光控制(AEC)、自動增益控制(AGC)、自動白平衡(AWB)等功能,支持SXGA、VGA、QVGA、QQVGA、CIF、QCIF和QQCIF,可輸出RGB、YUV和YCbCr等多種視頻數據格式。0V7660通過一個專用的Camera InteRFace接口與核心處理芯片BF533的PPI接口連接,接口電路如圖1所示。
?
為使芯片正常上作,需要通過串行視頻控制總線(SCCB)總線來配置OV7660的內部寄存器,使芯片輸出格式正確的彩色圖像數據。
1. 3 系統硬件結構
要完成系統的功能,除了處理器和圖像采集模塊,通過B1ackfin533的豐富接口,在開發過程中還要用到以下模塊。
(1)SDRAM模塊為系統提供內核運行、程序運行、數據緩存的空間;
(2)FLASH模塊為系統提供存儲空間;
(3)系統調試、移植、交叉編譯、需要UART接口和JTAG調試接口;
(4)圖像數據的網絡傳輸需要以太網接口。
當然系統還應有電源模塊、系統復位電路、時鐘模塊等,系統硬件結構如圖2。
?
2 系統的軟件設計
系統的軟件部分包括三部分,嵌入式uClinux(操作系統,圖像傳感器0V7660和網絡控制器CS8911A的驅動程序,系統的應用程序。
2.1 嵌入式uClinux操作系統
本系統采用開源、可剪裁、安全性和實時性好的嵌入式uClinux操作系統作為軟件開發平臺,保證了系統的穩定性和數據的快速準確傳輸,并提供了完善的網絡支持。uClinux并為應用程序的設計提供了眾多API接口函數,方便了編程實現過程。
嵌入式uClinux系統是由Boot Loader引導程序、系統內核、根文件系統組成。軟件交叉編譯環境為Windows系統下的coLinux,該操作環境具有模擬uClinux操作系統的功能,在擁有colinux環境的基礎上,選擇合適的開發工具可以加快開發速度,節省開發成本。軟件編程語言為標準C語言,具有良好的可移植性。
2.2 OV7660和CS8911A驅動程序
Blackfin533 uClinux kernel中帶有一些硬件驅動模塊,縮短了開發周期。系統上電后,將自動檢測視頻設備OV7660,視頻設備被檢測到后,將自動調用在配置內核時已經加載到uClinux中的OV7660的驅動程序模塊PPI_ov7660。
圖像數據的網絡傳輸在Linux的平臺上采用服務器/客戶端模型,網絡控制器CS8911A的驅動程序因為已經很成熟了并且對外公開,直接采用了開發好并已經移植到uClinux內核中的設備驅動程序。
2.3 系統應用軟件設計
本系統的應用軟件設計分為圖像采集設備初始化、數據格式轉化和圖像的捕捉三部分。視頻圖像采集的程序流程圖如圖3。
?
2.3.1 圖像采集設備初始化
對于uClinux操作系統,它將設備看作文件,因此,想對設備進行讀寫等操作,應首先打開設備,完成操作后再關閉設備。設備文件的初始化主要針對PPI的/dev/ppifcd設備。本系統可以從4個步驟進行。
(1)打開視頻設備 利用open()函數實現打開PPI視頻設備。
fd_ppi=open(“/dev/ppifcd”,O_RDWR)
fd_ppi為設備文件描述符。
(2)獲取設備信息 利用相應的ioctl()函數取得設備文件的相關信息,包含設備的基本信息參數(設備名稱、支持的最大最小分辨率、信號源信息等);
ioctl(fd_ppi,CMD_PPI_GET_VIDEOIN,&video_in)
(3)獲取影像信息 利用相應的ioctl()函數取得影像支持信息,包含設備采集圖像的各種屬性參數(色調、亮度、飽和度、對比度、色相等);
ioctl(fd_ppi,CMD_PPI_SET_0V7660,&pictures)
(4)關閉視頻設備利用close()函數關閉PPI視頻設備。
if(fd_ppi)close(fd_ppi);
2.3.2 數據格式的轉化
本系統開始采集攝像頭數據,將數據轉化為YUV420格式,在PC上顯示的時候采用的是RGB565格式,因此在采集完畢之后必須進行圖像數據的格式轉換。
RGB與YUV之間可以相互轉化,對應關系如下:
?
其反變化公式如下
?
根據上述關系可以通過編程實現數據格式的轉化。
2.3.3 圖像的捕捉
在PPI_ov7660中采用直接讀取的方法,直接讀取方法比較簡單,通過調用read()函數,將輸入的圖像數據復制到內核緩沖區中,就可以實現對每幀圖像的讀取。過程如下:
(1)通過調用函數malloc()為采集的圖像數據分配內存;
in_buff=(unsigned char*)malloc(IMG_SIZE)
(2)通過調用read()函數將前端采集的圖像數據讀到in_buf中;
Fd=read(fd_ppi,in_buff,IMG_SIZE)
(3)通過調用write()函數將內存中的圖像數據寫到創建的一個file里。
fd=fopen(“pic”,“wb”)fwrite(in_buff,l,nOutputBytes,fd)
3 圖像的網絡傳輸與顯示
在uClinux平臺上采用服務器/客戶端模型通過建立TCP套接字來實現網絡的連接,本系統通過基于TCP協議的socket編程,完成了圖像數據的發送和客戶端的接收程序。流程圖如圖4所示。
?
以網絡上PC機為客戶端,用VC編寫圖像顯示界面。把服務端采集的圖像傳送至接收端,如圖5所示。實驗表明,系統每秒采集15幀圖像,沒有停頓感,滿足實時性要求。
?
本系統以B1ackfin533為數據處理核心,依托數字圖像處理技術和DMA技術,并通過以太網與上位機通信進行數據傳輸,完成了一個完整的視頻監測系統。其設計特點為結構簡單、體積小、功耗低、圖像分辨率高、成本低廉、結合網絡布線。本系統滿足實時行要求,具有很大的應用前景。
評論
查看更多