摘要 介紹以Philips LPC3180微控制器為核心的嵌入式軟硬件平臺設(shè)計(jì),;對系統(tǒng)設(shè)計(jì)的硬件部分和軟件部分進(jìn)行詳細(xì)的分析,并針對LPC3180芯片特性著重討論了其軟件系統(tǒng)構(gòu)建以及系統(tǒng)啟動流程,。實(shí)驗(yàn)結(jié)果表明,,LPC3180嵌入式系統(tǒng)平臺結(jié)合片內(nèi)硬件浮點(diǎn)運(yùn)算單元,具有高性能的浮點(diǎn)運(yùn)算處理能力,,可滿足復(fù)雜的嵌入式應(yīng)用場合的要求,。
關(guān)鍵詞 LPC3180 ARM9 軟硬件平臺
嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)包括硬件平臺和軟件平臺兩部分。前者是以嵌入式微控制器/微處理器為核心的硬件系統(tǒng),;后者則是圍繞嵌入式操作系統(tǒng)構(gòu)建的軟件系統(tǒng),。兩者在設(shè)計(jì)上是密不可分的,并且需要在設(shè)計(jì)之間進(jìn)行權(quán)衡優(yōu)化,,根據(jù)實(shí)際應(yīng)用進(jìn)行外擴(kuò)和裁剪。
基于ARM926EJS內(nèi)核的LPC3180內(nèi)部集成了豐富的外設(shè)資源,,為嵌入式系統(tǒng)構(gòu)建提供了很大的設(shè)計(jì)空間,。本文結(jié)合筆者開發(fā)LPC3180嵌入式平臺的實(shí)際經(jīng)驗(yàn),將具體介紹該系統(tǒng)的實(shí)現(xiàn),、結(jié)構(gòu)組成和實(shí)驗(yàn)結(jié)果,。
1 LPC3180芯片特性介紹
LPC3180是Philips公司新推出的一款A(yù)RM9微控制器。它采用90nm工藝技術(shù),,片內(nèi)集成ARM9EJS處理器內(nèi)核,,具有高計(jì)算性能、低功耗的特性,,這使得在很多對功耗敏感的嵌入式應(yīng)用場合中仍能使用高性能的ARM9微控制器,。LPC3180內(nèi)核正常工作電壓為1.2V,在低功耗模式下可降至0.9 V,;同時(shí),,LPC3180作為一款新型的32位微控制器,其新特性還包括:
◆ 片內(nèi)集成向量浮點(diǎn)(VFP)協(xié)處理器,。LPC3180的浮點(diǎn)運(yùn)算單元有3條獨(dú)立的流水線,,支持并行單精度或雙精度浮點(diǎn)加/減、乘/除以及乘累積運(yùn)算,,完全兼容IEEE754標(biāo)準(zhǔn),,適用于高速浮點(diǎn)運(yùn)算場合。
◆ 片內(nèi)集成USB OTG控制模塊,,同時(shí)支持與便攜USB主設(shè)備或USB外設(shè)相連,,可用于與PDA、讀卡器和打印機(jī)等設(shè)備直接相連,,而無需PC機(jī)介入,。
◆ LPC3180采用多層的AHB總線系統(tǒng),,為各個(gè)主模塊提供獨(dú)立的總線,包括CPU的指令總線和數(shù)據(jù)總線,、2套DMA控制器數(shù)據(jù)總線以及1套USB控制器數(shù)據(jù)總線,。
LPC3180的內(nèi)部架構(gòu)如圖1所示。
圖1 LPC3180內(nèi)部架構(gòu)
LPC3180的其他特性包括: 內(nèi)部集成MLC/SLCNAND控制器,、SDR/DDR SDRAM控制器,、SD卡接口,UART,、SPI,、I2C外圍通信模塊,以及高速/毫秒定時(shí)器,、RTC,、看門狗定時(shí)器、10位ADC等其他功能模塊,。
2 硬件平臺設(shè)計(jì)
以LPC3180為核心的硬件平臺設(shè)計(jì)框架如圖2所示,。
圖2 LPC3180硬件平臺設(shè)計(jì)框圖
(1) 存儲器系統(tǒng)
NAND Flash存儲器。通過LPC3180內(nèi)部集成的MLC/SLC NAND控制器直接外接多級或單級NAND Flash器件,。本系統(tǒng)選用ST NAND256R3A,,其32 MB存儲空間可滿足存放系統(tǒng)引導(dǎo)程序、嵌入式操作系統(tǒng)內(nèi)核和文件系統(tǒng)的大小要求,。
SDRAM存儲器,。系統(tǒng)選用2片16位MICRON SDRAM,并聯(lián)構(gòu)建32位SDRAM存儲器系統(tǒng),。32 MB SDRAM空間,,可滿足嵌入式操作系統(tǒng)以及上層應(yīng)用程序的運(yùn)行要求。
SD卡插槽,。系統(tǒng)通過LPC3180內(nèi)部集成的SD卡接口,,提供SD卡插槽,可用于SD存儲卡外擴(kuò),,作為外部存儲空間,。
(2) 外圍通信接口
UART接口。LPC3180內(nèi)部集成了標(biāo)準(zhǔn)UART模塊和高速UART模塊,,符合550工業(yè)標(biāo)準(zhǔn),。系統(tǒng)外擴(kuò)了UART1/7、UART2和UART5,,用于實(shí)現(xiàn)基本的串行通信功能,;同時(shí),UART5可用于系統(tǒng)啟動時(shí)的外部程序下載,。
USB接口,。LPC3180內(nèi)部集成了USB host,、USB device以及USB OTG控制器,通過外部USB收發(fā)模塊Philips ISP1301外擴(kuò)USB host接口A,、USB device接口B以及USB OTG接口AB,。
(3) 其他外圍模塊
系統(tǒng)通過I2C接口外擴(kuò)了一個(gè)簡易的字符型LCD顯示模塊,用于應(yīng)用程序運(yùn)行結(jié)果顯示,;同時(shí),,為了簡化硬件系統(tǒng)設(shè)計(jì),系統(tǒng)的以太網(wǎng)模塊通過USB host接口A以軟件方式實(shí)現(xiàn)外擴(kuò),。
3 系統(tǒng)關(guān)鍵模塊設(shè)計(jì)
3.1 NAND Flash存儲器模塊
LPC3180內(nèi)部集成了MLC/SLC NAND控制器,,通過外部引腳可直接外接多級或單級NAND Flash器件,如圖3所示,。需要注意的是MLC和SLC NAND控制器通過引腳復(fù)用,,使用相同的接口與NAND Flash相連,且同一時(shí)刻只允許開啟其中一個(gè)控制器,,因此在系統(tǒng)上電后必須通過配置FLASH_CTRL寄存器選擇要使用的NAND控制器,。在閑置狀態(tài)時(shí),也可通過寫寄存器關(guān)閉NAND控制器,,以降低功耗。NAND Flash存儲器模塊是整個(gè)系統(tǒng)主要的靜態(tài)數(shù)據(jù)存儲空間,,用于存儲系統(tǒng)啟動過程中的加載程序,,因此在LPC3180系統(tǒng)設(shè)計(jì)中是必不可少的。
圖3 NAND Flash接口連接圖
3.2 USB接口模塊
LPC3180內(nèi)部集成USB控制模塊,,但不包括USB物理層,,系統(tǒng)通過外接USB收發(fā)模塊ISP1301實(shí)現(xiàn)USB的物理層接口。圖4是USB接口連接圖,。LPC3180內(nèi)部通過AHB從設(shè)備總線配置USB控制器,,可工作在全速(12 Mb/s)和低速(1.5 Mb/s)兩種模式下。
圖4 USB接口連接圖
4 軟件系統(tǒng)設(shè)計(jì)
軟件系統(tǒng)組成包括系統(tǒng)引導(dǎo)程序Bootloader,,嵌入式操作系統(tǒng)以及上層應(yīng)用程序,。其中Bootloader是運(yùn)行于操作系統(tǒng)之前的引導(dǎo)程序,主要任務(wù)是完成系統(tǒng)啟動之前必要的硬件初始化和操作系統(tǒng)加載,;操作系統(tǒng)是整個(gè)嵌入式平臺的核心程序,,主要功能是高效地管理和分配底層硬件資源,并為上層應(yīng)用程序提供與硬件細(xì)節(jié)無關(guān)的系統(tǒng)調(diào)用接口,。
軟件系統(tǒng)設(shè)計(jì)必須與硬件平臺緊密結(jié)合,。LPC3180采用NAND Flash作為整個(gè)系統(tǒng)的程序存儲區(qū)域,在系統(tǒng)啟動時(shí)通過片上ROM的bootstrap程序,從NAND Flash加載并執(zhí)行外部引導(dǎo)程序來實(shí)現(xiàn)整個(gè)系統(tǒng)的啟動步驟,。因此,,整個(gè)軟件系統(tǒng)采取了圖5所示的設(shè)計(jì)結(jié)構(gòu),。
圖5 軟件系統(tǒng)結(jié)構(gòu)框圖
(1) 系統(tǒng)引導(dǎo)程序Bootloader
由于啟動過程首先從片內(nèi)的bootstrap程序開始,因此系統(tǒng)采取二級Bootloader設(shè)計(jì),,包括第一級Sibl和第二級Uboot,。
其中Sibl是bootstrap加載并執(zhí)行的第一個(gè)引導(dǎo)程序,在程序大小上受到bootstrap加載的限制,,因此設(shè)計(jì)上盡量做到了小型化和功能專一,。它除了完成最基本的硬件初始化以外,主要功能是實(shí)現(xiàn)其他程序(包括Uboot)從NAND Flash的加載,,完成下一級Bootloader運(yùn)行之前的內(nèi)存地址空間分布,。
第二級Bootloader采用功能強(qiáng)大的sourceforge開源軟件Uboot。Uboot的主要功能是完成嵌入式操作系統(tǒng)啟動前的底層硬件初始化,,并為Linux內(nèi)核提供啟動參數(shù),,最終引導(dǎo)操作系統(tǒng)Linux內(nèi)核啟動。另外,為了實(shí)現(xiàn)程序鏡像文件編程寫入NAND Flash,,Uboot嵌入了一個(gè)NAND子系統(tǒng),,通過Uboot的用戶命令行實(shí)現(xiàn)對NAND Flash的讀/寫操作,可將程序鏡像寫入NAND Flash指定的地址空間,。
(2) 嵌入式操作系統(tǒng)
LPC3180內(nèi)部集成了ARM926EJS處理器內(nèi)核,,帶存儲器管理單元MMU,支持多數(shù)主流嵌入式操作系統(tǒng),。系統(tǒng)通過編寫板級支持代碼,,移植了Linux2.6.10作為平臺操作系統(tǒng),利用穩(wěn)定的Linux2.6內(nèi)核實(shí)現(xiàn)任務(wù)調(diào)度,、進(jìn)程管理,、內(nèi)存管理等功能,同時(shí),,針對Linux的可配置性,,對內(nèi)核進(jìn)行裁剪和硬件驅(qū)動代碼添加,系統(tǒng)實(shí)現(xiàn)了一個(gè)小型但功能強(qiáng)大的內(nèi)核程序,,適應(yīng)了嵌入式系統(tǒng)存儲資源相對緊缺的狀況,。
5 系統(tǒng)啟動流程分析
由上面的軟件結(jié)構(gòu)組成分析可知,整個(gè)系統(tǒng)啟動流程分為3個(gè)步驟:
① 系統(tǒng)上電后,,首先從片上ROM固化的bootstrap程序執(zhí)行,。bootstrap用于完成外部引導(dǎo)程序下載并跳入執(zhí)行。bootstrap運(yùn)行過程首先讀輸入引腳GPIO_01,。如果GPIO_01置為高,,則從NAND Flash下載程序引導(dǎo)系統(tǒng)啟動;如果置為低,則依次檢測USB接口和UART5接口,,通過外部連接下載引導(dǎo)程序,。系統(tǒng)通過設(shè)置GPIO_IO跳線來控制bootstrap啟動過程,本例將GPIO_01置為高,,從NAND Flash下載程序,。
② 系統(tǒng)啟動的第二階段是運(yùn)行bootstrap下載的引導(dǎo)程序Sibl。Sibl完成系統(tǒng)必要的初始化后,,從NAND Flash加載鏡像程序到指定的SDRAM空間,。鏡像程序在起始位置添加了64字節(jié)的頭信息,用于Sibl識別和加載,,頭信息數(shù)據(jù)結(jié)構(gòu)如下:
struct image_header {
uint32_tih_magic;/*鏡像頭信息同步字,,Sibl通過該字識別程序*/
uint32_tih_hcrc;/*鏡像頭信息CRC校驗(yàn)碼*/
uint32_tih_time;/*存儲鏡像創(chuàng)建時(shí)間*/
uint32_tih_size;/*鏡像數(shù)據(jù)大小*/
uint32_tih_load;/*鏡像加載地址*/
uint32_tih_ep;/*鏡像入口地址*/
uint32_tih_dcrc;/*鏡像數(shù)據(jù)CRC校驗(yàn)碼*/
uint8_tih_os;/*操作系統(tǒng)信息*/
uint8_tih_arch;/*CPU體系結(jié)構(gòu)類型*/
uint8_tih_type;/*鏡像類型*/
uint8_tih_comp;/*壓縮類型*/
uint8_tih_name[32];/*鏡像名稱*/
}
Sibl從NAND Flash起始地址開始搜索。如果讀到鏡像同步字ih_magic,,則識別鏡像程序,,并根據(jù)偏移地址讀取程序大小ih_size和加載地址ih_load,將程序加載到指定的SDRAM空間,;加載完成后根據(jù)CRC校驗(yàn)碼ih_dcrc對SDRAM數(shù)據(jù)進(jìn)行CRC檢測,;最后根據(jù)鏡像類型ih_type判斷鏡像是否可執(zhí)行,若可執(zhí)行,,則跳入鏡像入口地址ih_ep,,否則Sibl繼續(xù)搜索NAND Flash鏡像程序。
鏡像程序使用U-boot提供的工具mkimage添加頭信息,,命令格式如下:
mkimage-A arch-O os-T type-C comp-a addr-e ep-n name-d data_file image
圖6 系統(tǒng)啟動過程內(nèi)存空間分布圖
③ 完成Sibl加載后,,內(nèi)存空間分布如圖6所示,系統(tǒng)進(jìn)入啟動流程的第三階段U-boot,。U-boot完成Linux內(nèi)核鏡像的解壓縮和操作系統(tǒng)啟動前的初始化,最終跳入內(nèi)核入口地址,,完成對Linux的引導(dǎo),。
6 系統(tǒng)性能分析
系統(tǒng)構(gòu)建提供了一個(gè)完整的LPC3180嵌入式軟硬件平臺,下面對LPC3180浮點(diǎn)運(yùn)算能力進(jìn)行測試和分析,。測試方法是使用一個(gè)浮點(diǎn)運(yùn)算密集的算法,,用ADS編譯器分別編譯使能硬件VFP和軟浮點(diǎn)運(yùn)算兩個(gè)版本的測試程序,并在不同的CPU時(shí)鐘頻率下比較運(yùn)行時(shí)間,,結(jié)果如表1所列,。
分析實(shí)驗(yàn)數(shù)據(jù),可以得出結(jié)論:VFP協(xié)處理器在相同時(shí)鐘頻率下,,提高了5倍左右的浮點(diǎn)運(yùn)算性能,。因此,LPC3180平臺結(jié)合VFP協(xié)處理器,能夠?qū)崿F(xiàn)復(fù)雜的浮點(diǎn)運(yùn)算密集算法,。在微控制器中集成硬件浮點(diǎn)運(yùn)算單元,,這使得微控制器的數(shù)據(jù)處理能力大大提高,能夠勝任多數(shù)的數(shù)字信號處理應(yīng)用,。
表1 浮點(diǎn)運(yùn)算結(jié)果
結(jié)語
本文介紹了以LPC3180微控制器為核心的嵌入式軟硬件平臺的設(shè)計(jì)與實(shí)現(xiàn),,并測試、驗(yàn)證了LPC3180的浮點(diǎn)運(yùn)算性能,。該平臺對于LPC3180的應(yīng)用開發(fā)具有借鑒意義,。目前LPC3180在醫(yī)療器械、工業(yè)控制,、POS機(jī),、數(shù)字信號處理等領(lǐng)域有著廣泛的應(yīng)用。
參考文獻(xiàn)
[1] LPC3180 User Manual. http://standardics.philips.com.
[2] ISP1301 User Manual. http://semiconductors.philips.com.