標(biāo)題: 自制廉價(jià)的Arm9 開發(fā)平臺(tái) [打印本頁]

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

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

圖3 MAX232 5V連接端

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


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

表1 BSP修改相關(guān)文件說明
    將相關(guān)文件修改好后,根據(jù)BSP說明[2]中的方法編譯bootrom,選擇的編譯目標(biāo)是KS8695X。接下來根據(jù)說明中的方法編譯適用于網(wǎng)絡(luò)下載的 VxWorks映象和適用于Flash引導(dǎo)的VxWorks映象,同樣使用的編譯目標(biāo)是KS8695X。將bootrom下載到路由板上,同時(shí)設(shè)置好 FTP服務(wù)器,設(shè)置串口波特率為9600,默認(rèn)情況下bootrom通過FTP從網(wǎng)絡(luò)上下載引導(dǎo)啟動(dòng)VxWorks映象,啟動(dòng)過程如圖10所示。也可以修改bootrom中的啟動(dòng)參數(shù),從Flash的FAT文件系統(tǒng)中引導(dǎo)啟動(dòng)VxWorks映象,啟動(dòng)過程如圖11所示。經(jīng)過修改的BSP實(shí)現(xiàn)原有BSP的所有功能,各項(xiàng)功能的使用及參數(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,而且沒有擴(kuò)充的可能性,顯然不能直接使用。經(jīng)過對(duì)Demo板自帶的引導(dǎo)程序的分析,發(fā)現(xiàn)Demo板在運(yùn)行Linux前,引導(dǎo)程序?qū)inux系統(tǒng)整個(gè)拷貝到16M的SDRAM中運(yùn)行。我們的路由板已經(jīng)擴(kuò)充為16M的SDRAM,所以我們可以不將Linux系統(tǒng)存儲(chǔ)在 Flash中,而直接使用網(wǎng)絡(luò),將Linux系統(tǒng)下載到SDRAM中然后運(yùn)行。當(dāng)然,要將Linux直接下載到SDRAM中運(yùn)行,還需要有引導(dǎo)程序的幫助。u-boot是Arm系統(tǒng)中廣泛使用的引導(dǎo)程序,同時(shí)其中已經(jīng)有使用KS8695芯片的構(gòu)建目標(biāo),目標(biāo)的配置名稱是cm4008,所以我們選擇在原來的構(gòu)建目標(biāo)上進(jìn)行改造,將u-boot移植到我們的路由板上。關(guān)于u-boot的移植的文章網(wǎng)上很多,移植方法在此就不再贅述,涉及到的主要文件與實(shí)現(xiàn)的功能如表2所示:



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

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

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

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

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



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




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