基于DSP/ARM的網(wǎng)絡(luò)硬盤錄像機(jī)的設(shè)計方案
在本設(shè)計中,硬盤控制器芯片使用Silicon Image公司的SiI3512雙口SATA 控制器來實(shí)現(xiàn)SATA 功能。
SiI3512 直接掛載在S3C2510 的PCI 總線上為系統(tǒng)提供SATA 接口。連接方式如圖2 所示:
圖2 SiI3512 與S3C2510 的連接方式。
2.4 電源模塊
2.4.1 供電電路
整個電路板采用+5 V 電壓供電,可以從外部引入,也可以從擴(kuò)展的PCI 接口引入。DM642 芯片需要2 個獨(dú)立的電壓,CPU 內(nèi)核電壓GVDD(+1.4 V)和外圍I/O 電壓DVDD(+3.3 V)。這兩個電壓在供電時需要嚴(yán)格按照順序進(jìn)行,即GVDD 要比DVDD 上電早,至少不能晚于DVDD.設(shè)計中采用2 片TI 公司專為高性能DSP、FPGA、ASIC 和微處理器的應(yīng)用而設(shè)計的電源芯片TPS54310,分別給DM642 提供CVDD 和DVDD 電壓。在電路連接上將TPS54310(1)的PWRGD引腳和TPS54310(2)的SS/EN引腳相連。
當(dāng)(1)的輸出電壓高于1.2 V 時,芯片(2)開始工作;當(dāng)這個值達(dá)到穩(wěn)定的+1.4 V 后,PWRGD 引腳輸出高電平送到芯片(2)的SS/EN 引腳。這就保證了CPU 內(nèi)核的上電時間早于I/O 的上電時間,如圖3 所示:
圖3 電源電路。
2.4.2 電源監(jiān)測電路
為了保證DM642 芯片在電源未達(dá)到要求的電平時,不會產(chǎn)生不受控制的狀態(tài),而且允許系統(tǒng)中的各個芯片在任意時刻可以通過復(fù)位來調(diào)整工作狀態(tài),這就需要在系統(tǒng)中加入一個電源監(jiān)測電路,.該電路能確保在系統(tǒng)的加電過程中,CVDD 和DVDD 達(dá)到要求的電平之前,DSP 始終處于復(fù)位狀態(tài)。選用了TI 公司生產(chǎn)的TPS3823-33 芯片,其固定復(fù)位信號時間長達(dá)200 ms,能滿足系統(tǒng)中所有芯片的復(fù)位需求。芯片帶有一個看門狗電路,通過WDI 引腳接收來自CPU 的定時信號,避免發(fā)生系統(tǒng)程序跑飛的情況。
3 系統(tǒng)的軟件設(shè)計
3.1 系統(tǒng)的軟件設(shè)計
該系統(tǒng)的軟件主要包括三個部分:啟動程序,內(nèi)核與根文件系統(tǒng),專業(yè)芯片驅(qū)動及應(yīng)用。為了開發(fā)和升級的方便,我們將根文件系統(tǒng)作成RAMDISK 的格式。據(jù)此我們將FlashROM 分為3 個區(qū):1 Cramfs,2 Boot-Loader,3 Kernel+RAMDISK.本系統(tǒng)的啟動程序用的是DENX 的U-boot-1.1.0.它的主要工作是初始化硬件,為加載操作系統(tǒng)準(zhǔn)備必要的環(huán)境及其參數(shù),同時可以與開發(fā)主機(jī)通訊,下載程序到SDRAM 和Flash.通過修改它的一些配置文件,可以完成對目標(biāo)系統(tǒng)Memory Controller,memory map以及I/O,PCI,Flash,Ethernet controller,Serial等硬件設(shè)施的初始化。
對于芯片驅(qū)動程序的編寫,一些通用設(shè)備驅(qū)動,如以太網(wǎng)卡驅(qū)動已經(jīng)在內(nèi)核中,對于系統(tǒng)的一些專業(yè)芯片的驅(qū)動由于其特殊性,將其和應(yīng)用做成Cramfs文件系統(tǒng)格式,在目標(biāo)板的的操作系統(tǒng)啟動時以module 的形式進(jìn)行加載,方便修改和升級。編寫驅(qū)動程序可以按照Linux 下編寫驅(qū)動程序的規(guī)則來編寫。編寫的驅(qū)動程序應(yīng)該具有以下功能:a)對設(shè)備的初始化和釋放:b)數(shù)據(jù)從內(nèi)核傳到硬件和從硬件讀取數(shù)據(jù):c)讀取應(yīng)用程序傳遞給設(shè)備文件的數(shù)據(jù)和回應(yīng)應(yīng)用程序請求的數(shù)據(jù):d)檢測和處理設(shè)備出現(xiàn)的錯誤。
設(shè)備驅(qū)動程序的實(shí)質(zhì)就是中斷處理。Linux 中斷處理程序分為上半部和下半部。上半部即一般的中斷服務(wù)程序, 由硬件中斷觸發(fā),一般運(yùn)行在關(guān)中斷的方式下,應(yīng)當(dāng)盡可能的短小,處理盡可能的快:下半部運(yùn)行在開中斷和任務(wù)串行化的環(huán)境下,處理需要較長時間的任務(wù)。驅(qū)動程序上半部在處理完實(shí)時性很強(qiáng)的任務(wù)后,用Queue-task 函數(shù)將下半部處理函數(shù)掛入立即隊(duì)列,用mark-bh 函數(shù)來激活立即隊(duì)列,下半部就可以最優(yōu)先的被執(zhí)行。
3.2 應(yīng)用程序的設(shè)計
應(yīng)用程序的設(shè)計可以采用多線程或者多進(jìn)程的方式。多線程的優(yōu)點(diǎn)在于線程比進(jìn)程要小,可以使應(yīng)用更輕量,線程間通訊方便,缺點(diǎn)就在于由于線程使用同一個地址空間,如果一個線程出了問題,將可能影響到整個系統(tǒng);多進(jìn)程各自占有一份內(nèi)存空間,因此可以增強(qiáng)系統(tǒng)的健壯性,但是多進(jìn)程增加了系統(tǒng)的開銷,同時進(jìn)程間通訊較復(fù)雜。結(jié)合我們系統(tǒng)的實(shí)際,考慮到各個線程通訊的重要性,我們采取多進(jìn)程多線程的方式,在軟件上增加一個與主進(jìn)程并行的守護(hù)進(jìn)程,在硬件上設(shè)置看門狗,以增強(qiáng)系統(tǒng)的健壯性。
4 遠(yuǎn)程控制與通信鏈路的建立
本設(shè)計采用PPP 串行通信接口協(xié)議方式。PPP(PointtoPointProtocal,點(diǎn)對點(diǎn)協(xié)議)協(xié)議中包含3 個部分:
在串行鏈路上封裝IP 數(shù)據(jù)報的方法;建立、配置及測試數(shù)據(jù)鏈路的鏈路控制協(xié)議(LCP);不同網(wǎng)絡(luò)層協(xié)議的網(wǎng)絡(luò)控制協(xié)議(NCP)。PPP 具有很多優(yōu)勢;支持循環(huán)冗余檢測、支持通信雙方進(jìn)行IP 地址動態(tài)協(xié)商、對TCP 和IP 報文進(jìn)行壓縮、認(rèn)證協(xié)議支持(CHAP 和PAP)等。
PPP 的實(shí)現(xiàn)可以通過2 個后臺任務(wù)來完成,協(xié)議控制任務(wù)和寫任務(wù)。協(xié)議控制任務(wù)控制各種PPP的控制協(xié)議,包括LCP、NCP、CHAP 和PAP.它用來處理連接的建立、連接方式的協(xié)商、連接用戶的認(rèn)證以及連接中止。寫任務(wù)用來控制PPP 設(shè)備的數(shù)據(jù)發(fā)送。數(shù)據(jù)報的發(fā)送過程,就是通過寫任務(wù)往串行接口設(shè)備寫數(shù)據(jù)的過程,當(dāng)有數(shù)據(jù)報準(zhǔn)備就緒,PPP 驅(qū)動通過信號燈激活寫任務(wù),使之完成對串行接口設(shè)備的數(shù)據(jù)發(fā)送過程。PPP 接收端程序通過在串行通信設(shè)備驅(qū)動中加入hook程序來實(shí)現(xiàn)。在串行通信設(shè)備接收到1 個數(shù)據(jù)之后,串行設(shè)備的中斷服務(wù)程序(ISR)調(diào)用PPP 的ISR.當(dāng)1 個正確的PPP數(shù)據(jù)幀接收之后,PPP 的ISR 通過調(diào)度程序調(diào)用PPP輸入程序,然后PPP 輸入程序從串行設(shè)備的數(shù)據(jù)緩存中將整個PPP 數(shù)據(jù)幀讀出,根據(jù)PPP 的數(shù)據(jù)幀規(guī)則進(jìn)行處理,也就是分別放入IP 輸入隊(duì)列或者協(xié)議控制任務(wù)的輸入隊(duì)列。
5 總結(jié)
我們采用ARM 和DSP 芯片的雙核結(jié)構(gòu)組建了一種網(wǎng)絡(luò)視頻服務(wù)器。以DM642 和S3C2510 分別作為視頻板和主機(jī)板的核心芯片,H.264 作為視頻壓縮方案,操作系統(tǒng)選用了uclinux.本系統(tǒng)充分利用了ARM 和DSP 的各自特點(diǎn),充分發(fā)揮ARM 的事件處理控制能力和DSP 對數(shù)字視頻大吞吐量要求,同時通過優(yōu)選主要芯片,努力提高整機(jī)性價比。本系統(tǒng)可同時輸入16 路視頻信號,在保障視頻質(zhì)量的前提下,適于當(dāng)前不同帶寬的網(wǎng)絡(luò)要求。
評論