



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