《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于NOR Flash的OMAPL138雙核系統(tǒng)自舉引導(dǎo)啟動(dòng)實(shí)現(xiàn)
基于NOR Flash的OMAPL138雙核系統(tǒng)自舉引導(dǎo)啟動(dòng)實(shí)現(xiàn)
來(lái)源:電子技術(shù)應(yīng)用2014年第2期
鄧國(guó)榮,劉厚欽
暨南大學(xué) 信息技術(shù)研究所,廣東 廣州510075
摘要: 針對(duì)傳統(tǒng)基于AIS和串口引導(dǎo)啟動(dòng)OMAPL138相對(duì)復(fù)雜的問(wèn)題,提出了一種基于NOR Flash實(shí)現(xiàn)OMAPL138雙核系統(tǒng)二次引導(dǎo)自舉啟動(dòng)的方法。在該方案中,分析了OMAPL138雙核系統(tǒng)基于ARM系統(tǒng)自舉引導(dǎo)啟動(dòng)的bootloader實(shí)現(xiàn)流程,解決了ARM系統(tǒng)初始化問(wèn)題,并基于ARM系統(tǒng)完成了OMAPL138系統(tǒng)硬件的初始化和應(yīng)用程序的復(fù)制。最后,通過(guò)ARM系統(tǒng)喚醒了DSP系統(tǒng),并在bootloader最后跳轉(zhuǎn)到ARM應(yīng)用程序中執(zhí)行,最終實(shí)現(xiàn)了OMAPL138雙核系統(tǒng)的運(yùn)行。實(shí)驗(yàn)結(jié)果表明,該方案能夠?qū)崿F(xiàn)OMAPL138雙核系統(tǒng)的引導(dǎo)啟動(dòng),較之于傳統(tǒng)AIS和串口啟動(dòng)方式更簡(jiǎn)單,更易于實(shí)現(xiàn)。
關(guān)鍵詞: DSP OMAPL138 ARM Bootloader
中圖分類號(hào): TP368
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)02-0019-04
A design for OMAPL138 dual-core system boot based on NOR Flash
Deng Guorong,Liu Houqin
Institute of Information Technology, Jinan University, Guangzhou 510075,China
Abstract: For the problem of the complexity of OMAPL138 boot based on AIS and serial,a new mothed based on NOR Flash to achieve OMAPL138 dual-core system boot is introduced. In this scenario,the process of bootloader of OMAPL138 dual-core system is analyzed. Firstly,the ARM system initialization problems is solved. Then OMAPL138 system hardware initialization and copy of the ARM and DSP applications code are completed based on ARM system. Finally,DSP system is waked up by ARM system,and bootloader jumps to the ARM application at the last of bootloader,and OMAPL138 dual-core system boot is implemented finally. Experimental results show that the program can achieve OMAPL138 dual-core system boot, and it is more simple and easy to implement compared to traditional AIS and serial start-up mode.
Key words : OMAPL138;ARM;DSP;bootloader

    OMAPL138雙核處理器是由TI推出的雙核處理器,內(nèi)部包含ARMDSP兩個(gè)內(nèi)核,已經(jīng)廣泛應(yīng)用于對(duì)講機(jī)等低功耗產(chǎn)品中。目前,OMAPL138雙核處理器的自啟動(dòng)通常采用AIS轉(zhuǎn)換器和串口下載程序的方式實(shí)現(xiàn),這種實(shí)現(xiàn)方式需要實(shí)現(xiàn)串口接收并燒寫(xiě)AIS轉(zhuǎn)換器轉(zhuǎn)換出來(lái)的應(yīng)用程序二進(jìn)制文件,整個(gè)實(shí)現(xiàn)比較復(fù)雜。本文介紹了一種基于NOR Flash自舉引導(dǎo)啟動(dòng)實(shí)現(xiàn)OMAPL138自啟動(dòng)的方案,實(shí)現(xiàn)簡(jiǎn)單,易于掌握。詳細(xì)分析了OMAPL138雙核系統(tǒng)的啟動(dòng)流程和實(shí)現(xiàn)方法,對(duì)于OMAPL138系統(tǒng)應(yīng)用具有很強(qiáng)的參考價(jià)值。
1 OMAPL138雙核系統(tǒng)NOR Flash自舉啟動(dòng)原理
    OMAPL138內(nèi)部包含ARM和DSP雙核,要實(shí)現(xiàn)OMA-PL138雙核系統(tǒng)的自舉啟動(dòng),就需要實(shí)現(xiàn)ARM和DSP雙核啟動(dòng)。
    本設(shè)計(jì)采用ARM喚醒DSP的引導(dǎo)啟動(dòng)OMAPL138雙核系統(tǒng),這種方式需要實(shí)現(xiàn)ARM核bootloader引導(dǎo)程序和ARM、DSP應(yīng)用程序段的燒寫(xiě)程序的編寫(xiě)。OMAPL138程序代碼段在NOR Flash中的地址映射如圖1所示,其中,bootloader代碼段存放在OMAPL138的共享內(nèi)存空間,共享內(nèi)存空間位于0x80000000起始地址處,而且bootloader程序代碼段不能超過(guò)16 KB,16 KB是NOR Flash引導(dǎo)啟動(dòng)方式自動(dòng)拷貝程序代碼段的最大范圍;ARM應(yīng)用程序代碼段和DSP應(yīng)用程序代碼段首先都存放在OMAPL138的DDR RAM空間中,DDR的起始地址為0xC0000000, ARM應(yīng)用程序和DSP應(yīng)用程序必須存放在DDR中的不同地址空間;最后,ARM中斷向量表存放在ARM_LOCAL_RAM地址空間,位于0xFFFF0000處。

    基于ARM初始化OMAPL138的bootloader主要完成以下幾項(xiàng)工作:
    (1)初始化ARM超級(jí)模式下的堆棧;
    (2)OMAPL138的初始化;
    (3)從NOR Flash中拷貝ARM和DSP的應(yīng)用程序到對(duì)應(yīng)的DDR地址空間;
    (4)喚醒DSP;
    (5)在main函數(shù)中調(diào)用跳轉(zhuǎn)到ARM應(yīng)用程序入口地址執(zhí)行程序。
    首先,bootloader初始化ARM超級(jí)模式下的堆棧,因?yàn)樵诔?jí)模式下可以訪問(wèn)OMAPL138的所有寄存器,包括特權(quán)模式下才能訪問(wèn)的寄存器,使得ARM系統(tǒng)具備初始化OMAPL138系統(tǒng)條件;其次,OMAPL138的初始化主要包含PSC電源管理模塊初始化、PLL時(shí)鐘管理模塊初始化、DDR的初始化和EMIFA初始化等,這些主要是OMAPL138的gel文件中的初始化工作;接下來(lái)就是初始化ARM超級(jí)模式下的堆棧起始地址和大小,然后就是拷貝ARM和DSP的應(yīng)用程序到對(duì)應(yīng)的DDR地址空間,這時(shí)DSP已經(jīng)具備了所有啟動(dòng)的環(huán)境,可以直接喚醒DSP;最后,在main函數(shù)中直接放一個(gè)跳轉(zhuǎn)指令(*(void(*)(void))0xC0000000)(),實(shí)現(xiàn)由bootloader到ARM應(yīng)用程序的切換。至此,ARM和DSP應(yīng)用程序都實(shí)現(xiàn)啟動(dòng)運(yùn)行了。
    最后就是所有程序燒寫(xiě)的實(shí)現(xiàn)。程序燒寫(xiě)是獨(dú)立于bootloader、ARM和DSP應(yīng)用程序的一個(gè)應(yīng)用程序,主要功能是將bootloader程序、ARM應(yīng)用程序和DSP應(yīng)用程序燒寫(xiě)到NOR Flash對(duì)應(yīng)的地址空間中去。燒寫(xiě)程序代碼主要是NOR Flash讀寫(xiě)程序,代碼量不大,可以直接放在OMAPL138共享內(nèi)存中,但是不能與bootloader代碼空間重疊。
2 系統(tǒng)設(shè)計(jì)
2.1 bootloader設(shè)計(jì)
2.1.1 bootloader啟動(dòng)流程

    首先,bootloader被燒寫(xiě)到NOR Flash中起始地址位置處, OMAPL138內(nèi)部固化的一段代碼在上電之后運(yùn)行,會(huì)自動(dòng)將16 KB的NOR Flash起始地址(0x60000000)處代碼復(fù)制到OMAPL138的share RAM共享內(nèi)存起始地址處(0x80000000),其中,0x60000000~0x60000004這32 bit存放的是系統(tǒng)固化代碼配置字,可以配置拷貝數(shù)據(jù)大小、boot啟動(dòng)方式和訪問(wèn)數(shù)據(jù)寬度,這里boot啟動(dòng)選擇拷貝數(shù)據(jù)大小為16 bit寬、Legacy NOR boot模式和16 KB數(shù)據(jù)復(fù)制寬度,在拷貝完數(shù)據(jù)之后,系統(tǒng)會(huì)自動(dòng)跳轉(zhuǎn)到0x80000004處執(zhí)行。在0x80000004地址處存放的是一個(gè)跳轉(zhuǎn)指令BL_bootload_init,使得系統(tǒng)固化的啟動(dòng)代碼在跳轉(zhuǎn)到0x80000004地址處開(kāi)始執(zhí)行的第一個(gè)指令就是跳轉(zhuǎn)到bootloader初始化地址處執(zhí)行。
    bootloader啟動(dòng)流程如圖2所示。bootloader起始地址存放的是_bootload_init。首先,該函數(shù)更改CPSR的模式控制位和中斷控制位,使ARM處于超級(jí)模式下工作,這是因?yàn)槌?jí)模式可以直接訪問(wèn)ARM的硬件資源,而且擁有與用戶模式一樣的寄存器,而用戶模式不能直接訪問(wèn)特權(quán)模式下的寄存器;其次,關(guān)閉FIQ和IRQ中斷使能,初始化超級(jí)模式的堆棧;在超級(jí)模式堆棧初始化完成之后,通過(guò)BL _OMAPL138_CPU_
Init指令跳轉(zhuǎn)到OMAPL138的系統(tǒng)初始化函數(shù)中去處理,由于在超級(jí)模式下調(diào)用該函數(shù),所以O(shè)MAPL138_CPU_Init()可以直接訪問(wèn)OMAPL138所有的系統(tǒng)配置寄存器SYS_CFG_
Reg,OMAPL138_CPU_Init()需要完成PSC電源管理模塊初始化、PLL時(shí)鐘管理模塊初始化、DDR的初始化和EMIFA初始化等,這些初始化工作是為ARM和DSP應(yīng)用程序運(yùn)行提供基本的最小化系統(tǒng);在OMAPL138初始化完成之后,DDR和EMIFA都已初始化,可以將NOR Flash中的ARM和DSP應(yīng)用程序拷貝到DDR中,至此,DSP應(yīng)用程序已經(jīng)存放在DDR中,并且已經(jīng)具備了DSP運(yùn)行的所有環(huán)境。接下來(lái)即可喚醒DSP。喚醒時(shí)需要往系統(tǒng)寄存器HOST1CFG中寫(xiě)入DSP喚醒初始地址,即DSP應(yīng)用程序的起始地址。DSP喚醒就相當(dāng)于對(duì)DSP做了一次軟復(fù)位,DSP在喚醒之后直接跳到復(fù)位異常地址處運(yùn)行,DSP復(fù)位異常地址存放的是_c_int00函數(shù),該函數(shù)是DSP的系統(tǒng)庫(kù)函數(shù),由該函數(shù)初始化DSP運(yùn)行的C語(yǔ)言環(huán)境,并跳轉(zhuǎn)到DSP主函數(shù)中運(yùn)行。至此bootloader基本工作已經(jīng)完成,可以直接通過(guò)調(diào)用函數(shù)(*(void(*)(void))0xC0000000)()跳轉(zhuǎn)到ARM應(yīng)用程序?qū)?yīng)的起始地址處開(kāi)始運(yùn)行ARM應(yīng)用程序[1-3]。

2.1.2 ARM應(yīng)用程序的初始化
    ARM初始化流程如圖3所示。首先,初始化ARM的各個(gè)異常對(duì)應(yīng)的堆棧,這段代碼是ARM應(yīng)用程序的初始化代碼,一般存放在ARM應(yīng)用程序代碼段的起始地址處,這樣便于bootloader直接跳轉(zhuǎn)到ARM初始化開(kāi)始地址處執(zhí)行ARM初始化;其次,在ARM異常堆棧初始化完成之后,需要執(zhí)行LDR PC,_c_int00,這個(gè)指令是調(diào)用_c_int00函數(shù),這是ARM的一個(gè)庫(kù)函數(shù),完成ARM運(yùn)行時(shí)需要的C語(yǔ)言環(huán)境初始化等,并且在這個(gè)函數(shù)開(kāi)始處就直接將模式切換成用戶模式,完成了用戶模式堆棧的初始化,在這個(gè)函數(shù)最后直接跳轉(zhuǎn)到ARM的main函數(shù)中執(zhí)行ARM的實(shí)際應(yīng)用程序。ARM初始化還必須把ARM的中斷向量表初始化映射到0xFFFF0000地址處,這是OMAPL138默認(rèn)的ARM中斷向量表存放地址空間,可以通過(guò)cmd文件直接配置。至此,ARM應(yīng)用程序也開(kāi)始運(yùn)行了[4]。

2.1.3 bootloader.cmd和nor_cfg_word.asm的編寫(xiě)
    nor_cfg_word.asm文件是一個(gè)匯編文件,用來(lái)實(shí)現(xiàn)對(duì)NOR Flash自動(dòng)拷貝bootloader程序大小的配置以及實(shí)現(xiàn)到bootloader初始化程序_bootload_init的跳轉(zhuǎn)。該文件直接由bootloader.cmd配置存放在0x80000000地址處,并且bootloader.cmd文件緊跟著將bootloader.asm啟動(dòng)文件的匯編代碼存放在nor_cfg_word.asm文件之后。這兩個(gè)文件被燒寫(xiě)到NOR Flash的起始地址空間,并最終通過(guò)系統(tǒng)上電啟動(dòng)自動(dòng)將nor_cfg_word.asm配置文件和bootloader.asm啟動(dòng)文件同時(shí)復(fù)制到0x80000000共享內(nèi)存share RAM并自動(dòng)開(kāi)始運(yùn)行。
    如圖4所示,在nor_cfg_word.asm文件中第一個(gè)指令必須是.word 0x00000F01,用來(lái)實(shí)現(xiàn)對(duì)NOR Flash自舉引導(dǎo)復(fù)制程序段的配置,選擇為16 KB復(fù)制、Legacy NOR boot和16 bit寬度訪問(wèn),緊跟在配置字之后的是一個(gè)跳轉(zhuǎn)指令BL _bootload_init,該指令存放在0x80000004地址處,因?yàn)橄到y(tǒng)上電之后自動(dòng)跳轉(zhuǎn)到0x80000004地址處執(zhí)行程序,即執(zhí)行BL _bootload_init,_bootload_init是bootloader.asm啟動(dòng)文件第一個(gè)指令對(duì)應(yīng)的地址,從而實(shí)現(xiàn)了到bootloader初始化程序的跳轉(zhuǎn)。

 

 

2.2 OMAPL138自舉啟動(dòng)流程
    整個(gè)OMAPL138自舉啟動(dòng)流程如圖5所示。在Nor_cfg_word中配置NOR Flash的訪問(wèn)數(shù)據(jù)寬度、訪問(wèn)模式和自動(dòng)搬運(yùn)數(shù)據(jù)塊大小,在系統(tǒng)上電之后,就會(huì)自動(dòng)讀取Nor_cfg_word配置,從NOR Flash中搬運(yùn)16 KB數(shù)據(jù)到OMAPL138的共享內(nèi)存share RAM中,然后自動(dòng)跳轉(zhuǎn)到share RAM的地址0x80000004中執(zhí)行。在這里存放的是bootloader代碼第一條指令B _bootload_init,然后執(zhí)行這條指令,由_bootload_init完成OMAPL138的系統(tǒng)初始化、超級(jí)模式堆棧初始化、ARM和DSP應(yīng)用程序的拷貝和喚醒DSP,整個(gè)初始化過(guò)程在ARM的超級(jí)模式下完成。bootloader最后存放一條指令直接跳轉(zhuǎn)到ARM應(yīng)用程序初始化地址處,開(kāi)始執(zhí)行ARM應(yīng)用程序。ARM應(yīng)用程序的初始化主要是初始化各種ARM異常堆棧,ARM應(yīng)用程序的初始化最后調(diào)用ARM庫(kù)函數(shù)自帶的初始化C語(yǔ)言環(huán)境函數(shù)_c_int00,并由該函數(shù)自動(dòng)跳轉(zhuǎn)到ARM應(yīng)用程序的主函數(shù)中執(zhí)行,整個(gè)ARM自舉啟動(dòng)完成。DSP在被bootloader喚醒之后直接跳到系統(tǒng)寄存器HOST1CFG中寫(xiě)入的地址處開(kāi)始執(zhí)行。這個(gè)DSP開(kāi)始執(zhí)行的地址處存放的是DSP自帶的庫(kù)函數(shù)_c_int00,這個(gè)函數(shù)會(huì)初始化DSP運(yùn)行所需要的環(huán)境,并跳轉(zhuǎn)到DSP應(yīng)用程序主函數(shù)中執(zhí)行DSP應(yīng)用程序。至此,OMAPL138雙核系統(tǒng)就同時(shí)啟動(dòng)運(yùn)行了[5-6]。

2.3 NOR Flash燒寫(xiě)代碼工程設(shè)計(jì)
    在bootloader代碼、ARM和DSP應(yīng)用程序代碼下載到對(duì)應(yīng)的地址空間之后,這些代碼必須燒寫(xiě)到NOR Flash指定地址空間。其中,配置代碼段和bootloader必須存放在NOR Flash起始地址處,這些工作由燒寫(xiě)代碼工程完成。在OMAPL138的共享內(nèi)存share RAM中,bootloader和配置代碼段占用16 KB空間,剩下的代碼空間可以作為燒寫(xiě)代碼工程使用空間,這樣就可以使得燒寫(xiě)代碼完全獨(dú)立于其他已經(jīng)燒寫(xiě)在內(nèi)存中的代碼。在整個(gè)代碼燒寫(xiě)過(guò)程中,下載到OMAPL138內(nèi)存中的bootloader、ARM和DSP應(yīng)用程序都不能運(yùn)行,因?yàn)閎ootloader代碼中有對(duì)DDR的重新初始化過(guò)程,這個(gè)過(guò)程使得系統(tǒng)脫離了OMAPL138的gel文件初始化,而燒寫(xiě)程序代碼是依賴gel文件的初始化環(huán)境運(yùn)行的。所以,為了避免代碼運(yùn)行過(guò)程中對(duì)燒寫(xiě)代碼工程的影響,需要燒寫(xiě)的代碼在下載后不可運(yùn)行,燒寫(xiě)代碼過(guò)程不能斷電,在燒寫(xiě)完成之后,掉電再開(kāi)始重新上電,燒寫(xiě)的bootloader即開(kāi)始自舉引導(dǎo)啟動(dòng)OMAL138。
3 仿真結(jié)果與分析
    仿真結(jié)果如圖6所示。首先,ARM和DSP應(yīng)用程序中都初始化了串口UART2,用來(lái)打印ARM與DSP雙核通信信息,然后ARM應(yīng)用程序通過(guò)配置系統(tǒng)寄存器CHIPSIG中的SYSCFG_CHIPINT3向DSP發(fā)送系統(tǒng)中斷。DSP應(yīng)用程序通過(guò)配置系統(tǒng)寄存器CHIPSIG中的SYSCFG_CHIPINT1向ARM發(fā)送系統(tǒng)中斷,在ARM和DSP雙方通信的各自中斷處理程序中,都首先通過(guò)串口UART2打印接收到的中斷信息,然后延時(shí)一段時(shí)間,以使ARM和DSP雙核不會(huì)同時(shí)占用UART2資源,在延時(shí)之后各自都會(huì)向?qū)Ψ桨l(fā)送中斷。圖5中輸出的信息就是在硬件板燒寫(xiě)完程序后上電串口UART2輸出的打印信息。由于ARM和DSP雙核不斷地向?qū)Ψ桨l(fā)送中斷,因此不斷地向串口輸出信息,仿真結(jié)果中發(fā)送字節(jié)數(shù)為0,接收字節(jié)數(shù)為158 437,這是接收的雙核通信輸出信息,整個(gè)仿真結(jié)果可靠,充分證明了OMAPL138雙核系統(tǒng)被成功引導(dǎo)啟動(dòng)。

    針對(duì)傳統(tǒng)的基于AIS和串口實(shí)現(xiàn)OMAPL138雙核系統(tǒng)自啟動(dòng)處理復(fù)雜的問(wèn)題,提出了基于NOF Flash的bootloader二次引導(dǎo)實(shí)現(xiàn)OMAPL138雙核自啟動(dòng)的方案。在該方案中,分析了基于ARM核的bootloader實(shí)現(xiàn)流程和處理內(nèi)容,解決了bootloader中ARM核系統(tǒng)的初始化,并基于ARM核實(shí)現(xiàn)了OMAPL138系統(tǒng)的初始化以及ARM和DSP應(yīng)用程序的復(fù)制,最終通過(guò)ARM核喚醒了DSP核,并成功跳轉(zhuǎn)到ARM應(yīng)用程序中執(zhí)行,實(shí)現(xiàn)了OMAPL138的雙核運(yùn)行。整個(gè)方案實(shí)現(xiàn)了bootloader、ARM和DSP應(yīng)用程序及燒寫(xiě)所有程序代碼工程都相互獨(dú)立運(yùn)行、互不干擾,針對(duì)每個(gè)工程項(xiàng)目的cmd文件進(jìn)行了詳細(xì)分析和介紹,對(duì)于整個(gè)bootloader啟動(dòng)流程做了詳細(xì)的說(shuō)明,整個(gè)過(guò)程清晰、可靠。實(shí)驗(yàn)結(jié)果表明,該方案可以實(shí)現(xiàn)OMAPL138的自舉啟動(dòng)。
參考文獻(xiàn)
[1] 劉遠(yuǎn)峰,陳志華.一種新的基于TMS320C6000 DSP的Flash引導(dǎo)自啟動(dòng)方法[J].電視技術(shù),2011,21(35):54-57.
[2] 王潔,蘇東林,姜鐵華.基于TMS320C6000系列DSP的二次Bootl oader研究[J].電子工程師,2005,8(31):53-55.
[3] 劉濤,倪江生,王丹丹.基于DSP的Flash自啟動(dòng)設(shè)計(jì)[J].儀表技術(shù),2009(9):44-45.
[4] 王鵬,簡(jiǎn)秦勤,范俊鋒.基于TMS320C6000 DSP及DSP/BIOS系統(tǒng)的Flash引導(dǎo)自啟動(dòng)設(shè)計(jì)[J].電子元器件應(yīng)用,2012,12(14):35-39.
[5] 余同正,徐龍祥.基于雙DSP的磁軸承數(shù)字控制器容錯(cuò)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2005,31(1):27-29.
[6] 郭唐仕,尹華杰,陳錦云.基于雙DSP低電壓大電流交換器的模糊PID控制[J].電子技術(shù)應(yīng)用,2003,29(5):79-81.

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