楊磊 張瑩
摘要:介紹了TI生產(chǎn)的多核DSP TMS320C6678的啟動(dòng)過程,詳細(xì)講解了其內(nèi)置啟動(dòng)程序RBL提供的幾種常用啟動(dòng)方式,并從應(yīng)用場(chǎng)景,硬軟件設(shè)計(jì)等多個(gè)方面分析了各方式的優(yōu)劣。提出了一種基于EMIF16接口的添加引導(dǎo)服務(wù)程序的多級(jí)引導(dǎo)模式,能夠很好的擴(kuò)展C6678二級(jí)引導(dǎo)程序的功能。
關(guān)鍵詞:C6678;EMIF16;RBL;二級(jí)引導(dǎo);自啟動(dòng)
中圖分類號(hào):TP13 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)01-0054-02
0 引言
在當(dāng)今數(shù)字化不斷加快的背景下,各信號(hào)處理系統(tǒng)對(duì)嵌入式實(shí)時(shí)性要求在進(jìn)一步提高。TI推出的多核DSP TMS320C6678,具有8個(gè)運(yùn)算核心,單核心主頻最高可達(dá)1.25Ghz[1],無論是定點(diǎn)或浮點(diǎn)都具有較高的計(jì)算能力,并且TI為其配套了專用嵌入式實(shí)時(shí)操作系統(tǒng)SYS/BIOS,使該款芯片在軟件設(shè)計(jì)上的難度大大降低。
在實(shí)際應(yīng)用中,應(yīng)用場(chǎng)景復(fù)雜多變,我們可根據(jù)其引導(dǎo)方式將其分成兩類,一類需要主機(jī)將應(yīng)用程序鏡像下載到DSP內(nèi)存并激活DSP運(yùn)行用戶程序。另一類是將用戶程序燒寫在外部存儲(chǔ)器中,上電后由DSP的引導(dǎo)程序完成自加載啟動(dòng)[2-3]。C6678內(nèi)置了一級(jí)引導(dǎo)程序RBL,RBL為用戶提供了多種引導(dǎo)方式以滿足其不同需求。但同時(shí)RBL程序相對(duì)簡(jiǎn)單,無法滿足一些較為復(fù)雜的引導(dǎo)需求,這時(shí)往往需要二級(jí)引導(dǎo)程序的輔助。因此,C6678的啟動(dòng)引導(dǎo)過程常常是由一級(jí)和二級(jí)引導(dǎo)程序共同完成的。
1 C6678啟動(dòng)過程
RBL是廠家固化在其Boot Rom內(nèi)的一段程序,其主要功能是通過判斷DEVSTAT寄存器后三位BOOTMODE[2:0]的狀態(tài)來決定運(yùn)行的Boot代碼。當(dāng)C6678上電后,由內(nèi)部的EDMA將Boot Rom中的代碼搬運(yùn)到Core0的內(nèi)存中執(zhí)行,完成一系列初始化工作。
C6678上電啟動(dòng)的大致過程可描述為:Core0運(yùn)行RBL;RBL根據(jù)BootMode[2:0]運(yùn)行相應(yīng)一級(jí)引導(dǎo)程序;一級(jí)引導(dǎo)程序引導(dǎo)用戶程序啟動(dòng),如有二級(jí)引導(dǎo),則先引導(dǎo)二級(jí)引導(dǎo)程序,由二級(jí)引導(dǎo)程序引導(dǎo)用戶程序啟動(dòng)。
2 C6678常用引導(dǎo)方式
2.1 PCIE Boot
PCIE[4]是一種高速串行總線的擴(kuò)展標(biāo)準(zhǔn),C6678集成了PCIE外設(shè)接口,PCIE啟動(dòng)過程可簡(jiǎn)單描述為:RBL檢測(cè)到BootMode[2:0]的值并初始化PCIE模塊;主機(jī)加載程序在PC與DSP間建立內(nèi)存映射;主機(jī)通過PCIE總線將DDR初始化程序送入Core0 的L2內(nèi)存并初始化DDR;主機(jī)將用戶程序推送至DDR內(nèi)存指定位置,并將入口地址寫入magic地址[5],DSP跳轉(zhuǎn)到magic內(nèi)的入口地址執(zhí)行,并通過IPC中斷通知從核工作。
PCIE啟動(dòng)方式能夠通過PC來控制DSP的啟動(dòng)過程,能很好地與以往采用X86架構(gòu)的工控系統(tǒng)銜接。但該方式也有局限性,例如當(dāng)一個(gè)系統(tǒng)中C6678節(jié)點(diǎn)較多時(shí),PC無法為每個(gè)節(jié)點(diǎn)分配足夠的映射空間,會(huì)導(dǎo)致主機(jī)系統(tǒng)無法啟動(dòng)。此時(shí)需借助二級(jí)引導(dǎo)程序來降低RBL中為C6678設(shè)置的BAR空間大小,以保證PC順利完成PCIE枚舉過程。
2.2 Ethernet Boot
以太網(wǎng)啟動(dòng)是主機(jī)將用戶鏡像通過以太網(wǎng)下載到C6678的內(nèi)存中啟動(dòng)的一種方式。這里的主機(jī)可以是具有以太網(wǎng)功能的PC,ARM芯片或PowerPC芯片。以太網(wǎng)啟動(dòng)雖然通用性較強(qiáng),但由TI提供的主機(jī)加載程序以及RBL內(nèi)置的以太網(wǎng)加載代碼功能較為簡(jiǎn)單,而操作起來又比較復(fù)雜。因此在實(shí)際應(yīng)用中通常是通過二級(jí)引導(dǎo)程序來擴(kuò)展以太網(wǎng)啟動(dòng)功能。
2.3 SRIO Boot
SRIO[6]是一種高速串行接口標(biāo)準(zhǔn),與PCIE相比,靈活性更強(qiáng)。SRIO節(jié)點(diǎn)可通過對(duì)方的Srio ID直接讀寫其內(nèi)存數(shù)據(jù)。SRIO引導(dǎo)過程可以描述為:RBL檢測(cè)BootMode[2:0]的值并初始化芯片的SRIO模塊,設(shè)置SRIO模塊的Srio ID,連接模式等;主機(jī)將DDR初始化程序下載到Core0 L2內(nèi)存中并完成DDR初始化工作;主機(jī)將用戶程序鏡像通過SRIO總線寫入DSP的DDR內(nèi)存中,并改寫Magic地址;Core0根據(jù)Magic地址跳轉(zhuǎn)執(zhí)行用戶程序,并通過IPC中斷喚醒從核工作。
與PCIE引導(dǎo)相比,SRIO具有硬件結(jié)構(gòu)靈活,軟件設(shè)計(jì)簡(jiǎn)單等特點(diǎn),但PC機(jī)并沒有擴(kuò)展SRIO接口,因此,通常是采用另一片C6678或PowerPC等集成了SRIO模塊的芯片作為主機(jī)加載平臺(tái),這就在一定程度上限制了SRIO 啟動(dòng)方式的使用范圍。
3 Nor Flash引導(dǎo)服務(wù)程序
與上面介紹的幾種boot 方式不同,在大多工程應(yīng)用中,我們需要將用戶程序固化在EMIF16接口的外掛Nor Flash存儲(chǔ)器中,由DSP自動(dòng)完成加載過程。Nor Flash的特性決定了程序可直接在其中運(yùn)行,但為了提高運(yùn)行速度,往往將程序搬移到DDR內(nèi)。TI的EVM板及薛志遠(yuǎn)等人[7]提出的方法都是在引導(dǎo)程序后直接添加用戶代碼,功能單一。
為解決普通Nor Flash引導(dǎo)功能單一的問題,我們?cè)诙?jí)引導(dǎo)代碼后增加了引導(dǎo)服務(wù)程序。此服務(wù)程序主要通過軟件方式完成DSP參數(shù)設(shè)置,引導(dǎo)方式選擇等功能??稍诖朔?wù)代碼中增加以太網(wǎng)啟動(dòng),SRIO啟動(dòng),PCIE啟動(dòng)以及自啟動(dòng)服務(wù)模塊。增加了引導(dǎo)服務(wù)程序后的完整啟動(dòng)流程如圖1所示。
通過引導(dǎo)服務(wù)程序,可以用串口更改保存在Flash保留區(qū)域并且與啟動(dòng)相關(guān)的環(huán)境變量。隨后根據(jù)人為設(shè)置的環(huán)境變量選擇啟動(dòng)加載模式,經(jīng)測(cè)試,此方式大大增加了C6678啟動(dòng)方式的靈活性。
4 結(jié)語(yǔ)
通過對(duì)C6678啟動(dòng)方式的分析,本文中提出了一種基于EMIF16接口的引導(dǎo)設(shè)計(jì)方案,增加了引導(dǎo)程序的通用性。但是目前而言,DSP端的引導(dǎo)程序并不能做到完全復(fù)用,大部分是根據(jù)實(shí)際功能進(jìn)行定制。因此,設(shè)計(jì)一個(gè)能夠滿足各種應(yīng)用需求,類似于Uboot的開源DSP BootLoader將是今后研究的重點(diǎn),這將大大降低DSP嵌入式軟件的開發(fā)成本,促進(jìn)DSP在我國(guó)軍事和民用高速信號(hào)處理系統(tǒng)中的應(yīng)用和發(fā)展。
參考文獻(xiàn)
[1] 牛金海.TMS320C66x KeyStone架構(gòu)多核DSP入門與實(shí)例精解[M].上海:上海交通大學(xué)出版社,2014.
[2] 孫紅磊,蔡雨琦,施鎮(zhèn)峰.TMS320C6678 DSP的加載引導(dǎo)研究[J].微型機(jī)與應(yīng)用,2015,34(24):73-75.
[3] 黃震,劉亞斌.TMS320C6000系列DSP程序固化的研究[J].電子設(shè)計(jì)工程,2016,24(12):26-28+32.
[4] 樂亮.新一代多核DSP-TMS320C6678的PCIE接口驅(qū)動(dòng)設(shè)計(jì)[A]. 第六屆全國(guó)信號(hào)和智能信息處理與應(yīng)用學(xué)術(shù)會(huì)議論文集[C],2012:4.
[5] 李飛平,卿粼波,滕奇志,舒君,何小海.基于TMS320C6678的多核程序加載研究與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2015,41(03):31-34.
[6] 盧建章,劉洋.TMS320C6678中的高速串行接口RapidIO研究[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2017,17(06):51-53.
[7] 薛志遠(yuǎn),王春雷.基于TMS320C6678的多核Bootloader設(shè)計(jì)與實(shí)現(xiàn)[J].航空兵器,2017(04):80-83.
Abstract:The startup process of multi-core DSP TMS320C6678 produced by TI is introduced.,several common startup methods provided by its built-in startup program RBL are explained in detail,the advantages and disadvantages of various methods are analyzed from application scenarios, hardware and software design,etc.A multi-level boot mode of adding boot service program based on EMIF16 interface is proposed,which can extend the function of C6678 two stage boot program.
Key words:C6678; EMIF16; RBL; secondary boot; self-boot