歡迎您光臨本站 登入註冊首頁

自製廉價的Arm9 開發平台

admin @ 2014-03-26 , reply:0

概述

摘要:基於Arm9內核的單片機,由於其低廉的價格與優越的性能,已經被廣泛的應用於各種消費類電子產品中。掌握Arm9單片機的開發技能已經成為嵌入式系統開發者的迫切要求。但由於市面上的Arm9開發板價格不……

摘要:基於Arm9內核的單片機,由於其低廉的價格與優越的性能,已經被廣泛的應用於各種消費類電子產品中。掌握Arm9單片機的開發技能已經成為嵌入式系統開發者的迫切要求。但由於市面上的Arm9開發板價格不菲,使不少想學習Arm9開發技術的朋友望而卻步,其中有一大部分是各大高校的學生。本文闡述了改造ipTIME的IP0422路由器,使其成為VxWorks和Linux的Arm9開發平台的過程。整個過程簡單易行,同時花費在150元以內,是嵌入式系統開發愛好者不錯的選擇。

1 改造系統的選取
    要動手改造Arm9開發系統,首先要選取一款進行改造的產品。現在基於Arm9內核的單片機被廣泛的應用於家用路由器和手機當中,因而這兩類產品可以作為我們尋找改造對象的範圍。但由於手機總體的價格偏高,同時集成度比較高,電路系統複雜,因而不適合作為我們改造的對象。而路由器恰恰相反,現在100多元的路由器比比皆是,而且這些路由器基本使用單晶元,該晶元除了具有Arm9核心的控制功能外,還具有硬體上的路由演算法支持,因而電路相對簡單,便於改造,所以廉價的路由器就是改造Arm9開發板的合適對象。經過反覆比較以後,最終選擇了ipTIME的IP0422。該款路由器的市場價格在100元左右,主晶元為KS8695X,是高度集成化的網路通訊處理器,具有ARM922T內核。同時該路由器還具有2M Flash,8M SDRAM,同時還留有一個SDRAM焊位,可以方便的把SDRAM的容量擴充為16M,為我們運行操作系統提供了足夠的空間。選擇該款路由器的另一個主要原因時KS8695X晶元提供了完備的開發資料,可以方便的從Micrel公司的FTP上(ftp://www.micrel.com)下載獲得(文中所涉及到的晶元相關資料都從該FTP下載)。開發資料中包括了供KS8695X DEMO板運行的Linux操作系統的源代碼和VxWorks系統的BSP源代碼包,雖然KS8695X DEMO與我們進行改造的路由器的硬體配置不同,但只要做少許移植工作,便可以讓以上程序支持我們的開發板,大大簡化了我們的改造過程。IP0422路由器改造完成的電路板和電路板版本號如圖1所示。以下將從硬體改造與軟體DEMO移植兩方面,詳細闡述對IP0422的改造過程。
    
圖1 改造完成電路板與電路板版本號

2 硬體改造
2.1 串口
串口對一個嵌入式系統是致關重要的,通過串口可以與嵌入式系統進行交互。我們首先進行系統的串口改造。如圖2所示,電路板上原本就將串口以4星條針的形式引出,估計是為了以後方便維修而設置的。經過分析發現,為了抗干擾,電路板上將主晶元串口的RX管腳進行了上拉,因而在一般使用中主晶元不會接收到任何的輸入信號。所以我們對串口的改造分為兩步:1、去掉RX管腳上的上拉電阻;2、自己搭建一個串口電平轉換電路,使串口可以與PC機通信。串口各管腳定義與要去掉的電阻如圖2所示。
 
圖2 串口電路
    串口電平轉換電路負責單片機串口與PC機串口間電平的轉換工作,使兩者可以正常通信。串口電平轉換電路使用最多的是MAXIM公司的產品,在這裡可以使用MAX3232或MAX232,兩者連接的電路原理圖是相同的。由於MAX3232是使用3.3V進行供電的,所以可以直接與上圖所示的4個管腳進行連接。若使用MAX232晶元,則要將晶元的供電管腳與電路板上輸入電源5V相聯。我使用的是MAX232晶元,5V電源端的連接如圖3所示。MAX232、MAX3232連接原理圖如圖4所示:
 
圖3 MAX232 5V連接端
 
圖4 MAX232、MAX3232連接原理圖
由於以上介面電路比較簡單,假如沒有現成的串口電路板,可以直接購買麵包板,在上面搭建,以後所說的介面電路也可用此方法構建,不再贅述。將相應的電路連接好后,與PC機的串口相連,打開串口工具DNW(超級終端也可以),設置波特率為38400,數據位為8,奇偶校驗為無,停止位為1,硬體流控制為0(後面使用的串口設置只有波特率不同,其他設置都按此設置)。連接開發板的電源后,可以看到路由器啟動時的提示信息,如圖5所示,說明串口改造成功。
 
圖5 IP0422啟動串口輸出

2.2 JTAG介面
    JTAG介面是作為開發板必須具備的。我們可以通過JTAG介面對板上的程序進行簡單的調試,同時,還可以通過JTAG,將程序下載到板上的SDRAM中,對板上的Flash進行擦寫操作。
    對JTAG的改造要比串口困難,因為電路板上並沒有為我們引出該介面,我們只有自己想辦法做一個引出介面。如圖6所示,圖示位置將電路板的絕緣層用小刀刮掉,露出裡面的銅箔,將一個2x10的條形插針一面的9個腳焊在該銅箔上,形成接地,這與我們將要使用的wiggle簡易JTAG介面是一致的,同時還可以起到固定整個插座的作用。條針的2腳與串口介面中的3.3V電源端相連,作為簡易JTAG介面的電源腳。然後將晶元上的與JTAG相關的各個管腳引出。如圖6所示,綠色線一端連條針的第5腳,一端連晶元TDI上拉電阻R27的一端;橙色線一端連條針的第7腳,一端連晶元TMS上接電阻R28的一端;藍色線一端連條針的第9腳,一端連晶元TCK上拉電阻R29的一端;白線一端連條針的第13腳,一端直接與晶元的TDO(113腳)相連。其中白色線與晶元的TDO(113腳)相連端是焊接的難點,由於晶元管腳太密,直接焊接很容易照成相鄰管腳間的短路,所以建議將該管腳翹起來(如圖6所示),然後再焊接,操作時要十分小心。
   
圖6 JTAG介面與相應連線
  
圖7 簡易JTAG介面原理圖
     介面構造完成後,可以使用wiggle的簡易JTAG口與計算機的並口相連。Wiggle的電路原理圖如圖7所示。從http://twentyone.bokee.com/網站,下載H-JTAG軟體,進行安裝后,啟動H-JTAG軟體,應該可以檢測到連接的晶元是ARM922T的內核。再使用H-JTAG配合AXD調試軟體對晶元的存儲區域,寄存器進行讀寫,如讀寫正常,說明介面改造成功。在使用AXD時,可能會出現這樣的現象,先連接PC機並口與板上的JTAG口,再給路由板上電,然後啟動AXD時可能會報錯。解決的方法是先給路由板上電,然後再將JTAG口插到PC機的並口上,最後再啟動AXD,可以解決以上問題。

2.3 擴充SDRAM
    路由板上的SDRAM只有8MB,由於Demo板的SDRAM是16MB,為了方便直接運行Demo板的Linux系統,需要為路由板擴充8M SDRAM。板上使用的SDRAM型號為IC42S16400-7TG,在市場中並不常見,根據查看該型號SDRAM的規格書,我們選取與其兼容的HY57V641620HG型號的SDRAM。由於路由板上原來就留有另一片SDRAM的焊接位置,擴充比較容易,只需要在焊接時注意晶元的1腳的位置,不要將晶元焊反了。SDRAM周圍缺少的器件也都要焊上,排阻為33歐姆,電容使用0.1uF。由於原來路由器中的程序會檢測外圍SDRAM的數據寬度,進行SDRAM擴充后,原來程序將自動用32位數據寬度進行訪問。所以在擴充SDRAM后,給路由板上電如串口輸出正常(如圖5所示),則說明擴充成功。
    經過以上步驟,路由板的硬體改造已經完成,接下來就是要編寫,移植軟體,使路由板成為VxWorks與Linux操作系統的開發平台。

3 軟體編寫
3.1 Flash燒寫軟體
    由於擴充了JTAG介面,我們可以自己編寫一個程序,對板上的Flash進行擦寫。具體原理是在路由板啟動后,通過AXD中的命令行,設置KS8695X中的寄存器,將Flash與SDRAM映射到特定的區域,然後將擦寫程序下載到SDRAM中運行,對板上的Flash進行編程。關於這方面文章網上已經有很多,同時還提供有源代碼,在此就不再贅述。這裡只把要點說一下。由於Arm9晶元具有MMU單元,默認的路由板上的原始程序是Linux,默認情況下會把MMU單元打開,使用數據緩存,所以我們在AXD Command窗口中執行內存區域配置時,要先把開著的MMU單元和數據緩存關閉,這樣對KS8695寄存器的配置才會正確。對MMU中寄存器的設置如下圖所示:
   
圖8 AXD中CP15寄存器的設置
    在Command窗口中鍵入命令obey C:\cfg.ini(假定自己編寫的配置文件cfg.ini在C盤根目錄下),SDRAM被映射到了0x0—0xFFFFFF區域,Flash被映射到了0x2800000—0x29fffff區域。將Flash燒寫程序下到0x0處開始運行,將串口波特率設置為115200,串口輸出如圖9所示。按“1”鍵選擇燒寫Flash,從DNW的“serial port”菜單中選transmit,然後選擇發送要燒錄的文件就可以對Flash進行擦寫了。我的路由板上使用的Flash晶元型號為Spansion公司的S29AL016D70,不同型號的Flash,扇區分佈與廠家ID可能不同,擦寫協議也有可能不同,要對相應部分的程序做適當的修改。
  
圖9 Flash擦寫程序串口輸出

3.2 VxWorks BSP包的移植
    Demo程序自帶VxWorks的BSP包。根據Demo板的Datasheet[1]和VxWorks說明文檔[2]中的說明,我們選擇與這塊路由板的配置基本相同的KS8695X構建目標進行改造。經過比較兩者最大的差別就是在Flash部分,因而需要改寫BSP包中與Flash介面的部分。其中包括Flash的初始化、擦寫邏輯、程序在Flash中的布局,文件系統與Flash的介面等[3]。涉及到的主要文件與實現的功能如表1所示:

文件名
修改說明
Ks8695p.h、config.h
提供路由板相關寄存器設置值
flashFsLib.c
實現FAT文件系統介面
flashDrvLib.c
實現Flash操作介面
flashAmdMem.h、flashAmdMem.c
具體實現S29AL016D70的各種操作
flashMem.h、flashMem.c
提供程序在Flash中存儲的位置和系統記錄啟動參數的介面

表1 BSP修改相關文件說明
    將相關文件修改好后,根據BSP說明[2]中的方法編譯bootrom,選擇的編譯目標是KS8695X。接下來根據說明中的方法編譯適用於網路下載的VxWorks映象和適用於Flash引導的VxWorks映象,同樣使用的編譯目標是KS8695X。將bootrom下載到路由板上,同時設置好FTP伺服器,設置串口波特率為9600,默認情況下bootrom通過FTP從網路上下載引導啟動VxWorks映象,啟動過程如圖10所示。也可以修改bootrom中的啟動參數,從Flash的FAT文件系統中引導啟動VxWorks映象,啟動過程如圖11所示。經過修改的BSP實現原有BSP的所有功能,各項功能的使用及參數設置參見BSP說明[2],在此不再贅述。
 
圖10 網路引導VxWorks輸出
 
圖11 Flash引導VxWorks輸出

3.3 u-boot和Linux的移植
    開發包中帶有供Demo使用的Linux系統,由於Demo板使用的Flash為4M[4],該Linux系統中Linux內核加上文件系統有2M多,路由板上使用的是2M的Flash,而且沒有擴充的可能性,顯然不能直接使用。經過對Demo板自帶的引導程序的分析,發現Demo板在運行Linux前,引導程序將Linux系統整個拷貝到16M的SDRAM中運行。我們的路由板已經擴充為16M的SDRAM,所以我們可以不將Linux系統存儲在Flash中,而直接使用網路,將Linux系統下載到SDRAM中然後運行。當然,要將Linux直接下載到SDRAM中運行,還需要有引導程序的幫助。u-boot是Arm系統中廣泛使用的引導程序,同時其中已經有使用KS8695晶元的構建目標,目標的配置名稱是cm4008,所以我們選擇在原來的構建目標上進行改造,將u-boot移植到我們的路由板上。關於u-boot的移植的文章網上很多,移植方法在此就不再贅述,涉及到的主要文件與實現的功能如表2所示:

文件名
修改說明
include\configs\cm4008.h
u-boot特定平台的配置文件
include\asm-arm\arch-ks8695\platform.h
硬體平台的參數設置
board\cm4008.c
u-boot初始化設置
board\flash.c
u-boot中flash的介面部分
drivers\ks8695eth.c
u-boot中使用KS8695的驅動

表2 Linux修改相關文件說明
    需要特別注意的是u-boot中自帶的KS8695晶元的網口驅動是使用路由板上的LAN口[5],而不是WLAN口,因而在下載Linux系統時網線應該插在LAN口上。同時,該驅動程序在複位網口時有個錯誤,會導致除第一次下載文件正常外,後續的下載文件都發生錯誤,需要手動修改源文件加以修正。將串口波特率設置為115200,啟動u-boot。通過設置u-boot環境變數,修改串口波特率為38400,設置路電板的IP地址和PC機端的IP程序。以及默認的引導參數bootcmd,如圖12所示。
 
圖12 u-boot默認參數的設置
其中zImage和ramdisk.gz分別是Demo板Linux系統編譯所得的Linux內核和文件系統,編譯的方法詳見開發包中帶的Linux說明手冊[4],param.bin是由Demo所帶的bootloader分析得到的啟動參數。將這些文件通過u-boot的TFTP功能下載到SDRAM中的指定位置,然後運行,串口輸出如下圖所示:
 
圖13 u-boot引導Linux輸出
啟動過程中會出現Flash設備載入錯誤,這是由於沒有修改Linux中的Flash驅動,由於Flash只是起到保存網頁設置的作用,因而不會影響Linux的正常運行,有興趣的朋友可以自己修改。啟動完成後,訪問Linux中的http設置網頁如圖14所示。
 
圖14 Linux設置網頁

4 結語
    本文詳細闡述了將IP0422路由器改造為適合於學習VxWorks與Linux操作系統的Arm9平台的過程。整個過程花費低廉,改造過程簡單易行。同時在改造過程中還可以學到嵌入式系統軟體與硬體的多方面知識。該改造方案是動手能力強,同時又不想花很多錢購買開發板的嵌入式開發愛好者的不錯的選擇。

參考文獻:
1、Micrel. KS8695/KS8695X Demo Board User’s Guide. USA: Micrel Company, 2004
2、Micrel. KS8695-Family VxWorks BSP User’s Manual. USA: Micrel Company, 2004
3、周啟平,張楊.VxWorks下設備驅動程序及BSP開發指南.北京:中國電力出版社,2004
4、Micrel. KS8695X SOHO Router Quick Start Guide. USA: Micrel Company, 2004
5、Micrel. KS8695X Register Description. USA: Micrel Company, 2004


[admin via 研發互助社區 ] 自製廉價的Arm9 開發平台已經有2545次圍觀

http://cocdig.com/docs/show-post-43767.html