文獻標識碼: A
文章編號: 0258-7998(2013)05-0025-04
目前,嵌入式系統中的雙核處理器系統在功耗、散熱、控制計算能力等方面具有單核系統無法比擬的優勢,所以在嵌入式發展趨勢中占據了主導地位。考慮到ARM處理器流水結構和DSP處理器強大的數據處理能力,采用ARM+DSP結合的非對稱雙核架構[1],既能夠保持算法的靈活性,又能提供強大的處理能力。本文所介紹的BootLoader正是基于ARM+DSP兩個處理器。ARM負責外圍接口、外圍存儲設備及子處理器(DSP)的配置和控制,DSP則負責算法加速。這樣DSP的算法代碼作為ARM端OS文件系統的一個文件存在,通過應用程序進行DSP程序的下載和DSP芯片的控制[2]。
目前關于嵌入式處理器BootLoader實現的文獻很多,但大多都僅限于對單核處理器的某個方面進行介紹和研究,如介紹怎樣進行重映射[3]、進行存儲器的初始化[4]等,因此本文在這些方面只做簡單介紹,而詳細介紹非對稱雙核架構系統自啟動過程中的關鍵部分并對具體環境中的不同技術方案進行對比分析。
在嵌入式系統中,BootLoader指系統上電或復位之后在操作系統內核運行之前要執行的代碼,其功能是對以處理器內核為主的系統硬件和軟件運行環境進行必要的初始化,初始化完成后跳轉到用戶程序。本文基于C6A8168的ARM+DSP雙核系統研究并實現了BootLoader,其上電啟動時系統默認為:ARM核被使能,DSP核被禁止,所以只有通過程序先啟動ARM核,然后通過其應用代碼再使能DSP電源域把DSP設置為復位狀態,對DSP核進行最小的初始化以使其可以被喚醒,系統開始ARM核初始化。ARM核啟動完成后再解除DSP復位狀態使DSP啟動并進入啟動路徑開始向量初始化。BootLoader的詳細過程如圖1所示。
1 啟動模式配置
C6A8168開機上電或復位時,BOOT管腳上配置的啟動模式被鎖定到系統配置模塊中的BOOTCFG寄存器,從而可以確定處理器的啟動方式。啟動配置引腳的不同還將決定存儲設備片選總線、等待使能及數據和地址的復用情況等,本芯片支持包括NOR Flash、NAND Flash、SD、EMAC、UART等多種啟動模式。在本系統中,BootLoader采用系統默認的NAND Flash boot,對于NAND Flash基本是由ARM訪問。DSP的算法代碼作為AEM端OS文件系統的一個文件存在,通過應用程序進行DSP程序的下載和DSP芯片的控制,外部RAM空間即DDR存儲區是ARM和DSP共享的,在設計和實現BootLoader時需要把ARM和DSP使用的內存從物理上嚴格分開,并預留一部分用于雙核系統的交互。
C6A8168啟動模式與以往的不同在于,芯片在啟動時根據啟動引腳的配置按順序自動搜尋啟動設備表中的設備以搜尋可以執行的啟動鏡像。找到鏡像后將其拷貝到目標RAM,再通過重映射機制把RAM映射為零地址,系統上電或者復位時就可以從RAM中的BootLoader開始執行[4]。啟動設備表包括片內存儲器表和片外存儲器表兩部分。部分有代表性的啟動設備順序表如圖2所示。
2 雙核處理器啟動準備
C6A8168啟動并不是雙核同時啟動,系統上電或復位時默認的芯片啟動配置是ARM核使能,DSP禁能。關閉看門狗和其他所有中斷是為BootLoader的成功執行做準備。看門狗本來的作用是防止程序無限制地運行而造成死循環,但是如果在超過規定的時間不給看門狗電路清零,看門狗計數器就會溢出從而引起看門狗中斷,造成系統的復位[5]。考慮到看門狗此特征和啟動過程中有可能會發生中斷或循環復位而影響啟動,看門計數器和中斷在啟動時要關閉。
在關閉中斷和看門狗之后ARM核初始化開始前需要使能DSP電源域使DSP進入到Reset模式。這個過程包括對DSP的一些最簡單的初始化,例如分配一個能使DSP喚醒的最小的時鐘等。
3 ARM核初始化
本文將重點闡述作為雙核系統主處理器的ARM處理器自啟動過程與單核ARM處理器自啟動的異同點。
3.1 中斷向量表
雙核處理器中ARM核中斷向量表與單核類似,其最大差距在于,通常的中斷向量表只有一個,但在ARM+DSP雙核系統中是先設置ARM處理器的中斷向量表,待ARM核初始化完成后再喚醒DSP核,DSP核被釋放后進行啟動時,對應有DSP核的中斷向量表。中斷向量表詳細寫法不再詳細贅述,本文著重詳細介紹向量表中兩個方案,如表1所示。
這兩個方案各有優缺點,在調試過程中經過對兩個方案的對比和分析,依據TD-LTE射頻一致性測試儀表系統的具體特性和應用要求選擇了第一個方案,原因有二。其一,B指令再被復制時沒有LDR簡單,這里所說的復制是指搬運異常向量表。由于B指令在搬運過程中常常出錯,所以穩定性不夠。其二,B指令的跳轉范圍小于32 MB,如果異常中斷處理程序起始地址大于32 MB,則不適合使用B指令,而LDR指令雖然只能跳轉到PC 4 KB范圍之內,但在LDR指令不遠處用DCD指令定義一個字,這個字里面存放最終異常服務程序的地址就可以實現4 GB全范圍跳轉[4]。
在綜合考慮TD-LTE射頻一致性測試儀系統需求及其對穩定性的特殊要求,本BootLoader采用第一種方案。
3.2 堆棧的初始化
堆棧的初始化是和ARM處理器運行模式對應的,由于ARM處理器有七種運行模式,各個模式都需處理各自相關的調用、中斷等,所以必須為每一種模式提供獨立的堆棧空間,在需要改變處理器為其他模式時就需要通過各處理器模式對應的堆棧指針來修改各模式對應的堆棧指針(SP)。在堆棧設置時需要注意,如果切換到User模式,則不能再從操作狀態寄存器CPSR回到其他模式,可能會對接下來的程序執行造成影響。由于堆棧大小、位置及其初始化方式與單核ARM處理器的BootLoader并無區別,故不再贅述。
需要注意的是,堆棧初始化的順序會決定系統在初始化完成后所處的處理器模式,即最后初始化哪種模式的堆棧系統就將運行在哪種模式。
3.3 時鐘初始化
時鐘的初始化是在雙核系統中的PRCM(Power,Reset,Clocking Management)模塊中進行。PRCM模塊負責對系統的電源域、復位和時鐘進行管理,在BootLoader中只需對時鐘管理進行初始化即可。在鎖相環初始化完成后再使能系統各功能模塊時鐘就完成了對該模塊的初始化。在C6A8168中內嵌有4個PLL(Main,Audio,Video,DDR)以為系統各個不同的部分提供不同時鐘[6]。其中各PLL初始化過程相似。時鐘的產生途徑如圖3所示。
由圖3可知,時鐘初始化共需配置3個主要結構:多相位PLL、時鐘合成器和PRCM模塊。時鐘合成器的個數由SYSCLK個數來決定,這樣就可以根據系統需要為各模塊提供不同的時鐘。多相位鎖相環把輸入的參考時鐘與N分頻相乘后與K相位值一起輸出給PLLCLK合成器,該合成器會根據多相位PLL輸入和輸入參數FREQ_N2根據公式fs=fvco×k/FREQ[6]輸出PLLCLK時鐘給PRCM模塊作進一步的分頻,其中FREQ_N2是一個由4位整數和24位小數組成的參數[5]。除了幾個特殊的鎖相環以外,大部分鎖相環在系統復位或者上電后都處于旁路(bypass)模式,在這種模式中參考時鐘繞過PLL直接輸出到系統具體模塊或者經PRCM分頻后再輸出。需要注意的是,在把時鐘提供給系統模塊前需要一個等待時間以使PLL輸出達到穩定狀態,其中除了audio PLL需要等待8 ?滋s外,其他鎖相環都只需要等待5μs。
對PLL初始化時,必須保證PLL是在旁路模式,否則初始化無效。經過測試發現PLL上電啟動后默認為斷電模式,所以在進入旁路模式后要使PLL退出斷電模式,再根據系統各模塊時鐘對上文提到的各個參數進行配置,配置完成后必須使PLL為非旁路模式才能使能時鐘。
3.4 應用程序執行環境的初始化
所謂應用程序執行環境的初始化就是完成從NAND Flash 到RAM的必要的數據傳輸和內容清零。系統上電之后即從地址0開始取得第一條指令,所以0地址必須在上電時就存放可執行的正確代碼。由于本系統采用NAND Flash 啟動模式,地址0的地方應該是NAND Flash,因此上電時系統會通過硬件機制把NAND Flash 中block0的前8個page的數據自動加載到SRAM,剩余的數據搬移需要在BootLoader中實現。啟動路徑完成數據拷貝后會跑到由目標文件定義的入口點,可以根據map文件在指令文件中通過--entry_point制定新的入口地址。
4 DSP核喚醒啟動
ARM處理器啟動完后,由于其初始化后大部分系統相關功能已初始化,DSP核作為輔處理器其啟動相較于ARM核要簡單很多。ARM處理器啟動完成后DSP處理器處于默認的復位狀態,必須把主處理器(ARM)模式改為管理模式才能使DSP處理器從復位狀態中退出。當系統處于調試模式時,通過.GEL文件中DSP核喚醒函數使處理器退出Reset狀態后連接DSP核就可以進入該核的啟動流程。當系統處于自啟動模式時,需主處理器ARM進入到管理模式,在后續的初始化操作進行之前還必須把DSP相關BootLoader放在特定的啟動地址處才能喚醒輔處理器,這一過程是由ARM處理器負責完成的。
DSP核的BootLoader組成上與ARM核中的BootLoader基本相似,只是部分公用模塊有區別,不同的模塊如PLL和中斷向量表寫法也都大同小異,其啟動流程與ARM核類似,所以在此不再詳細描述。
在TD-LTE雙核系統中通過測試板測試兩個時鐘以驗證雙核系統啟動是否成功。第一個測試點為該系統中PLL時鐘Main5,按需要其時鐘頻率應該配置為125 MHz,之所以會選擇該測試點是由于Main5時鐘代表ARM核配置時鐘與相關地址總線讀寫成功與否[6]。第二個為DDR時鐘頻率,由于DDR時鐘初始化與DSP核啟動相關,所以該時鐘的正確性將直接決定DSP的啟動是否成功。通過芯片外延測試點由示波器測試得到頻率波形圖,如圖4、圖5所示。
圖4中所測時鐘頻率與系統理論值基本相符,圖5中,在芯片外延測試點引腳拉高時向DDR中寫1 MB數據,拉低后馬上拉高,通過示波器觀察寫數據需要20.10 ms,由此可得DDR時鐘頻率為400 MHz,與系統理論值一樣。兩測試點與理論值的一致既反應了時鐘配置方法的正確性,也說明了系統啟動成功(BootLoader正確性)。
根據TD-LTE系統需求和ARM+DSP嵌入式系統的特點,本文設計并實現了綜合硬件和軟件兩個方面的BootLoader,在雙核非對稱架構系統的自啟動中有較高的參考價值。以上啟動過程已經通過程序實現并在Code Composer Studio 5.2中順利經過編譯調試和測試板驗證,所得結果均與理論值一致。本BootLoader在保證具有較強穩定性的前提下滿足了國家重大科技專項“TD-LTE射頻一致性測試儀表”對包括硬件和軟件在內的系統需求并已成功應用在其中。
參考文獻
[1] 蔣建春,曾索華,岑明.一種基于異構雙核處理器的嵌入式操作系統構架設計[J].計算機應用,2008,28(10):2686-2689.
[2] 何永泰.ARM單片機啟動代碼研究[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體系結構與編程[M].北京:清華大學出版社,2003.
[6] TI公司.TMS320C6A816x C6-Integra DSP+ARM processors user′s manual[R].2011.