历史上的今天
返回首页

历史上的今天

今天是:2024年10月18日(星期五)

正在发生

2019年10月18日 | 自制廉价的Arm9 开发平台

2019-10-18 来源:51hei

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

开发包中带有供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所示:



文件名

修改说明

includeconfigscm4008.h

u-boot特定平台的配置文件

includeasm-armarch-ks8695platform.h

硬件平台的参数设置

boardcm4008.c

u-boot初始化设置

boardflash.c

u-boot中flash的接口部分

driversks8695eth.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平台的过程。整个过程花费低廉,改造过程简单易行。同时在改造过程中还可以学到嵌入式系统软件与硬件的多方面知识。该改造方案是动手能力强,同时又不想花很多钱购买开发板的嵌入式开发爱好者的不错的选择。


推荐阅读

史海拾趣

CBM_America_Corporation公司的发展小趣事

随着科技的快速发展,CBM_America_Corporation意识到传统电子产品市场的饱和趋势。为了保持竞争力,公司决定进行创新转型,将业务重心转向智能家居和物联网领域。通过研发智能家居设备和物联网解决方案,CBM成功打开了新的市场空间。同时,公司还积极拓展多元化业务,涉及到了电子支付、数据安全等领域,进一步提升了公司的综合实力。

CAROLCABLE公司的发展小趣事

CAROLCABLE公司的创立,标志着电子线缆行业迎来了一位新的竞争者。在电子科技飞速发展的时代背景下,创始人凭借对线缆技术的深刻理解和市场需求的敏锐洞察,决定创立CAROLCABLE公司。公司初期,面临着资金短缺、技术瓶颈和市场认知度低等多重挑战。然而,创始人凭借着坚定的信念和不懈的努力,带领团队克服了一个又一个困难。他们积极研发新产品,优化生产工艺,提高产品质量,逐渐在市场上站稳了脚跟。

随着公司业务的不断拓展,CAROLCABLE开始与一些知名的电子企业建立合作关系,为其提供高质量的线缆产品。这些合作不仅为公司带来了稳定的订单和收入,也进一步提升了CAROLCABLE在行业内的知名度和影响力。

Hitachi (Renesas )公司的发展小趣事

在激烈的市场竞争中,CAROLCABLE公司深知技术创新是企业发展的核心动力。因此,公司不断加大研发投入,引进先进的生产设备和技术人才,推动技术创新和产业升级。经过多年的努力,CAROLCABLE成功研发出了一系列具有自主知识产权的高性能线缆产品,这些产品在传输速度、稳定性和耐用性等方面均达到了行业领先水平。

随着产品技术的不断升级,CAROLCABLE开始积极拓展国内外市场。公司参加了多个国际电子线缆展会,与全球同行交流学习,寻找合作机会。同时,CAROLCABLE还加强与国内大型电子企业的合作,为其提供定制化的线缆解决方案。这些举措不仅为公司带来了更多的商机,也进一步巩固了CAROLCABLE在电子线缆行业的领先地位。

这两个故事仅是对CAROLCABLE公司发展起来的简要描述,实际上,公司的成长历程中还有许多值得探讨的细节和里程碑事件。如需了解更多关于CAROLCABLE公司的故事,建议查阅相关新闻报道或公司官方资料。

ARBOR公司的发展小趣事

ARBOR公司深知合作的重要性,积极与上下游企业建立紧密的合作关系。公司通过与供应商和客户建立长期稳定的战略合作关系,实现了资源共享和优势互补。这种合作模式不仅降低了公司的运营成本,也提高了产品的竞争力。同时,ARBOR公司还积极参与行业交流活动,推动整个电子产业的健康发展。

Epistar Corp公司的发展小趣事

作为一家电子产品制造企业,Epistar始终关注环保和可持续发展问题。公司积极采用环保材料和生产工艺减少污染排放和能源消耗;同时,Epistar还加强了对废旧产品的回收和处理工作以减少对环境的负面影响。这些努力不仅提升了公司的社会形象也增强了公司的市场竞争力。

Dolphin Interconnect Solutions Asa公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Dolphin Interconnect Solutions ASA面临着前所未有的挑战。为了应对这些挑战,公司积极调整战略方向,加大在人工智能、物联网等新兴领域的投入。同时,Dolphin还加强了与产业链上下游企业的合作,共同推动产业链的转型升级。这些努力使得Dolphin在激烈的市场竞争中保持了稳健的发展态势。

问答坊 | AI 解惑

WinCE 5.0边做边学(1)

从微软公司寄来了我定购的免费光盘,让我很兴奋,里面我要了一份WINCE5的评估版,还要了一份Windows XP Embedded的评估版, 于是马上着手准备测试环境,开始我了对新版WinCE的学习之旅。     既然都是新学,我就想到要把我的学习过程记 ...…

查看全部问答>

步入现场控制领域的工业以太网

1 引言     传统上用于办公室和商业的以太网伴随着现场总线大战硝烟已悄悄地进入了控制领域,近年来以太网更是走向前台,发展迅速,颇引人注目。究其原因,主要由于工业自动化系统正向分布化、智能化的实时控制方面发展,其中通信已成为 ...…

查看全部问答>

地下探测雷达(金属)

第二次世界大战中英国发明的空中探测雷达对于探测飞机、火箭等目标所作出的重大贡献早已家喻户晓。但是近二十年来将雷达用于探测地下目标的技术获得了长足的发展。要探测的地下目标很多,包括金属、文物、地下水,天然气,尸体以及地下任何有断层或 ...…

查看全部问答>

请教各位大虾,初学者问个编译的问题。

我刚学嵌入式不到一个月,遇到N多问题,一路百度过来的,现在这个实在是没办法解决了,故特来此地找大虾们帮帮忙啊。 我用的 VS2005 +WINCE6.0  ,系统定制时,用的是系统的BSP,步骤是:\"建立——下一步——下一步。。。。完成\"生成 ...…

查看全部问答>

VxSim在驱动程序的开发中是不是作用很有限?

VxSim-是一个全面的VxWorks仿真器,提供和真实目标机一致的调试和仿真运行环境,允许开发者在没有BSP、操作系统配置、目标机硬件的情况下,基于VxSim迅速开始软件开发。 我想做的是CPU外围设备的驱动程序的开发,就是说跟具体的外围设备是紧密相连 ...…

查看全部问答>

这些二极管参数是什么意思?

MODEL MR821 D ( + IS = 5.989e-09 + RS = 0.00477 + CJO = 1.139e-10 + VJ = 0.7174 + TT = 3.25e-08 + M = 0.2698 + BV = 100 + N = 2 + EG = 1.11 + XTI = 3 + KF = 0 + AF = 1 + FC = 0.5 + IBV = 0.0001 + TNOM ...…

查看全部问答>

LED的 简单工作原理

replyreload += \',\' + 684436;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

电源芯片到底是怎么分类的

来自EEWORLD合作群:12425841 我看LM317 既有说线性稳压电源的 也有说开关电源的 …

查看全部问答>

芯币怎么多起来的?

今天又看我芯币多了几个了,签到才给一个的,我也没上传什么的,问下芯币是怎么多起来的?哈哈,先说好,算错了的话不许给我扣回去!…

查看全部问答>

avr studio 5.1 求助啊 !!!

新建工程文件 仿真的时候出现   错误 target voltage seems to be below operating range for this device family. Make sure the target is powered on and try again  试过好几次啦 都是这样 望高人指点啊 …

查看全部问答>