电子开发网
您的位置电子开发网>电子制作>

自制廉价的Arm9 开发平台

时间:2007-10-08   来源:   作者:张懿   点击:……  字体大小:【

摘要:基于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


Tags:ARM   ARM9   开发    
  • 关于本站 - 联系我们 - 网站地图 - 网站留言 - 返回顶部