一種DSP的遠(yuǎn)程多加載方案設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
芯片的燒寫與自加載是一個(gè)DSP系統(tǒng)能夠順利運(yùn)行的基本條件。在DSP加載技術(shù)方面已經(jīng)有大量文獻(xiàn)和工作成果,比較好地解決了DSP自加載方面的許多基本問題。而傳統(tǒng)的燒寫/加載方案在調(diào)試、更新程序時(shí)需要反復(fù)外接仿真器,配置跳線,并且只能加載運(yùn)行指定地址空間上的工程。這些對(duì)處于安裝調(diào)試階段的系統(tǒng)影響不大,但在諸如航天設(shè)備、大型機(jī)械或其他惡劣環(huán)境中工作,難以直接進(jìn)行仿真器連接的DSP系統(tǒng)中,無法采用普通的燒寫/加載方案對(duì)其進(jìn)行更新和調(diào)試。
通過分析DSP系統(tǒng)加載原理,提出了一種基于TI公司C6x芯片的遠(yuǎn)程多加載DSP系統(tǒng)設(shè)計(jì)。該系統(tǒng)由通信芯片、DSP、外部動(dòng)態(tài)存儲(chǔ)器、外部閃存(Flash)共同組成,具備遠(yuǎn)程燒寫、程序選擇加載功能。系統(tǒng)程序更新時(shí)也具備很高的安全性,即使燒寫過程中斷電,下次上電后仍然可以繼續(xù)燒入、運(yùn)行新的工程。
1 系統(tǒng)結(jié)構(gòu)
為了滿足功能設(shè)計(jì)需求,加載與燒寫系統(tǒng)除了包括DSP系統(tǒng)運(yùn)行必需的DSP芯片之外,還需要連接外部動(dòng)態(tài)存儲(chǔ)器(SDRAM)、可擦除存儲(chǔ)器(Flash)、通信芯片等。系統(tǒng)結(jié)構(gòu)如圖1所示。其中,通信芯片負(fù)責(zé)與遠(yuǎn)程控制端進(jìn)行數(shù)據(jù)交換,SDRAM中存放DSP工作用代碼和數(shù)據(jù),而負(fù)責(zé)引導(dǎo)實(shí)際工作工程的“引導(dǎo)工程”和負(fù)責(zé)實(shí)際信息處理任務(wù)的“工作工程”代碼數(shù)據(jù)分別存放于不同的Flash空間。
2 實(shí)現(xiàn)方案
首先簡(jiǎn)要說明C6x系列DSP的普通二次加載工程的引導(dǎo)原理。自加載模式的DSP上電初始時(shí),會(huì)從CE1空間起始地址(0x90000000)開始拷貝一定長(zhǎng)度(C671x系列為1 KB)的數(shù)據(jù)到內(nèi)部存儲(chǔ)器0地址,并從0地址開始執(zhí)行程序。由于拷貝數(shù)據(jù)長(zhǎng)度有限,通常情況下一個(gè)長(zhǎng)度大于1 KB的自加載工程需要進(jìn)行二次加載操作,因此該工程必須包含一個(gè)長(zhǎng)度小于1 KB的Bootloader模塊,該模塊由進(jìn)行二次加載數(shù)據(jù)搬移操作的代碼構(gòu)成。工程編譯完成后,Bootloader模塊被燒寫在Flash最開頭的1 KB地址空間內(nèi),系統(tǒng)上電復(fù)位后由DSP自動(dòng)搬運(yùn)到0~1 KB地址空間內(nèi)執(zhí)行(第一次加載),并由該模塊進(jìn)行其他數(shù)據(jù)段的數(shù)據(jù)搬移(第二次加載)。在數(shù)據(jù)搬移結(jié)束后Bootloader模塊將PC指針跳轉(zhuǎn)到_c_int00地址段,并最終進(jìn)入主函數(shù),開始整個(gè)工程的運(yùn)行。整個(gè)自加載過程如圖2所示。
顯然,只有存放在DSP CE1空間最前端的數(shù)據(jù)才能被自動(dòng)加載和運(yùn)行。為了使系統(tǒng)上電時(shí)刻就具備通信、燒寫和多引導(dǎo)功能,需要將具備上述功能的引導(dǎo)工程存放在CE1基地址開始的空間。
DSP多引導(dǎo)技術(shù)正是在普通DSP系統(tǒng)的加載技術(shù)基礎(chǔ)上發(fā)展而來的,將具備引導(dǎo)、通信、燒寫、存儲(chǔ)器檢糾錯(cuò)功能的工程作為引導(dǎo)工程獨(dú)立存儲(chǔ)在DSP CE1空間,由DSP自動(dòng)加載運(yùn)行;而將具備不同功能的應(yīng)用程序代碼分別存儲(chǔ)在其他存儲(chǔ)器,等待引導(dǎo)工程根據(jù)功能需要去加載。
引導(dǎo)工程由DSP自動(dòng)運(yùn)行,隨后根據(jù)遠(yuǎn)程指令或按預(yù)定程序流程的執(zhí)行通信、更新工作工程代碼,或搬運(yùn)并運(yùn)行存儲(chǔ)在其他空間工作工程內(nèi)的Bootloader段,從而引導(dǎo)不同功能的工作工程運(yùn)行。借助這種工程分離運(yùn)行技術(shù),可以通過遠(yuǎn)程端或自動(dòng)對(duì)空間電子設(shè)備存儲(chǔ)器中的代碼進(jìn)行更新、檢糾錯(cuò)和加載操作,甚至進(jìn)行多個(gè)工作工程的切換以滿足不同應(yīng)用背景下的功能需求;即使在更新或切換過程中出現(xiàn)故障,系統(tǒng)復(fù)位后仍可回到正常工作的引導(dǎo)工程中進(jìn)行系統(tǒng)維護(hù)或重新更新,具備防燒寫功能。[!--empirenews.page--]
2.1 引導(dǎo)工程設(shè)計(jì)
引導(dǎo)工程是負(fù)責(zé)與遠(yuǎn)程控制端通信,獲取工作工程代碼并完成燒寫、引導(dǎo)工作工程加載運(yùn)行的程序。引導(dǎo)工程需要具備自加載、上傳校驗(yàn)數(shù)據(jù)、燒寫引導(dǎo)等功能。
2.1.1 自加載功能
引導(dǎo)工程采用普通工程的加載/燒寫方式,需要在產(chǎn)品生產(chǎn)完成后以仿真器模式進(jìn)行燒寫固化。由于引導(dǎo)工程具備需要通信、燒寫等功能,其數(shù)據(jù)長(zhǎng)度一般來說會(huì)超出1KB的DSP自動(dòng)搬移長(zhǎng)度限制,所以系統(tǒng)中的引導(dǎo)工程首先需要設(shè)計(jì)成一個(gè)具有二次加載能力的工程,并燒寫在DSP存儲(chǔ)器CE1空間的最前端,確保DSP在自動(dòng)引導(dǎo)時(shí)首先加載和運(yùn)行的是引導(dǎo)工程。
在設(shè)計(jì)引導(dǎo)工程自加載功能時(shí),與普通二次加載工程相比有所不同:
①程序存儲(chǔ)地址要加以限制,避免占用工作工程空間;
②引導(dǎo)工程的Bootloader必須放置在CE1空間的最開頭1 KB內(nèi),使DSP能夠在上電時(shí)自動(dòng)加載運(yùn)行。
2.1.2 通信功能
通信模塊主要由通信芯片和通信控制邏輯組成,負(fù)責(zé)完成遠(yuǎn)程控制端與DSP之間的通信。根據(jù)不同應(yīng)用場(chǎng)合,可以選擇不同的通信芯片與鏈路協(xié)議。下面主要考慮應(yīng)用層協(xié)議設(shè)計(jì)。
(1)數(shù)據(jù)上傳與校驗(yàn)
按照參考文獻(xiàn)中的方法,為了將工作工程在線燒寫到Flash存儲(chǔ)空間中,首先需要下載編譯工程文件,并轉(zhuǎn)換為可燒寫的.hex文件。通過通信模塊,遠(yuǎn)端設(shè)備可以將hex文件發(fā)送并存儲(chǔ)在DSP外部存儲(chǔ)器中。錯(cuò)誤的hex文件數(shù)據(jù)可能導(dǎo)致在引導(dǎo)工作工程時(shí)DSP工作異常,甚至完全無法正常加載,因此遠(yuǎn)程端完成數(shù)據(jù)上傳后應(yīng)對(duì)保存的數(shù)據(jù)進(jìn)行校驗(yàn)。比較直觀的方法是通過通信接口將DSP收到的數(shù)據(jù)回傳,遠(yuǎn)端設(shè)備將此數(shù)據(jù)與原始.hex文件進(jìn)行比較,以確定數(shù)據(jù)是否正確。
(2)燒寫指令
完成數(shù)據(jù)校驗(yàn)后,遠(yuǎn)程端向DSP發(fā)送燒寫指令,開始燒寫。
(3)引導(dǎo)指令
若需要根據(jù)功能運(yùn)行相應(yīng)的工作工程,則由遠(yuǎn)程端向DSP發(fā)出不同的引導(dǎo)指令,引導(dǎo)對(duì)應(yīng)地址的工作工程運(yùn)行。根據(jù)DSP自動(dòng)加載原理,引導(dǎo)工程需按同樣的步驟進(jìn)行。
引導(dǎo)工程的通信功能可以以中斷或查詢的方式進(jìn)行。如果以中斷方式進(jìn)行,需要妥善處理中斷向量表和使能對(duì)應(yīng)中斷。在引導(dǎo)工程退出時(shí),必須關(guān)閉所使用的通信端口和中斷資源。
2.1.3 在線燒寫功能
早期DSP系統(tǒng)為了使用非易失性存儲(chǔ)芯片保存數(shù)據(jù),必須使用專用燒錄設(shè)備進(jìn)行。隨著存儲(chǔ)技術(shù)與控制技術(shù)的進(jìn)步,部分DSP芯片已經(jīng)具備對(duì)直連Flash芯片進(jìn)行擦除和寫入的能力。
由于引導(dǎo)工程與工作工程共享一片F(xiàn)lash存儲(chǔ)介質(zhì),在擦除工作工程的存儲(chǔ)空間時(shí),需要采用扇區(qū)擦除而不是整片擦除,以確保引導(dǎo)工程不會(huì)被改寫。也可以通過對(duì)其所在扇區(qū)寫保護(hù)的方法來實(shí)現(xiàn)對(duì)引導(dǎo)工程的保護(hù)。寫保護(hù)操作可以確保無論對(duì)工作工程的燒寫是否成功,引導(dǎo)工程在第一次成功燒錄后將會(huì)一直駐留在Flash芯片中,每次上電時(shí)都可以進(jìn)行通信、燒寫和引導(dǎo)工作。
在某些對(duì)設(shè)備可靠性要求嚴(yán)格的場(chǎng)合,也可將引導(dǎo)工程單獨(dú)存放在一片PROM中,在一次燒寫固化完成后,引導(dǎo)工程所在空間將不可再修改。這樣可以完全避免使用Flash芯片反復(fù)擦寫引起的存儲(chǔ)器性能下降,以及在燒寫工作工程時(shí)誤擦除引導(dǎo)工程的問題。
燒寫流程與擦除流程類似,可以參照參考文獻(xiàn)中的說明設(shè)計(jì)。
2.1.4 加載引導(dǎo)功能
當(dāng)完成了對(duì)工作工程文件的燒寫之后,需要根據(jù)遠(yuǎn)程控制端指令引導(dǎo)工作工程開始工作。根據(jù)DSP自加載的原理,引導(dǎo)工程必須首先將所有已使用的DSP資源關(guān)閉,并將Flash存儲(chǔ)器其他空間內(nèi)工作工程的Bootloader程序拷貝到DSP內(nèi)部存儲(chǔ)器0地址起始的空間內(nèi)(這一過程模擬了圖2所示DSP自動(dòng)加載時(shí)的數(shù)據(jù)搬移),然后將程序指針跳轉(zhuǎn)到工作工程的Bootloader起始地址,開始運(yùn)行。由工作工程的Bootloader程序?qū)⒄麄€(gè)工作工程剩余數(shù)據(jù)段依次加載到DSP的動(dòng)態(tài)存儲(chǔ)器中,最后跳轉(zhuǎn)到工作工程的起始地址,開始執(zhí)行工作工程的主程序段。
由引導(dǎo)工程進(jìn)行引導(dǎo)的好處在于:DSP只能自動(dòng)加載CE1空間起始段的數(shù)據(jù),而用戶設(shè)計(jì)的引導(dǎo)工程可以加載任意可讀存儲(chǔ)空間內(nèi)的數(shù)據(jù);DSP只能在上電時(shí)刻加載程序,而引導(dǎo)工程可以在任意時(shí)刻轉(zhuǎn)換加載不同的應(yīng)用工程程序。
2.2 工作工程設(shè)計(jì)
工作工程是用來完成DSP系統(tǒng)真正信息處理需求的工程,它的設(shè)計(jì)與普通的二次加載DSP工程基本原理一致,但需要針對(duì)雙二次加載功能做幾個(gè)方面調(diào)整:
①存儲(chǔ)器設(shè)置。由于可以復(fù)用引導(dǎo)工程所使用的所有外部設(shè)備和RAM,在工作工程中配置存儲(chǔ)器空間時(shí)只需要保留引導(dǎo)工程使用的Flash地址空間,其他所有引導(dǎo)工程使用的存儲(chǔ)器在正常工作前都可以重置。
②ISTP(Interrupt Service Table Pointer,中斷服務(wù)指針寄存器)設(shè)置。每一個(gè)工程都有獨(dú)立的中斷向量表,因而進(jìn)行工程切換時(shí)需要重置中斷向量服務(wù)指針,以確保新的工程能正確地響應(yīng)中斷。
③其他資源設(shè)置。為了簡(jiǎn)化操作、節(jié)省資源,引導(dǎo)工程中應(yīng)盡可能少占用DSP資源。除上述存儲(chǔ)器和中斷資源外,引導(dǎo)功能可能會(huì)用到定時(shí)器、MCBSP、EDMA等其他資源。在引導(dǎo)工作工程之前,需要全部關(guān)閉這些設(shè)備;同時(shí),進(jìn)入工作工程后需要重新初始化這些外設(shè)資源,避免發(fā)生設(shè)備使用沖突。
結(jié)語
通過分析、利用DSP加載運(yùn)行機(jī)制,本文設(shè)計(jì)了一種具備遠(yuǎn)程更新能力的多加載DSP系統(tǒng)。利用通信接口遠(yuǎn)程更新程序代碼,并將不同功能的DSP工程燒錄在同一Flash芯片中,并可以通過外部通信指令選擇不同功能的程序運(yùn)行,使得DSP系統(tǒng)能靈活、安全地更新和運(yùn)行。
遠(yuǎn)程多引導(dǎo)DSP方案在不改變系統(tǒng)整體框架的前提下,以較少的系統(tǒng)資源占用完成了遠(yuǎn)程在線DSP代碼燒錄和引導(dǎo)操作的功能設(shè)計(jì),同時(shí)由于采用了引導(dǎo)工程、工作工程分離的做法,具備較強(qiáng)的魯棒性。該系統(tǒng)具有燒寫免拆卸、防燒死等優(yōu)良特性,在航天、機(jī)械、控制系統(tǒng)設(shè)計(jì)中可以廣泛使用。