標題: 自制廉價的Arm9 開發(fā)平臺 [打印本頁]

作者: 51黑科技    時間: 2016-2-5 01:33
標題: 自制廉價的Arm9 開發(fā)平臺
摘要:基于Arm9內(nèi)核的單片機,由于其低廉的價格與優(yōu)越的性能,已經(jīng)被廣泛的應(yīng)用于各種消費類電子產(chǎn)品中。掌握Arm9單片機的開發(fā)技能已經(jīng)成為嵌入式系統(tǒng)開發(fā)者的迫切要求。但由于市面上的Arm9開發(fā)板價格不菲,使不少想學(xué)習(xí)Arm9開發(fā)技術(shù)的朋友望而卻步,其中有一大部分是各大高校的學(xué)生。本文闡述了改造ipTIME的IP0422路由器,使其成為VxWorks和Linux的Arm9開發(fā)平臺的過程。整個過程簡單易行,同時花費在150元以內(nèi),是嵌入式系統(tǒng)開發(fā)愛好者不錯的選擇。
1 改造系統(tǒng)的選取
    要動手改造Arm9開發(fā)系統(tǒng),首先要選取一款進行改造的產(chǎn)品,F(xiàn)在基于Arm9內(nèi)核的單片機被廣泛的應(yīng)用于家用路由器和手機當中,因而這兩類產(chǎn)品可以作為我們尋找改造對象的范圍。但由于手機總體的價格偏高,同時集成度比較高,電路系統(tǒng)復(fù)雜,因而不適合作為我們改造的對象。而路由器恰恰相反,現(xiàn)在100多元的路由器比比皆是,而且這些路由器基本使用單芯片,該芯片除了具有Arm9核心的控制功能外,還具有硬件上的路由算法支持,因而電路相對簡單,便于改造,所以廉價的路由器就是改造Arm9開發(fā)板的合適對象。經(jīng)過反復(fù)比較以后,最終選擇了ipTIME的IP0422。該款路由器的市場價格在100元左右,主芯片為KS8695X,是高度集成化的網(wǎng)絡(luò)通訊處理器,具有ARM922T內(nèi)核。同時該路由器還具有2M Flash,8M SDRAM,同時還留有一個SDRAM焊位,可以方便的把SDRAM的容量擴充為16M,為我們運行操作系統(tǒng)提供了足夠的空間。選擇該款路由器的另一個主要原因時KS8695X芯片提供了完備的開發(fā)資料,可以方便的從Micrel公司的FTP上
下載獲得(文中所涉及到的芯片相關(guān)資料都從該FTP下載)。開發(fā)資料中包括了供KS8695X DEMO板運行的Linux操作系統(tǒng)的源代碼和VxWorks系統(tǒng)的BSP源代碼包,雖然KS8695X DEMO與我們進行改造的路由器的硬件配置不同,但只要做少許移植工作,便可以讓以上程序支持我們的開發(fā)板,大大簡化了我們的改造過程。IP0422路由器改造完成的電路板和電路板版本號如圖1所示。以下將從硬件改造與軟件DEMO移植兩方面,詳細闡述對IP0422的改造過程。
   
圖1 改造完成電路板與電路板版本號
2 硬件改造
2.1 串口
串口對一個嵌入式系統(tǒng)是致關(guān)重要的,通過串口可以與嵌入式系統(tǒng)進行交互。我們首先進行系統(tǒng)的串口改造。如圖2所示,電路板上原本就將串口以4星條針的形式引出,估計是為了以后方便維修而設(shè)置的。經(jīng)過分析發(fā)現(xiàn),為了抗干擾,電路板上將主芯片串口的RX管腳進行了上拉,因而在一般使用中主芯片不會接收到任何的輸入信號。所以我們對串口的改造分為兩步:1、去掉RX管腳上的上拉電阻;2、自己搭建一個串口電平轉(zhuǎn)換電路,使串口可以與PC機通信。串口各管腳定義與要去掉的電阻如圖2所示。

圖2 串口電路
    串口電平轉(zhuǎn)換電路負責單片機串口與PC機串口間電平的轉(zhuǎn)換工作,使兩者可以正常通信。串口電平轉(zhuǎn)換電路使用最多的是MAXIM公司的產(chǎn)品,在這里可以使用 MAX3232或MAX232,兩者連接的電路原理圖是相同的。由于MAX3232是使用3.3V進行供電的,所以可以直接與上圖所示的4個管腳進行連接。若使用MAX232芯片,則要將芯片的供電管腳與電路板上輸入電源5V相聯(lián)。我使用的是MAX232芯片,5V電源端的連接如圖3所示。 MAX232、MAX3232連接原理圖如圖4所示:

圖3 MAX232 5V連接端

圖4 MAX232、MAX3232連接原理圖
由于以上接口電路比較簡單,假如沒有現(xiàn)成的串口電路板,可以直接購買面包板,在上面搭建,以后所說的接口電路也可用此方法構(gòu)建,不再贅述。將相應(yīng)的電路連接好后,與PC機的串口相連,打開串口工具DNW(超級終端也可以),設(shè)置波特率為38400,數(shù)據(jù)位為8,奇偶校驗為無,停止位為1,硬件流控制為0(后面使用的串口設(shè)置只有波特率不同,其他設(shè)置都按此設(shè)置)。連接開發(fā)板的電源后,可以看到路由器啟動時的提示信息,如圖5所示,說明串口改造成功。
  
圖5 IP0422啟動串口輸出
2.2 JTAG接口
    JTAG接口是作為開發(fā)板必須具備的。我們可以通過JTAG接口對板上的程序進行簡單的調(diào)試,同時,還可以通過JTAG,將程序下載到板上的SDRAM中,對板上的Flash進行擦寫操作。
    對JTAG的改造要比串口困難,因為電路板上并沒有為我們引出該接口,我們只有自己想辦法做一個引出接口。如圖6所示,圖示位置將電路板的絕緣層用小刀刮掉,露出里面的銅箔,將一個2x10的條形插針一面的9個腳焊在該銅箔上,形成接地,這與我們將要使用的wiggle簡易JTAG接口是一致的,同時還可以起到固定整個插座的作用。條針的2腳與串口接口中的3.3V電源端相連,作為簡易JTAG接口的電源腳。然后將芯片上的與JTAG相關(guān)的各個管腳引出。如圖6所示,綠色線一端連條針的第5腳,一端連芯片TDI上拉電阻R27的一端;橙色線一端連條針的第7腳,一端連芯片TMS上接電阻R28的一端;藍色線一端連條針的第9腳,一端連芯片TCK上拉電阻R29的一端;白線一端連條針的第13腳,一端直接與芯片的TDO(113腳)相連。其中白色線與芯片的 TDO(113腳)相連端是焊接的難點,由于芯片管腳太密,直接焊接很容易照成相鄰管腳間的短路,所以建議將該管腳翹起來(如圖6所示),然后再焊接,操作時要十分小心。
   
圖6 JTAG接口與相應(yīng)連線
  
圖7 簡易JTAG接口原理圖
     接口構(gòu)造完成后,可以使用wiggle的簡易JTAG口與計算機的并口相連。Wiggle的電路原理圖如圖7所示。從
http://twentyone.bokee.com/網(wǎng)站,下載H-JTAG軟件,進行安裝后,啟動H-JTAG軟件,應(yīng)該可以檢測到連接的芯片是ARM922T的內(nèi)核。再使用H-JTAG配合AXD調(diào)試軟件對芯片的存儲區(qū)域,寄存器進行讀寫,如讀寫正常,說明接口改造成功。在使用AXD時,可能會出現(xiàn)這樣的現(xiàn)象,先連接PC機并口與板上的JTAG口,再給路由板上電,然后啟動AXD時可能會報錯。解決的方法是先給路由板上電,然后再將JTAG口插到PC機的并口上,最后再啟動AXD,可以解決以上問題。
2.3 擴充SDRAM
    路由板上的SDRAM只有8MB,由于Demo板的SDRAM是16MB,為了方便直接運行Demo板的Linux系統(tǒng),需要為路由板擴充8M SDRAM。板上使用的SDRAM型號為IC42S16400-7TG,在市場中并不常見,根據(jù)查看該型號SDRAM的規(guī)格書,我們選取與其兼容的 HY57V641620HG型號的SDRAM。由于路由板上原來就留有另一片SDRAM的焊接位置,擴充比較容易,只需要在焊接時注意芯片的1腳的位置,不要將芯片焊反了。SDRAM周圍缺少的器件也都要焊上,排阻為33歐姆,電容使用0.1uF。由于原來路由器中的程序會檢測外圍SDRAM的數(shù)據(jù)寬度,進行SDRAM擴充后,原來程序?qū)⒆詣佑?2位數(shù)據(jù)寬度進行訪問。所以在擴充SDRAM后,給路由板上電如串口輸出正常(如圖5所示),則說明擴充成功。
    經(jīng)過以上步驟,路由板的硬件改造已經(jīng)完成,接下來就是要編寫,移植軟件,使路由板成為VxWorks與Linux操作系統(tǒng)的開發(fā)平臺。
3 軟件編寫
3.1 Flash燒寫軟件
    由于擴充了JTAG接口,我們可以自己編寫一個程序,對板上的Flash進行擦寫。具體原理是在路由板啟動后,通過AXD中的命令行,設(shè)置KS8695X 中的寄存器,將Flash與SDRAM映射到特定的區(qū)域,然后將擦寫程序下載到SDRAM中運行,對板上的Flash進行編程。關(guān)于這方面文章網(wǎng)上已經(jīng)有很多,同時還提供有源代碼,在此就不再贅述。這里只把要點說一下。由于Arm9芯片具有MMU單元,默認的路由板上的原始程序是Linux,默認情況下會把MMU單元打開,使用數(shù)據(jù)緩存,所以我們在AXD Command窗口中執(zhí)行內(nèi)存區(qū)域配置時,要先把開著的MMU單元和數(shù)據(jù)緩存關(guān)閉,這樣對KS8695寄存器的配置才會正確。對MMU中寄存器的設(shè)置如下圖所示:
   
圖8 AXD中CP15寄存器的設(shè)置
    在Command窗口中鍵入命令obey C:\cfg.ini(假定自己編寫的配置文件cfg.ini在C盤根目錄下),SDRAM被映射到了0x0—0xFFFFFF區(qū)域,F(xiàn)lash被映射到了0x2800000—0x29fffff區(qū)域。將Flash燒寫程序下到0x0處開始運行,將串口波特率設(shè)置為115200,串口輸出如圖9所示。按 “1”鍵選擇燒寫Flash,從DNW的“serial port”菜單中選transmit,然后選擇發(fā)送要燒錄的文件就可以對Flash進行擦寫了。我的路由板上使用的Flash芯片型號為Spansion 公司的S29AL016D70,不同型號的Flash,扇區(qū)分布與廠家ID可能不同,擦寫協(xié)議也有可能不同,要對相應(yīng)部分的程序做適當?shù)男薷摹?br />   
圖9 Flash擦寫程序串口輸出
3.2 VxWorks BSP包的移植
    Demo程序自帶VxWorks的BSP包。根據(jù)Demo板的Datasheet[1]和VxWorks說明文檔[2]中的說明,我們選擇與這塊路由板的配置基本相同的KS8695X構(gòu)建目標進行改造。經(jīng)過比較兩者最大的差別就是在Flash部分,因而需要改寫B(tài)SP包中與Flash接口的部分。其中包括 Flash的初始化、擦寫邏輯、程序在Flash中的布局,文件系統(tǒng)與Flash的接口等[3]。涉及到的主要文件與實現(xiàn)的功能如表1所示:


文件名
修改說明
Ks8695p.h、config.h
提供路由板相關(guān)寄存器設(shè)置值
flashFsLib.c
實現(xiàn)FAT文件系統(tǒng)接口
flashDrvLib.c
實現(xiàn)Flash操作接口
flashAmdMem.h、flashAmdMem.c
具體實現(xiàn)S29AL016D70的各種操作
flashMem.h、flashMem.c
提供程序在Flash中存儲的位置和系統(tǒng)記錄啟動參數(shù)的接口

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

圖11 Flash引導(dǎo)VxWorks輸出

開發(fā)包中帶有供Demo使用的Linux系統(tǒng),由于Demo板使用的Flash為4M[4],該Linux系統(tǒng)中Linux內(nèi)核加上文件系統(tǒng)有2M多,路由板上使用的是2M的Flash,而且沒有擴充的可能性,顯然不能直接使用。經(jīng)過對Demo板自帶的引導(dǎo)程序的分析,發(fā)現(xiàn)Demo板在運行Linux前,引導(dǎo)程序?qū)inux系統(tǒng)整個拷貝到16M的SDRAM中運行。我們的路由板已經(jīng)擴充為16M的SDRAM,所以我們可以不將Linux系統(tǒng)存儲在 Flash中,而直接使用網(wǎng)絡(luò),將Linux系統(tǒng)下載到SDRAM中然后運行。當然,要將Linux直接下載到SDRAM中運行,還需要有引導(dǎo)程序的幫助。u-boot是Arm系統(tǒng)中廣泛使用的引導(dǎo)程序,同時其中已經(jīng)有使用KS8695芯片的構(gòu)建目標,目標的配置名稱是cm4008,所以我們選擇在原來的構(gòu)建目標上進行改造,將u-boot移植到我們的路由板上。關(guān)于u-boot的移植的文章網(wǎng)上很多,移植方法在此就不再贅述,涉及到的主要文件與實現(xiàn)的功能如表2所示:



文件名
修改說明
include\configs\cm4008.h
u-boot特定平臺的配置文件
include\asm-arm\arch-ks8695\platform.h
硬件平臺的參數(shù)設(shè)置
board\cm4008.c
u-boot初始化設(shè)置
board\flash.c
u-boot中flash的接口部分
drivers\ks8695eth.c
u-boot中使用KS8695的驅(qū)動

表2 Linux修改相關(guān)文件說明
    需要特別注意的是u-boot中自帶的KS8695芯片的網(wǎng)口驅(qū)動是使用路由板上的LAN口[5],而不是WLAN口,因而在下載Linux系統(tǒng)時網(wǎng)線應(yīng)該插在LAN口上。同時,該驅(qū)動程序在復(fù)位網(wǎng)口時有個錯誤,會導(dǎo)致除第一次下載文件正常外,后續(xù)的下載文件都發(fā)生錯誤,需要手動修改源文件加以修正。將串口波特率設(shè)置為115200,啟動u-boot。通過設(shè)置u-boot環(huán)境變量,修改串口波特率為38400,設(shè)置路電板的IP地址和PC機端的IP程序。以及默認的引導(dǎo)參數(shù)bootcmd,如圖12所示。

圖12 u-boot默認參數(shù)的設(shè)置
其中zImage和ramdisk.gz分別是Demo板Linux系統(tǒng)編譯所得的Linux內(nèi)核和文件系統(tǒng),編譯的方法詳見開發(fā)包中帶的Linux說明手冊[4],param.bin是由Demo所帶的bootloader分析得到的啟動參數(shù)。將這些文件通過u-boot的TFTP功能下載到SDRAM中的指定位置,然后運行,串口輸出如下圖所示:

圖13 u-boot引導(dǎo)Linux輸出
啟動過程中會出現(xiàn)Flash設(shè)備加載錯誤,這是由于沒有修改Linux中的Flash驅(qū)動,由于Flash只是起到保存網(wǎng)頁設(shè)置的作用,因而不會影響Linux的正常運行,有興趣的朋友可以自己修改。啟動完成后,訪問Linux中的http設(shè)置網(wǎng)頁如圖14所示。

圖14 Linux設(shè)置網(wǎng)頁
4 結(jié)語
    本文詳細闡述了將IP0422路由器改造為適合于學(xué)習(xí)VxWorks與Linux操作系統(tǒng)的Arm9平臺的過程。整個過程花費低廉,改造過程簡單易行。同時在改造過程中還可以學(xué)到嵌入式系統(tǒng)軟件與硬件的多方面知識。該改造方案是動手能力強,同時又不想花很多錢購買開發(fā)板的嵌入式開發(fā)愛好者的不錯的選擇。



作者: viatek001    時間: 2017-1-7 09:59
頂一個。技術(shù)的真正價值源于實際應(yīng)用,ARM的應(yīng)用前景會越來越好,現(xiàn)在ARM也開始在工業(yè)控制行業(yè)和EOS(嵌入式操作系統(tǒng))、MCU強強聯(lián)合了,易德電子的ARM架構(gòu)+嵌入式OS+單片機控制的嵌入式工控電腦已經(jīng)在醫(yī)療機械、工業(yè)控制、檢測設(shè)備、珠寶加工設(shè)備、激光設(shè)備等行業(yè)/產(chǎn)品上用了。
作者: qwe1818    時間: 2017-12-5 15:20
樓主威武




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1