《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > ARM+DSP嵌入式系統(tǒng)BootLoader在LTE中的實(shí)現(xiàn)
ARM+DSP嵌入式系統(tǒng)BootLoader在LTE中的實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2013年第5期
陳發(fā)堂,郭麗強(qiáng)
重慶郵電大學(xué) 重慶市移動(dòng)通信技術(shù)重點(diǎn)實(shí)驗(yàn)室,重慶400065
摘要: 選取基于ARM+DSP雙核系統(tǒng)的C6A8168為硬件平臺(tái),根據(jù)TD-LTE系統(tǒng)中的設(shè)計(jì)要求,介紹了基于ARM+DSP的嵌入式雙核系統(tǒng)從系統(tǒng)上電到雙核完全啟動(dòng)的BootLoader設(shè)計(jì)和實(shí)現(xiàn),包括從中斷向量表的建立、主處理器啟動(dòng)到進(jìn)入應(yīng)用程序的整個(gè)過程,并重點(diǎn)闡述了基于ARM+DSP雙核非對(duì)稱架構(gòu)與傳統(tǒng)的單核處理器的BootLoader的異同。經(jīng)驗(yàn)證,本BootLoader在實(shí)現(xiàn)ARM+DSP雙核系統(tǒng)啟動(dòng)的同時(shí)滿足了TD-LTE射頻一致性系統(tǒng)的要求。
中圖分類號(hào): TN929.5
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)05-0025-04
Realization of BootLoader of embedded system based on ARM+DSP in LTE
Chen Fatang,Guo Liqiang
Chongqing Key Lab of Mobile Communications, Chongqing University of Posts and Telecommunications,Chongqing 400065,China
Abstract: This article selects the embedded system of C6A8168 based on ARM+DSP, describing the design and realization of BootLoader which is to start of the system of dual-core according to the requirements of TD-LTE. It includes the path from the designing of interrupt vector and the startup of main core to the entering into the main process. And more, this article mainly describes the differences between system of dual-core and that of single CPU in detail. The BootLoader starts the system of ARM+DSP successfully as well as realizes the base requirement of the system of TD-LTE radio coherence.
Key words : embedded;dual-core;ARM;DSP;BootLoader

    目前,嵌入式系統(tǒng)中的雙核處理器系統(tǒng)在功耗、散熱、控制計(jì)算能力等方面具有單核系統(tǒng)無法比擬的優(yōu)勢(shì),所以在嵌入式發(fā)展趨勢(shì)中占據(jù)了主導(dǎo)地位。考慮到ARM處理器流水結(jié)構(gòu)和DSP處理器強(qiáng)大的數(shù)據(jù)處理能力,采用ARM+DSP結(jié)合的非對(duì)稱雙核架構(gòu)[1],既能夠保持算法的靈活性,又能提供強(qiáng)大的處理能力。本文所介紹的BootLoader正是基于ARM+DSP兩個(gè)處理器。ARM負(fù)責(zé)外圍接口、外圍存儲(chǔ)設(shè)備及子處理器(DSP)的配置和控制,DSP則負(fù)責(zé)算法加速。這樣DSP的算法代碼作為ARM端OS文件系統(tǒng)的一個(gè)文件存在,通過應(yīng)用程序進(jìn)行DSP程序的下載和DSP芯片的控制[2]。

    目前關(guān)于嵌入式處理器BootLoader實(shí)現(xiàn)的文獻(xiàn)很多,但大多都僅限于對(duì)單核處理器的某個(gè)方面進(jìn)行介紹和研究,如介紹怎樣進(jìn)行重映射[3]、進(jìn)行存儲(chǔ)器的初始化[4]等,因此本文在這些方面只做簡(jiǎn)單介紹,而詳細(xì)介紹非對(duì)稱雙核架構(gòu)系統(tǒng)自啟動(dòng)過程中的關(guān)鍵部分并對(duì)具體環(huán)境中的不同技術(shù)方案進(jìn)行對(duì)比分析。
    在嵌入式系統(tǒng)中,BootLoader指系統(tǒng)上電或復(fù)位之后在操作系統(tǒng)內(nèi)核運(yùn)行之前要執(zhí)行的代碼,其功能是對(duì)以處理器內(nèi)核為主的系統(tǒng)硬件和軟件運(yùn)行環(huán)境進(jìn)行必要的初始化,初始化完成后跳轉(zhuǎn)到用戶程序。本文基于C6A8168的ARM+DSP雙核系統(tǒng)研究并實(shí)現(xiàn)了BootLoader,其上電啟動(dòng)時(shí)系統(tǒng)默認(rèn)為:ARM核被使能,DSP核被禁止,所以只有通過程序先啟動(dòng)ARM核,然后通過其應(yīng)用代碼再使能DSP電源域把DSP設(shè)置為復(fù)位狀態(tài),對(duì)DSP核進(jìn)行最小的初始化以使其可以被喚醒,系統(tǒng)開始ARM核初始化。ARM核啟動(dòng)完成后再解除DSP復(fù)位狀態(tài)使DSP啟動(dòng)并進(jìn)入啟動(dòng)路徑開始向量初始化。BootLoader的詳細(xì)過程如圖1所示。

1 啟動(dòng)模式配置
    C6A8168開機(jī)上電或復(fù)位時(shí),BOOT管腳上配置的啟動(dòng)模式被鎖定到系統(tǒng)配置模塊中的BOOTCFG寄存器,從而可以確定處理器的啟動(dòng)方式。啟動(dòng)配置引腳的不同還將決定存儲(chǔ)設(shè)備片選總線、等待使能及數(shù)據(jù)和地址的復(fù)用情況等,本芯片支持包括NOR Flash、NAND Flash、SD、EMAC、UART等多種啟動(dòng)模式。在本系統(tǒng)中,BootLoader采用系統(tǒng)默認(rèn)的NAND Flash boot,對(duì)于NAND Flash基本是由ARM訪問。DSP的算法代碼作為AEM端OS文件系統(tǒng)的一個(gè)文件存在,通過應(yīng)用程序進(jìn)行DSP程序的下載和DSP芯片的控制,外部RAM空間即DDR存儲(chǔ)區(qū)是ARM和DSP共享的,在設(shè)計(jì)和實(shí)現(xiàn)BootLoader時(shí)需要把ARM和DSP使用的內(nèi)存從物理上嚴(yán)格分開,并預(yù)留一部分用于雙核系統(tǒng)的交互。
    C6A8168啟動(dòng)模式與以往的不同在于,芯片在啟動(dòng)時(shí)根據(jù)啟動(dòng)引腳的配置按順序自動(dòng)搜尋啟動(dòng)設(shè)備表中的設(shè)備以搜尋可以執(zhí)行的啟動(dòng)鏡像。找到鏡像后將其拷貝到目標(biāo)RAM,再通過重映射機(jī)制把RAM映射為零地址,系統(tǒng)上電或者復(fù)位時(shí)就可以從RAM中的BootLoader開始執(zhí)行[4]。啟動(dòng)設(shè)備表包括片內(nèi)存儲(chǔ)器表和片外存儲(chǔ)器表兩部分。部分有代表性的啟動(dòng)設(shè)備順序表如圖2所示。


2 雙核處理器啟動(dòng)準(zhǔn)備
    C6A8168啟動(dòng)并不是雙核同時(shí)啟動(dòng),系統(tǒng)上電或復(fù)位時(shí)默認(rèn)的芯片啟動(dòng)配置是ARM核使能,DSP禁能。關(guān)閉看門狗和其他所有中斷是為BootLoader的成功執(zhí)行做準(zhǔn)備??撮T狗本來的作用是防止程序無限制地運(yùn)行而造成死循環(huán),但是如果在超過規(guī)定的時(shí)間不給看門狗電路清零,看門狗計(jì)數(shù)器就會(huì)溢出從而引起看門狗中斷,造成系統(tǒng)的復(fù)位[5]??紤]到看門狗此特征和啟動(dòng)過程中有可能會(huì)發(fā)生中斷或循環(huán)復(fù)位而影響啟動(dòng),看門計(jì)數(shù)器和中斷在啟動(dòng)時(shí)要關(guān)閉。
    在關(guān)閉中斷和看門狗之后ARM核初始化開始前需要使能DSP電源域使DSP進(jìn)入到Reset模式。這個(gè)過程包括對(duì)DSP的一些最簡(jiǎn)單的初始化,例如分配一個(gè)能使DSP喚醒的最小的時(shí)鐘等。
3 ARM核初始化
    本文將重點(diǎn)闡述作為雙核系統(tǒng)主處理器的ARM處理器自啟動(dòng)過程與單核ARM處理器自啟動(dòng)的異同點(diǎn)。
3.1 中斷向量表
    雙核處理器中ARM核中斷向量表與單核類似,其最大差距在于,通常的中斷向量表只有一個(gè),但在ARM+DSP雙核系統(tǒng)中是先設(shè)置ARM處理器的中斷向量表,待ARM核初始化完成后再喚醒DSP核,DSP核被釋放后進(jìn)行啟動(dòng)時(shí),對(duì)應(yīng)有DSP核的中斷向量表。中斷向量表詳細(xì)寫法不再詳細(xì)贅述,本文著重詳細(xì)介紹向量表中兩個(gè)方案,如表1所示。

    這兩個(gè)方案各有優(yōu)缺點(diǎn),在調(diào)試過程中經(jīng)過對(duì)兩個(gè)方案的對(duì)比和分析,依據(jù)TD-LTE射頻一致性測(cè)試儀表系統(tǒng)的具體特性和應(yīng)用要求選擇了第一個(gè)方案,原因有二。其一,B指令再被復(fù)制時(shí)沒有LDR簡(jiǎn)單,這里所說的復(fù)制是指搬運(yùn)異常向量表。由于B指令在搬運(yùn)過程中常常出錯(cuò),所以穩(wěn)定性不夠。其二,B指令的跳轉(zhuǎn)范圍小于32 MB,如果異常中斷處理程序起始地址大于32 MB,則不適合使用B指令,而LDR指令雖然只能跳轉(zhuǎn)到PC 4 KB范圍之內(nèi),但在LDR指令不遠(yuǎn)處用DCD指令定義一個(gè)字,這個(gè)字里面存放最終異常服務(wù)程序的地址就可以實(shí)現(xiàn)4 GB全范圍跳轉(zhuǎn)[4]。
    在綜合考慮TD-LTE射頻一致性測(cè)試儀系統(tǒng)需求及其對(duì)穩(wěn)定性的特殊要求,本BootLoader采用第一種方案。
3.2 堆棧的初始化
    堆棧的初始化是和ARM處理器運(yùn)行模式對(duì)應(yīng)的,由于ARM處理器有七種運(yùn)行模式,各個(gè)模式都需處理各自相關(guān)的調(diào)用、中斷等,所以必須為每一種模式提供獨(dú)立的堆??臻g,在需要改變處理器為其他模式時(shí)就需要通過各處理器模式對(duì)應(yīng)的堆棧指針來修改各模式對(duì)應(yīng)的堆棧指針(SP)。在堆棧設(shè)置時(shí)需要注意,如果切換到User模式,則不能再從操作狀態(tài)寄存器CPSR回到其他模式,可能會(huì)對(duì)接下來的程序執(zhí)行造成影響。由于堆棧大小、位置及其初始化方式與單核ARM處理器的BootLoader并無區(qū)別,故不再贅述。
    需要注意的是,堆棧初始化的順序會(huì)決定系統(tǒng)在初始化完成后所處的處理器模式,即最后初始化哪種模式的堆棧系統(tǒng)就將運(yùn)行在哪種模式。
3.3 時(shí)鐘初始化
    時(shí)鐘的初始化是在雙核系統(tǒng)中的PRCM(Power,Reset,Clocking Management)模塊中進(jìn)行。PRCM模塊負(fù)責(zé)對(duì)系統(tǒng)的電源域、復(fù)位和時(shí)鐘進(jìn)行管理,在BootLoader中只需對(duì)時(shí)鐘管理進(jìn)行初始化即可。在鎖相環(huán)初始化完成后再使能系統(tǒng)各功能模塊時(shí)鐘就完成了對(duì)該模塊的初始化。在C6A8168中內(nèi)嵌有4個(gè)PLL(Main,Audio,Video,DDR)以為系統(tǒng)各個(gè)不同的部分提供不同時(shí)鐘[6]。其中各PLL初始化過程相似。時(shí)鐘的產(chǎn)生途徑如圖3所示。

    由圖3可知,時(shí)鐘初始化共需配置3個(gè)主要結(jié)構(gòu):多相位PLL、時(shí)鐘合成器和PRCM模塊。時(shí)鐘合成器的個(gè)數(shù)由SYSCLK個(gè)數(shù)來決定,這樣就可以根據(jù)系統(tǒng)需要為各模塊提供不同的時(shí)鐘。多相位鎖相環(huán)把輸入的參考時(shí)鐘與N分頻相乘后與K相位值一起輸出給PLLCLK合成器,該合成器會(huì)根據(jù)多相位PLL輸入和輸入?yún)?shù)FREQ_N2根據(jù)公式fs=fvco×k/FREQ[6]輸出PLLCLK時(shí)鐘給PRCM模塊作進(jìn)一步的分頻,其中FREQ_N2是一個(gè)由4位整數(shù)和24位小數(shù)組成的參數(shù)[5]。除了幾個(gè)特殊的鎖相環(huán)以外,大部分鎖相環(huán)在系統(tǒng)復(fù)位或者上電后都處于旁路(bypass)模式,在這種模式中參考時(shí)鐘繞過PLL直接輸出到系統(tǒng)具體模塊或者經(jīng)PRCM分頻后再輸出。需要注意的是,在把時(shí)鐘提供給系統(tǒng)模塊前需要一個(gè)等待時(shí)間以使PLL輸出達(dá)到穩(wěn)定狀態(tài),其中除了audio PLL需要等待8 ?滋s外,其他鎖相環(huán)都只需要等待5μs。
    對(duì)PLL初始化時(shí),必須保證PLL是在旁路模式,否則初始化無效。經(jīng)過測(cè)試發(fā)現(xiàn)PLL上電啟動(dòng)后默認(rèn)為斷電模式,所以在進(jìn)入旁路模式后要使PLL退出斷電模式,再根據(jù)系統(tǒng)各模塊時(shí)鐘對(duì)上文提到的各個(gè)參數(shù)進(jìn)行配置,配置完成后必須使PLL為非旁路模式才能使能時(shí)鐘。
3.4 應(yīng)用程序執(zhí)行環(huán)境的初始化
    所謂應(yīng)用程序執(zhí)行環(huán)境的初始化就是完成從NAND Flash 到RAM的必要的數(shù)據(jù)傳輸和內(nèi)容清零。系統(tǒng)上電之后即從地址0開始取得第一條指令,所以0地址必須在上電時(shí)就存放可執(zhí)行的正確代碼。由于本系統(tǒng)采用NAND Flash 啟動(dòng)模式,地址0的地方應(yīng)該是NAND Flash,因此上電時(shí)系統(tǒng)會(huì)通過硬件機(jī)制把NAND Flash 中block0的前8個(gè)page的數(shù)據(jù)自動(dòng)加載到SRAM,剩余的數(shù)據(jù)搬移需要在BootLoader中實(shí)現(xiàn)。啟動(dòng)路徑完成數(shù)據(jù)拷貝后會(huì)跑到由目標(biāo)文件定義的入口點(diǎn),可以根據(jù)map文件在指令文件中通過--entry_point制定新的入口地址。
4 DSP核喚醒啟動(dòng)
    ARM處理器啟動(dòng)完后,由于其初始化后大部分系統(tǒng)相關(guān)功能已初始化,DSP核作為輔處理器其啟動(dòng)相較于ARM核要簡(jiǎn)單很多。ARM處理器啟動(dòng)完成后DSP處理器處于默認(rèn)的復(fù)位狀態(tài),必須把主處理器(ARM)模式改為管理模式才能使DSP處理器從復(fù)位狀態(tài)中退出。當(dāng)系統(tǒng)處于調(diào)試模式時(shí),通過.GEL文件中DSP核喚醒函數(shù)使處理器退出Reset狀態(tài)后連接DSP核就可以進(jìn)入該核的啟動(dòng)流程。當(dāng)系統(tǒng)處于自啟動(dòng)模式時(shí),需主處理器ARM進(jìn)入到管理模式,在后續(xù)的初始化操作進(jìn)行之前還必須把DSP相關(guān)BootLoader放在特定的啟動(dòng)地址處才能喚醒輔處理器,這一過程是由ARM處理器負(fù)責(zé)完成的。
    DSP核的BootLoader組成上與ARM核中的BootLoader基本相似,只是部分公用模塊有區(qū)別,不同的模塊如PLL和中斷向量表寫法也都大同小異,其啟動(dòng)流程與ARM核類似,所以在此不再詳細(xì)描述。
    在TD-LTE雙核系統(tǒng)中通過測(cè)試板測(cè)試兩個(gè)時(shí)鐘以驗(yàn)證雙核系統(tǒng)啟動(dòng)是否成功。第一個(gè)測(cè)試點(diǎn)為該系統(tǒng)中PLL時(shí)鐘Main5,按需要其時(shí)鐘頻率應(yīng)該配置為125 MHz,之所以會(huì)選擇該測(cè)試點(diǎn)是由于Main5時(shí)鐘代表ARM核配置時(shí)鐘與相關(guān)地址總線讀寫成功與否[6]。第二個(gè)為DDR時(shí)鐘頻率,由于DDR時(shí)鐘初始化與DSP核啟動(dòng)相關(guān),所以該時(shí)鐘的正確性將直接決定DSP的啟動(dòng)是否成功。通過芯片外延測(cè)試點(diǎn)由示波器測(cè)試得到頻率波形圖,如圖4、圖5所示。

 

 

    圖4中所測(cè)時(shí)鐘頻率與系統(tǒng)理論值基本相符,圖5中,在芯片外延測(cè)試點(diǎn)引腳拉高時(shí)向DDR中寫1 MB數(shù)據(jù),拉低后馬上拉高,通過示波器觀察寫數(shù)據(jù)需要20.10 ms,由此可得DDR時(shí)鐘頻率為400 MHz,與系統(tǒng)理論值一樣。兩測(cè)試點(diǎn)與理論值的一致既反應(yīng)了時(shí)鐘配置方法的正確性,也說明了系統(tǒng)啟動(dòng)成功(BootLoader正確性)。
    根據(jù)TD-LTE系統(tǒng)需求和ARM+DSP嵌入式系統(tǒng)的特點(diǎn),本文設(shè)計(jì)并實(shí)現(xiàn)了綜合硬件和軟件兩個(gè)方面的BootLoader,在雙核非對(duì)稱架構(gòu)系統(tǒng)的自啟動(dòng)中有較高的參考價(jià)值。以上啟動(dòng)過程已經(jīng)通過程序?qū)崿F(xiàn)并在Code Composer Studio 5.2中順利經(jīng)過編譯調(diào)試和測(cè)試板驗(yàn)證,所得結(jié)果均與理論值一致。本BootLoader在保證具有較強(qiáng)穩(wěn)定性的前提下滿足了國家重大科技專項(xiàng)“TD-LTE射頻一致性測(cè)試儀表”對(duì)包括硬件和軟件在內(nèi)的系統(tǒng)需求并已成功應(yīng)用在其中。
參考文獻(xiàn)
[1] 蔣建春,曾索華,岑明.一種基于異構(gòu)雙核處理器的嵌入式操作系統(tǒng)構(gòu)架設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用,2008,28(10):2686-2689.
[2] 何永泰.ARM單片機(jī)啟動(dòng)代碼研究[J].微處理機(jī),2008(3):88-90.
[3] Peng Li,Yu Lu,Wei Hongxing.Realization of embedded multimedia system based on dual-core processor OMAP5910[J].Computational Engineering in Systems Applications (CESA),2008(4):101-105.
[4] SINGH G,BIPIN K,DHAWAN R.Optimizing the boot time of Android on embedded system[C].2011 IEEE 15th International Symposium on Consumer Electronics,Greater Noida,India,June,2011:503-508.
[5] 杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003.
[6] TI公司.TMS320C6A816x C6-Integra DSP+ARM processors  user′s manual[R].2011.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。