高傳發(fā),孫振華,任華鋒(許繼電氣有限公司 技術(shù)中心,河南 許昌 461000)
嵌入式處理器基于SPI引導(dǎo)的RAM自檢探討
高傳發(fā),孫振華,任華鋒
(許繼電氣有限公司 技術(shù)中心,河南 許昌 461000)
介紹了嵌入式處理器在使用基于SPI引導(dǎo)方式時,如何檢查DDR內(nèi)存,以提高系統(tǒng)的可靠性。對系統(tǒng)的引導(dǎo)過程,包括片內(nèi)ROM運行、片內(nèi)RAM運行、DDR內(nèi)存運行,進行了詳細的介紹。對各階段引導(dǎo)程序數(shù)據(jù)格式的處理進行細致的分析,并對生產(chǎn)實用化進行了實例驗證。
SPI引導(dǎo);內(nèi)存自檢;系統(tǒng)可靠性;引導(dǎo)過程
隨著全球網(wǎng)絡(luò)進一步擴展到新終端設(shè)備和以前未連接的行業(yè)中,網(wǎng)絡(luò)安全對消費者、企業(yè)和其他機構(gòu)變得越來越重要。人們越來越需要性能安全、價格便宜的裝置設(shè)備。為了降低成本,往往需要簡化電路設(shè)計。例如,采用SPI方式引導(dǎo)硬件,使用 SPI Flash作為存儲媒介,減少總線的布線,是簡化硬件電路的較好的方法[1]。但采用SPI方式引導(dǎo)硬件,需要將程序引導(dǎo)到DDR內(nèi)存中,同時又需要對DDR內(nèi)存進行檢查,這就出現(xiàn)了矛盾[2]。
本文以一個實例,對嵌入式處理器基于SPI引導(dǎo)硬件時如何進行RAM檢查進行詳細的介紹。圖1是嵌入式處理器使用SPI引導(dǎo)的硬件框圖。在圖1中,硬件引導(dǎo)程序和系統(tǒng)程序放在 SPI Flash中,在上電引導(dǎo)后,系統(tǒng)程序會被搬移到DDR空間,在DDR空間運行起來。
圖1 使用SPI引導(dǎo)的硬件框圖
現(xiàn)在以U-Boot硬件引導(dǎo)程序為例,介紹以SPI引導(dǎo)模式引導(dǎo)系統(tǒng)硬件的情況。U-Boot是德國DENX小組的開發(fā)用于多種嵌入式CPU的 Bootloader程序,可以支持多種嵌入操作系統(tǒng)和多種處理器[3]。
編譯的U-Boot程序,往往是運行在NOR Flash或DDR中的。但在基于SPI引導(dǎo)時,需要先從SPI Flash往片內(nèi)RAM里運行一段程序,將DDR內(nèi)存檢查一遍,然后再將U-Boot引導(dǎo)到DDR內(nèi)存中去運行,如圖2所示。
在TI公司的DSP及ARM處理器,飛思卡爾公司POWERPC及 ARM處理器,都支持基于 SPI的引導(dǎo)模式。在這些處理器的片內(nèi)ROM都包含基本的SPI引導(dǎo)驅(qū)動程序。本文以飛思卡爾公司的QorIQ P1010處理器為例介紹其引導(dǎo)過程。P1010片內(nèi)的SPI驅(qū)動程序能夠把SPI接口Flash中的程序拷貝到DDR內(nèi)存或片內(nèi)RAM中。不過,在拷貝之前,需要先對DDR控制器或片內(nèi)RAM進行配置。這就需要定義一個特定的數(shù)據(jù)結(jié)構(gòu),完成引導(dǎo)程序所需要的環(huán)境配置。對于不同的處理器,生產(chǎn)廠家定義的引導(dǎo)數(shù)據(jù)結(jié)構(gòu)是不同的。
圖2 SPI引導(dǎo)硬件程序框圖
在P1010處理器完成復(fù)位序列后,通過選擇使用處理器片內(nèi)ROM的SPI引導(dǎo)配置程序,而后處理器內(nèi)核開始運行該片內(nèi)ROM程序,配置SPI控制器,并與外部的SPI Flash通信,將程序拷貝出來并跳到指定的位置運行[4]。SPI引導(dǎo)采用的數(shù)據(jù)格式如表 1所示。
表1 SPI引導(dǎo)模式的數(shù)據(jù)結(jié)構(gòu)
在表 1中,配置字(Control Words)由配置 32 bit地址/數(shù)據(jù)對組成,主要用在配置就地訪問窗口(LAW)和目標內(nèi)存控制器的寄存器。配置地址域有兩種模式,當最低位為0時,配置地址域高30 bit代表的是地址,此時配置數(shù)據(jù)寫入此地址。當最低位為1時,配置地址域高30 bit代表的是指令,此時配置數(shù)據(jù)寫入此地址。這樣的結(jié)構(gòu)讓用戶可以方便地配置4 B對齊的內(nèi)存,完成控制指令操作,或定義程序配置階段的結(jié)束[5]。配置地址域的數(shù)據(jù)格式如表2所示。
表2 配置地址域的數(shù)據(jù)格式
在表 2中,當 CNT(最低位)=0時,則高 30 bit用作要寫入數(shù)據(jù)的地址,配置數(shù)據(jù)包含要寫入的數(shù)據(jù)。
當CNT=1時,則高30 bit用作控制指令。
當EC=1時,代表配置階段結(jié)束指令。
當DLY=1時,代表延時一定時間指令。
當CF=1時,代表更改SPI頻率的指令。
CNT表示地址模式與指令模式的切換。
當處理器內(nèi)核開始拷貝程序時,先判斷0X40位置的標志是否正確,如果正確,先根據(jù)配置的地址/數(shù)據(jù)對的個數(shù)N來配置一些外圍寄存器,然后從0X50處指示的Flash地址搬移用戶代碼數(shù)據(jù)到0X58指示的地址。搬移完成后,從0X60指示的地址開始運行。將片內(nèi)運行的這一段程序叫TPL程序。
P1010包含 256 KB的 L2CACHE,也可以當片內(nèi)RAM使用。要檢查DDR內(nèi)存,要先在片內(nèi)RAM里運行一小段TPL程序。這一段程序是對基于DDR引導(dǎo)程序U-Boot的一個裁剪,主要完成內(nèi)核的配置,初始化串口終端,初始化 DDR內(nèi)存控制器,然后檢查 DDR內(nèi)存[6]。在這里不需要設(shè)置U-Boot的環(huán)境變量,不需要配置以太網(wǎng)等其他的外圍器件。編譯后的TPL目標文件為uboot-tpl.bin。
TPL程序的編譯按RAM引導(dǎo)的方式處理。程序的開始地址設(shè)為:0xc0030000~0xc0038800?,F(xiàn)在需要對編譯后的uboot-tpl.bin進行格式處理,在其前面加上 SPI引導(dǎo)的可以識別的數(shù)據(jù)表頭,如表3所示。
表3是按照表1(SPI引導(dǎo)模式的數(shù)據(jù)結(jié)構(gòu))和表 2(配置地址域的數(shù)據(jù)格式)完成的一個SPI引導(dǎo)配置實例。在這個實例中,將L2CACHE設(shè)為片內(nèi)RAM,開始地址設(shè)為0xc0000000。這一部分空間在處理器內(nèi)核引導(dǎo)時已經(jīng)通過TLB映射,可以直接使用。
對TPL進行數(shù)據(jù)格式化存放,要用到一個工具,即boot_format,它可以將基于HEX的文件和基于 BIN格式的文件合并到一起。這是一個飛思卡爾BSP里帶的數(shù)據(jù)格式化工具。采用以下命令:
合并后的文件為uboot_tpl_spi.bin。
表3 cfg_sram_p1010.dat數(shù)據(jù)格式
在 cfg_sram_p1010.dat文件里,TPL程序存放在 SPI Flash的0X400開始的地址。處理器先對片內(nèi)RAM進行配置初始化,然后將TPL程序從0X400引導(dǎo)到0xc0030000開始的地址,并從0xc0030000開始運行。這時,處理器對DDR控制器進行配置,并對DDR空間進行自檢。
DDR RAM的自檢可以采用寫入特定數(shù)據(jù)(例如0x55,0xAA),然后回讀比較來檢查的方式;也可以通過檢查行列地址數(shù)據(jù)線來檢查。相關(guān)文檔很多,這里就不介紹了。
當檢查完DDR內(nèi)存后,就可以引導(dǎo)并運行U-Boot程序了。U-Boot程序按RAM引導(dǎo)的方式編譯。程序起始地址設(shè)為0X11000000。編譯后的文件為uboot.bin。但在實際中需要將兩個單獨的BIN文件合并成一個文件,以方便生產(chǎn)和產(chǎn)品實用化。當uboot.bin與uboot_tpl_spi.bin合為的一個文件 uboot_spi.bin時,uboot_tpl_spi.bin放在前面,uboot.bin程序放在后面,如表4所示。
表4 產(chǎn)品實用化的文件數(shù)據(jù)格式
在表 4中,處理器在運行 TPL時,將 U-Boot從 SPI Flash的 0X10000地址引導(dǎo)到 DDR3的 0X11000000開始的地址(代碼數(shù)據(jù)總長度0x40000),而后跳運行入口地址(0X1103f000),運行 U-Boot程序。這時,整個硬件系統(tǒng)引導(dǎo)起來了。操作系統(tǒng)可以通過U-Boot運行起來。
嵌入式處理器在使用SPI引導(dǎo)硬件時,先通過片內(nèi)RAM運行一段程序,對DDR內(nèi)存進行自檢,而后再將U-Boot程序及環(huán)境變量引導(dǎo)到 DDR空間[7],把硬件系統(tǒng)引導(dǎo)起來。通過實例化的應(yīng)用,證明這在高性價比的嵌入式應(yīng)用中是一個不錯的選擇,不僅能提高系統(tǒng)的可靠性,而且簡單易行。
[1]張偉棟,趙紅.基于 PowerPC8640處理器的通用處理模塊設(shè)計[J].微型機與應(yīng)用,2015,34(6):32-34.
[2]李相國,楊樹元.基于PowerPC處理器SMP系統(tǒng)的UBoot移植[J].微計算機應(yīng)用,2008,29(9):95-99.
[3]王齊.Linux PowerPC詳解:核心篇[M].北京:機械工業(yè)出版社,2007.
[4]李宗海,陳蜀宇,李海偉.嵌入式 Linux系統(tǒng)在 ARM平臺上的構(gòu)建[J].計算機系統(tǒng)應(yīng)用,2010,19(10):153-157.
[5]Freescale Semiconductor,Inc.Booting from On-Chip ROM(eSDHC or eSPI)[EB/OL].(2012-6-1)[2014-4-18].http://cache.freescale.com/files/32bit/doc/app_note/AN3659.pdf.
[6]鄧國榮,劉厚欽.基于 NOR Flash的 OMAPL138雙核系統(tǒng)自舉引導(dǎo)啟動實現(xiàn)[J].電子技術(shù)應(yīng)用,2014,40(2):19-26.
[7]鄒洋,李琳皓,梁峰.Nucleus操作系統(tǒng)在 ARM11上的移植研究與實現(xiàn)[J].電子技術(shù)應(yīng)用,2014,40(9):10-13.
RAM selfcheck about embedded processor based on SPI Boot
Gao Chuanfa,Sun Zhenhua,Ren Huafeng
(Tec.Center,XJEC,Xuchang 461000,China)
This paper introduces the embedded processor based on SPI Boot how to complete the RAM selfcheck,to improve the system reliability.All the system Boot process stages,including ROM-onchip running,RAM-onchip running and DDR memory running,are introduced im detail.The data format processing of all the Boot stages is analyzed in detail,and the practical utility of production is verified by instances.
SPI Boot;RAM selfcheck;system reliability;Boot process
TP307
A
1674-7720(2015)22-0083-03
高傳發(fā),孫振華,任華鋒.嵌入式處理器基于SPI引導(dǎo)的RAM自檢探討[J].微型機與應(yīng)用,2015,34(22):83-85.
2015-06-23)
高傳發(fā)(1972-),男,本科,高級工程師,主要研究方向:繼電保護及自動裝置產(chǎn)品研發(fā)。
孫振華(1983-),男,碩士,工程師,主要研究方向:變電站自動化研發(fā)。
任華鋒(1976-),男,本科,高級工程師,主要研究方向:變電站自動化研發(fā)。