



摘要:TI的AM1808處理器具有較為先進(jìn)的架構(gòu)。本文探討了利用AM1808構(gòu)建嵌入式導(dǎo)航系統(tǒng)的過程。并且探討了嵌入式文件系統(tǒng)的組成。在硬件和軟件方面對(duì)嵌入式系統(tǒng)構(gòu)建過程中遇到的問題提出了解決方法。
關(guān)鍵詞:AM1808;嵌入式設(shè)備;導(dǎo)航系統(tǒng);嵌入式文件系統(tǒng)
DOI: 10.3969/j.issn.1005-5517.2012.8.012
硬件設(shè)計(jì)
在硬件設(shè)計(jì)上,得益于AM808先進(jìn)的架構(gòu),AM1808的硬件設(shè)計(jì)具有很高的彈性。但是考慮到嵌入式系統(tǒng)成本和體積的要求,簡潔有力的設(shè)計(jì)更應(yīng)該在整個(gè)設(shè)計(jì)流程中被體現(xiàn)出來。因此,某些功能必須被禁用,以提高系統(tǒng)的簡潔性和穩(wěn)定性,并且降低成本。
系統(tǒng)的需求分析
使用AM1808構(gòu)建嵌入式的導(dǎo)航系統(tǒng),TFT顯示屏是必不可少的組件之一。TFT液晶顯示屏通過顯示不同的海圖和標(biāo)志,來引導(dǎo)船只的正常航行。早先的嵌入導(dǎo)航儀也選用點(diǎn)陣液晶來進(jìn)行數(shù)據(jù)的顯示。相比較點(diǎn)陣液晶,TFT液晶有著低成本,更加豐富的顏色輸出以及更高的刷新速度。基于以上的理由,TFT液晶已經(jīng)慢慢將點(diǎn)陣液晶淘汰。
A M 1 8 0 8最大可以接駁1024*1024分辨率的液晶顯示器。但是其像素時(shí)鐘信號(hào)最高只能到 37.5MHz。當(dāng)前系統(tǒng)中,我們使用800*480分辨率的液晶就能很好地滿足導(dǎo)航功能的現(xiàn)實(shí)需求。
對(duì)于一個(gè)嵌入式系統(tǒng),系統(tǒng)的升級(jí)功能十分的重要。升級(jí)的數(shù)據(jù)來源可以是SD卡或者USB大容量存儲(chǔ)器。為了滿足多樣化的用戶需求,我們同時(shí)需要這兩種接口。AM1808的SD控制器可以訪問SD卡上的數(shù)據(jù),但是不支持高速的SD卡,但標(biāo)準(zhǔn)速度的SD卡已經(jīng)可以很好地滿足系統(tǒng)的需求。在USB方面,AM1808具有兩個(gè)可以使用的USB主機(jī)端口:集成型PHY的USB2.0移動(dòng)(OTG)和集成PHY的USB1.1的OHCI。考慮到存儲(chǔ)器速度的需求,我們使用USB2.0的OTG來實(shí)現(xiàn)USB存儲(chǔ)器的數(shù)據(jù)交換。
導(dǎo)航的一個(gè)重要功能是顯示自身的GPS位置。為了能夠接受GPS模塊發(fā)出的定位信息,串口通信必不可少。AM1808具有3個(gè)獨(dú)立的串口,并且遵守TL16C550規(guī)范。每一個(gè)串口都具有16字節(jié)的硬件FIFO已經(jīng)增加的錯(cuò)誤檢測(cè)位。UART提供了CPU和GPS模塊之間的數(shù)據(jù)交換功能。
系統(tǒng)存儲(chǔ)器的設(shè)計(jì)
系統(tǒng)的存儲(chǔ)器分為兩個(gè)部分:FLASH存儲(chǔ)器和DDR內(nèi)存。
FLASH存儲(chǔ)器存儲(chǔ)一些大容量的永久或者長期數(shù)據(jù),這些數(shù)據(jù)在系統(tǒng)掉電之后還能繼續(xù)存在。DDR控制器的存在使得AM1808可以使用DDR RAM來作為系統(tǒng)的內(nèi)存顆粒。相比較SDRAM來說,DDR內(nèi)存有價(jià)格便宜、速度快、容量大的顯著優(yōu)點(diǎn)。
因?yàn)榍度胧较到y(tǒng)對(duì)于內(nèi)存的需求較低,我們選用128MB的系統(tǒng)內(nèi)存以及128MB的FLASH存儲(chǔ)器就能夠很好地滿足系統(tǒng)數(shù)據(jù)傳輸?shù)男枨蟆?/p>
對(duì)于FLASH存儲(chǔ)器來說,NOR FLASH和NAND FLASH都能提供長效的數(shù)據(jù)存儲(chǔ)。但NOR FLASH相比NAND FLASH而言,具有成本高,容量小的缺點(diǎn)。雖然NOR FLASH可以提供字節(jié)編程的功能,但對(duì)于嵌入式的數(shù)據(jù)存儲(chǔ)來說,成本和容量是考量的首要兩個(gè)要素。因此,系統(tǒng)使用NAND FLASH來進(jìn)行數(shù)據(jù)的存儲(chǔ)。由于NAND FLASH具有的一些缺陷如只能按塊擦除,原生可能存在壞塊等,我們引入著名的YAFFS文件系統(tǒng)來進(jìn)行數(shù)據(jù)的管理和文件系統(tǒng)的實(shí)現(xiàn)。
使用J-LINK進(jìn)行AM1808的檢測(cè)調(diào)試
J-Link是SEGGER公司為支持仿真ARM內(nèi)核芯片推出的JTAG仿真器。配合IAR EWARM,ADS,KEIL,WINARM,RealView等集成開發(fā)環(huán)境支持所有ARM7/ARM9內(nèi)核芯片的仿真,通過RDI接口和各集成開發(fā)環(huán)境無縫連接,操作方便、連接方便。
在設(shè)計(jì)印刷電路版時(shí),目前最主要用在測(cè)試集成電路的副區(qū)塊,而且也提供一個(gè)在嵌入式系統(tǒng)很有用的調(diào)試機(jī)制,提供一個(gè)在系統(tǒng)中方便的“后門”。當(dāng)使用一些調(diào)試工具像電路內(nèi)模擬器用JTAG當(dāng)做訊號(hào)傳輸?shù)臋C(jī)制,使得程式設(shè)計(jì)師可以經(jīng)由JTAG去讀取整合在CPU上的調(diào)試模組。調(diào)試模組可以讓程式設(shè)計(jì)師調(diào)試嵌入式系統(tǒng)中的軟件。
在嵌入式系統(tǒng)硬件設(shè)計(jì)的初期,很重要的一點(diǎn)就是確認(rèn)系統(tǒng)的CPU和內(nèi)存可以正常工作。通過系統(tǒng)的JTAG調(diào)試接口,J-LINK可以運(yùn)行監(jiān)測(cè)程序,通過對(duì)同CPU的控制,可以確認(rèn)系統(tǒng)的CPU是否已經(jīng)正常工作。通過對(duì)系統(tǒng)內(nèi)存的讀寫操作,我們可以知道系統(tǒng)的DDR內(nèi)存是否正常運(yùn)行。
對(duì)于通常的ARM9來說,JTAG調(diào)試接口則較為復(fù)雜,需要對(duì)J-LINK進(jìn)行定制操作以后才可以正常訪問ARM9內(nèi)核:復(fù)位ICE部件,設(shè)置正確的ICE信息等等。初始化完成以后,J-LINK就可以提供完整的調(diào)試功能。
對(duì)于J-LINK的配置,則通過 J-LINK的初始化腳本來實(shí)現(xiàn)。初始化腳本提供類似C語言的代碼執(zhí)行。以下為復(fù)位ICE的代碼范例:
JTAG_StoreIR(2);
v = 0x01000000;
JTAG_StoreDR(v, 32);
BitPos = JTAG_StoreDR(v, 32);
v = JTAG_GetU32(BitPos);
v = 0x00FFFFFF;
v |= 0x81000001;
JTAG_StoreDR(v, 32);
v = 0xFFFFFFFE;
v = 0x00FFFFFF;
v |= 0x81000000;
JTAG_StoreDR(v, 32);
軟件設(shè)計(jì)
軟件設(shè)計(jì)在AM1808上得益于簡潔有力的硬件設(shè)計(jì)。軟件設(shè)計(jì)除了充分利用硬件的性能之外,也需要對(duì)硬件的缺陷具有良好的魯棒性,同時(shí)必須對(duì)用戶提供方便使用的接口。
AM1808的引導(dǎo)方式
AM1808作為較為先進(jìn)的ARM9內(nèi)核嵌入式處理器,其引導(dǎo)方式比之前的ARM9 CPU多了許多功能:例如SD卡引導(dǎo)功能,NAND FLASH引導(dǎo)功能等等。
AM1808具有兩種獨(dú)立的引導(dǎo)方式:直接代碼運(yùn)行引導(dǎo)和腳本文件引導(dǎo)。
直接代碼運(yùn)行引導(dǎo)指的是CPU運(yùn)行存儲(chǔ)器中寫入的二進(jìn)制代碼。這種引導(dǎo)方式具有快捷簡單高效的優(yōu)點(diǎn)。但是只有NOR FLASH才能支持直接代碼運(yùn)行引導(dǎo)功能。由于NOR FLASH的缺點(diǎn),我們的系統(tǒng)中只采用了NAND FLASH作為系統(tǒng)存儲(chǔ)器。因此,NAND FLASH引導(dǎo)功能是系統(tǒng)是否能夠正常啟動(dòng)的關(guān)鍵。
NAND FLASH引導(dǎo)功能屬于腳本文件引導(dǎo)功能。腳本文件引導(dǎo)功能指的是有預(yù)先寫入CPU的一小段程序,將寫入NAND FLASH的引導(dǎo)腳本文件進(jìn)行解析,并且載入內(nèi)部運(yùn)行。
這樣的引導(dǎo)方式相比直接代碼運(yùn)行引導(dǎo)來說較為麻煩:引導(dǎo)腳本必須寫入NAND FLASH的特殊區(qū)塊,并且寫入符合要求的ECC校驗(yàn)值,并避開可能存在的NAND FLASH壞塊。由于腳本文件的讀取和執(zhí)行都需要一定的時(shí)間,所有引導(dǎo)腳本啟動(dòng)相比直接代碼運(yùn)行啟動(dòng)要掩飾1-2秒的時(shí)間。但是相比只能由NOR FLASH支持的直接代碼引導(dǎo)功能來說,無論在價(jià)格和系統(tǒng)配置的簡潔性上,NAND FLASH引導(dǎo)都較為優(yōu)秀。
AM1808也可以配置為SD卡引導(dǎo)啟動(dòng)。由于NAND FLASH沒有進(jìn)行預(yù)燒寫的操作,SD卡引導(dǎo)啟動(dòng)是系統(tǒng)初始化程序運(yùn)行的重要途徑。
通過腳本文件控制系統(tǒng)的升級(jí)
對(duì)于導(dǎo)航系統(tǒng)來說,數(shù)據(jù)和程序的升級(jí)十分重要。在Linux系統(tǒng)中,可以采用shell腳本來對(duì)數(shù)據(jù)文件進(jìn)行操作。在RTOS系統(tǒng)或者無操作系統(tǒng)的環(huán)境中,由于缺乏Linux的支持,系統(tǒng)的升級(jí)較為麻煩。為了能夠便捷地進(jìn)行數(shù)據(jù)和程序的升級(jí),需要?jiǎng)?chuàng)建一套類似shell腳本的解釋器,并且提供文件和命令相應(yīng)的功能。
在SD和USB上,由于普遍使用的是FAT文件系統(tǒng),采用著名的FATFS文件系統(tǒng)來提供文件的存儲(chǔ)功能。在NAND FLASH上,由于NAND FLASH的特點(diǎn)和缺陷,我們使用專門的NANF FLASH文件系統(tǒng):YAFFS來進(jìn)行文件的操作。
由于需要對(duì)文件的訪問提供一致性的接口,就需要在不同的文件系統(tǒng)之間創(chuàng)建統(tǒng)一的訪問函數(shù)。考慮到文件訪問函數(shù)的通用性,我們選取標(biāo)準(zhǔn)的C文件訪問函數(shù)來實(shí)現(xiàn)嵌入式的文件訪問。
通過創(chuàng)建“掛載”功能函數(shù),我們得以在不同的路徑上和介質(zhì)上,通過相同的函數(shù)來存取文件。
腳本文件由系統(tǒng)的引導(dǎo)文件解釋執(zhí)行。腳本命令可以由S D卡或者NAND FLASH上的文件提供,也可以由串口2的控制臺(tái)輸入(921600,N,8,1)。
系統(tǒng)上電以后,將在所有的存儲(chǔ)器根目錄尋找bl.rc文件。這是系統(tǒng)引導(dǎo)的主腳本入口。系統(tǒng)將初始化NAND FLASH和SD卡,并自動(dòng)掛載/ mmc和/nand0兩個(gè)掛載點(diǎn)。如果SD卡未插入,則只掛載/nand0,并運(yùn)行/ nand0/bl.rc腳本文件。如果SD卡已經(jīng)插入并且初始化成功,系統(tǒng)將運(yùn)行/ mmc/bl.rc腳本文件。
腳本文件的范例:
umount /nand0
format nand0
mount nand0 /nand0 rw
wblinit /mmc/blinit.ais
fashbl /mmc/bl.bin
cp /mmc/rc/btnand.rc /nand0/bl.rc
cp /mmc/bllogo.gz /nand0/bllogo. jpg
外部接口的通訊方式
外部接口的通信主要介紹串口的硬件和軟件通信方式,以及鍵盤接口的通信方式。
串口的通信方式
UART通常是嵌入式設(shè)備中默認(rèn)都會(huì)配置的通信接口。這是因?yàn)椋芏嗲度胧皆O(shè)備沒有顯示屏,無法獲得嵌入式設(shè)備實(shí)時(shí)數(shù)據(jù)信息,通過UART串口和超級(jí)終端相連,打印嵌入式設(shè)備輸出信息。并且在對(duì)嵌入式系統(tǒng)進(jìn)行跟蹤和調(diào)試時(shí),UART串口了是必要的通信手段。比如:網(wǎng)絡(luò)路由器,交換機(jī)等都要通過串口來進(jìn)行配置。UART串口還是許多硬件數(shù)據(jù)輸出的主要接口,如GPS接收器就是通過UART串口輸出GPS接收數(shù)據(jù)的。UART緩沖是十分重要的操作。根據(jù)AM1808的硬件特點(diǎn),UART的數(shù)據(jù)進(jìn)行了兩次緩沖:硬件FIFO緩沖以及軟件緩沖區(qū)。硬件FIFO在硬件層面上對(duì)UART接收和發(fā)送的數(shù)據(jù)進(jìn)行了緩沖操作。軟件緩沖指的是環(huán)形緩沖的軟件實(shí)現(xiàn),這在軟件層面上保證了數(shù)據(jù)流的正常,以及讀取和寫入操作的非同步性。后者對(duì)于大量數(shù)據(jù)的收發(fā)效率十分重要。
鍵盤的通信方式
在當(dāng)前的系統(tǒng)中,我們采用I 2C 鍵盤的通信方式。
鍵盤由單片機(jī)進(jìn)行掃描和控制,單片機(jī)將讀取到的鍵值由I2C通路送到CPU進(jìn)行處理。I 2 C的中斷觸發(fā)處理,引入了和串口相同的軟件緩沖機(jī)制。這樣可以保證按鍵的數(shù)據(jù)是及時(shí)并且有效的。并且能夠提供鍵盤的緩沖操作。
結(jié)語
使用AM1808構(gòu)建的嵌入式導(dǎo)航系統(tǒng),無論在硬件還是軟件上,都具有簡潔有力的特征。這首先得益于AM1808先進(jìn)的架構(gòu)設(shè)計(jì)。其次,在系統(tǒng)的配置上采用適宜的硬件設(shè)計(jì),不但降低了系統(tǒng)的總體成本,也增加了系統(tǒng)的可靠性。
使用J-LINK對(duì)AM1808進(jìn)行調(diào)試,使得軟件系統(tǒng)的BUG可以得到發(fā)現(xiàn)和修正,大大加速了嵌入式系統(tǒng)的開發(fā)速度。
得益于類shell腳本的功能支持,使得嵌入式系統(tǒng)的升級(jí)操作得到了極好的實(shí)現(xiàn)。在此基礎(chǔ)上實(shí)現(xiàn)的C標(biāo)準(zhǔn)文件系統(tǒng),在嵌入式設(shè)備上提供了標(biāo)準(zhǔn)的文件訪問接口。這使得嵌入式文件系統(tǒng)能夠提供多樣化的數(shù)據(jù)升級(jí)介質(zhì)支持。
綜合以上的幾點(diǎn),AM1808搭建的嵌入式系統(tǒng)具有一定的通用性,成本低的優(yōu)點(diǎn)。其應(yīng)用范圍不止局限在導(dǎo)航系統(tǒng)上。本文提出的嵌入式系統(tǒng)構(gòu)建方式,對(duì)其它的平臺(tái)也有一定的參考價(jià)值。
參考文獻(xiàn):
[1] AM1806 ARM Microprocessor Datasheet[Z].Texas Instruments Inc.,2011-06
[2] 孫天澤,袁文菊,張海峰.嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開發(fā)指南-基于ARM9處理器[M].北京: 電子工業(yè)出版社,2007
[3] SD Specifications Physical Layer Version 3.01[S].SD Group,2010-05-18
[4] IEEE 1149.1 JTAG Testability[S].Semiconductor Group,1997
[5] K9F1G08U0A Datasheet[Z].Samsung Electronics