维普资讯 http://www.cqvip.com 第29卷第2期 电子器件 v01.29 No.2 z0O6年6月 Chinese Journal Of Electron Devie ̄ Jun.2006 Designs of Network Interface for ARM Network Program for Bootloader and Their Test Methods DENGCAun-jJan ,GAOChang-yan ,FENGYong-mao ,ZHENGXi-feng ,1.ChangchunInstitute ofOptics,FineMechanics andPhysics,TheChineseAcademy ofSciences,Changchun 130033。China;、 \2.GraduateSchool 曲#ChineseAcademy Sciencest 13eijing 100039, / Abstract:Difficulties in design of hardware and software of S3C2410X'network interface and corresponding resolvents are described.Applied debug or test methods for hardware and software design are summarized. Network program interfaces with network application programs of computer OS for ARM bootloader are designed.Remote control terminal hardware testing,program debugging,program updating or upgrading by ethernet network are realized. Key words:ARM;bootloader;s3C2410X;C ̄900A;TFTP E】 ℃:1110 ARM网口、Bootloader中网络程序的设计及其测试方法 邓春健h ,高长艳h ,冯永茂h。,郑喜凤 ,1.中国科学院长春光学精密机械与物理研究所,长春130033;、 \2.中国科学院研究生院,北京100039 / 摘 要:针对ARM9芯片¥3C2410X控制的复杂性,对其网口硬件软件设计的难点问题、相应解决方法给予详细的论述,并 总结出实用性强的软硬件调试、测试方法。在ARM的启动引导程序里设计与计算机操作系统提供的网络应用程序接口,实 现远程控制端硬件测试、应用程序调试、程序更新或升级网上进行。 关键词:删I引导装载程序;¥3C241oX;CS89oOA;TFTP 中图分类号: rP391.72 文献标识码:A 文章编号:10o5-949O(2Oo6)o2-o519-o5 在嵌入式ARM系统开发中,通常的方法是通 络应用程序大多可以使用现成的,这样开发工作既 过计算机主控制机的串行终端程序发布控制命令, 可以在Windows也可以在Linux下进行。相对 通过以太网、串口或USB下载编译好的二进制程序 USB或串口下载程序的方法,网络下载程序有着无 文件来进行程序的调试、烧写,ARM的BIOS引导 可比拟的优越性。 装载程序(Bootloader)具有相应的命令解释、接收 ¥3C2410X是一款优秀的ARM9芯片,三星公 文件的接口程序。无论是Windows还是Linux操 司提供[ ̄MDK2410评估板使用该公司提供的 作系统都有丰富的网络应用程序如PING、TFTP、 windows应用程序DNW实现程序下载,方式是通 FTP等等,只要在ARM的引导装载程序里根据网 过USB或串口方式,遗憾的是,国内大多 络协议标准添加设计相应的网络应用程序,就能实 ¥3C2410X开发板供应商沿袭了这一做法,即提供 现响应用户的PING命令,以及通过网口把程序下 的BIOS引导程序里没有相应的网络支持。由于 载到ARM系统里运行等等,这些可实现ARM系 ¥3C2410X是BGA封装,对制板布线要求较高,并 统网上硬件测试、ARM系统程序网上升级、更新等 且由于¥3C2410X庞大、繁杂的内部控制系统,设计 非常实用的功能,而运行在计算机操作系统上的网 容易出错,为了避免少走弯路,在调试硬件、软件的 收稿日期:2005’07-06 作者简介:邓春健(1980-)。男.博士生,研究方向为嵌人式操作系统的应用.dcj5880870@tOrn.com;dcj5880870@126.corn 维普资讯 http://www.cqvip.com 520 电 子 器件 第29卷 时候需要有针对性的测试方法。 的低成本以太网控制芯片,控制程序只需配置好内 下面以具有代表性的以太网控制芯片 部寄存器,即可实现网络通讯。图1是s3C2410X CS8900A为例,详细阐述s3C2410X网络接口软、 网络接口硬件电路原理图,图中E2023是网络隔离 硬件设计,及其难点问题,并说明在BIOS引导装载 变压器;93C46是用来存储CS8900A初始化参数的 程序(Bootloader)里添加PING响应、以及TFTP EEPROM,通常CS8900A的初始参数,如I/O基地 服务等ARM开发中常用的网络程序的方法,以及 址、网络芯片物理地址等存放在EEPI M里,在 和主机操作系统提供的网络应用程序接口方法,并 CS8900A复位后将初始参数读入芯片,在读初始参 总结了软硬件调试方法。 数失败的情况下,各个寄存器都是默认参数,或一些 1 网口设计以及网口驱动实现 随机值。由于S3C2410X的I/O设置、内部控制的 复杂性,以及CS8900A以太网控制器自身特点,硬 美国Cirrus公司的CS8900A是一款高度集成 件设计以及驱动编写必须明晰如下问题(限于篇幅, S3C2410X IlUI XTALI EECS CS XTAL2 EEDATAIN DO nGCS3 CHIPSEL EEDATAOUT DI nGCS3 —_上_ >一 MEMW EESK CLK ADDR24 L■ 一. MEMR -__l ——一 RXD+ ADDR[0..19】 , ,20.一 ^ .3 DATA[0—15】 16 SD[SA[0.0..115】9】 RXD・ 1J l 广 6 TXD+ —c 一 .nWBEl SBHE l TXD・ —f 6 U广一 2 nGCS3 AEN nOE 殴∞ : — l0R I. nWE ’ _、 - 10W LANLED — n、 ,Arr 10CHRDY LINKLED 口=l;I MINT10 INTRQ0 图1 S3C241ox网络硬件电路原理图 只对设计的重难点内容给予论述)。 的CS8900A内部RAM地址,然后在I/O基地址偏 1.1寻址以及CS8900A寄存器的配置 移0x000C或0x000E的地址处进行读写操作。如 ¥3C241ox对CS89OOA的寄存器控制将是一 果使用存储器模式,则是在存储器模式读写基地址 个比较复杂且难于理解的地址映射关系。对 (默认为O)加上要访问的RAM地址处进行读写操 CS89OOA的(寄存器)读写控制是通过I/O模式或 作。两种方式的读写基地址都可以更改,但是要注 者存储器模式操作。I/O模式操作是C.s89OOA的 意基地址值更改要在CS8900A和控制CPU的地址 默认操作方式,并且在C.s89OOA上电复位后一直有 允许范围。 效。I/O模式下在¥3C241oX映射连续的16个地 ¥3C2410X是通过nGC ̄[7..O]来选择地址区 址空间,通过操作这16个地址实现对CS8900A内 间的,当某操作地址落入nGC_ ̄[7..O]其中之一所 部RAM的读写操作,在读操作时IOR AEN管脚 “管辖”的地址范围,该管脚将使能。图1中 必需为低,写操作时IOW、AEN管脚必需为低。通 s3C2410X的nGC ̄3接CS8900A的/kEN、 常通过I/O模式操作,使BusCTL的MemoryE位 CHIPSEL,这意味着CS8900A的访问地址被分配 置位,便可以进行存储器模式操作了,这种方式下 到S3C2410X的0x18000000到Ox20000000地址区 CS8900A内部4 kbyte的RAM被映射到 间。图l中, )cIR24为“0”时存储器模式读写被 s3C241OX连续的4 kbyte地址空间,一旦选择存储 允许,故存储器模式读写基地址映射区间为 器模式,CS89ooA的CHIPSEL、MEMR或MEMW 0x18000000到0x19000000;ADDR24为“1”时I/O 管脚必需拉低[1],如图1所示接法。 模式读写操作被允许,所以I/O模式读写基地址映 I/O模式读写基地址默认值是0x300,I/O模式 射区间是0x19000000到0x20000000。 下读写CS8900A内部RAM任一地址的方法是:在 设读写基地址为默认值,往“发送长度”(Tx- I/O读写基地址偏移0x000A的地址处写入要访问 Length)寄存器写入一个数0x5EE的方法,I/O操 维普资讯 http://www.cqvip.com 第2期 .邓春健,高长艳等:ARM网口、Bootloader中网络程序的设计及其测试方法 521 作模式是: *(0xl9000000+Ox300+0x0A)一0x146 l rINTPND\=BIT_EINT8—23)ff对INTPND寄存 器清0 if(rEINTPEND ̄(1<<10))//需要判断是否是 //0x146是‘‘发送长度”寄存器的内存映射基址偏移地 址,写入I/O基地址+0x0A,表示欲访问地址 *(0xl9000000+Ox300+OxOC)=Ox5EE) CS89OOA产生的中断 { rEINTPEND I一1<<10; //将0xl46地址里的数据从I/O读写基地址+0x0A地 址里读出来 或者: *(Ox19000000+0x300+0x06)=0xSEE ̄ //或者从I/O读写基地址+Ox06的地址直接写入 存储器操作模式是: *(0x19000000+0x300+0x0A)=0xl16l//首先应该 使BusCTL的McmoryE位置位。 *(0x19000000+Ox300+OxOC)I (1<<1O);//允 许存储器操作模式读写 *(0xl8000000+0x146)=0x5EE ̄//假定存储器模式 读写基地址为0 1.2 中断以及数据的读取和发送 ¥3C2410X对CS8900A产生的网络事件可通 过中断方式或是查询方式获得。从提高CPU的效 率起见,采用中断方式。 ¥3C2410X的I/O管脚通常可以配置成输入、 输出、中断源或其它方式,图1 EINT1O/GPG2管脚 作为S3C2410X的以太网中断信号源,这就需要在 初始化时,在GPGCON寄存器的D[5..4]两位置 为“1O”来配置EINT1O/GPG2管脚作为中断引入。 另外管脚的中断方式又有低电平、高电平、上升沿、 下降沿、双沿等方式触发,这由EXTINT[O..2]寄 存器来选择E扪。 CS89ooA提供了4个中断请求信号,中断信号 管脚是在内存映射基址偏移地址0x022里指定的, 中断允许的情况下,如果有中断产生,对应管脚将会 置高。¥3C2410X的中断方式绝对不允许设成电平 或双沿触发方式,否则¥3C2410X将会响应多遍中 断。S3C2410X的外部中断8到23使用的是一个 中断源EINT8—23,当发生了中断,寄存器INTPND 的D5位置1,另外还要通过查询EINTPEND来进 一步确定是否是中断1O,来于网络控制芯片的中 断,网络控制芯片如果发生中断,D10位会置1。需 要注意的是在中断服务程序里需要对SRCPND、 INTPND、EINTPEND寄存器的中断发生位通过写 “1”来清“0”。 if(rlNTPND ̄BIT EINT8_23)//BIT EINT8—23值为(0xl <<5) { rSRCPND I=BIT—EINT8—23,//对SRCPND寄存器 清0 CS8900A—ISR()l //CS8900A的中断服 务程序 ) ) S3C2410X是通过读取CS89ooA的ISQ寄存 器来确定中断类型,当ISQ的低6位分别为0x04、 Ox08等值时表示发生了接收(RxEvent)、发送等事 件(TxEvent),中断事件产生值被映射到ISQ韵高 1O位,故在CS8900A的中断服务程序CS89OOA— ISR()里先判断中断发生原因,再进一步判断该类 事件产生的确切事件,并且进行相应的中断事件处 理。当CS8900A初始化完毕,即可把中断打开,可 以正式接收和发送数据了。在中断服务程序里如果 发生了接收事件,通过ISQ高1O位确定RxOK是 否置位,若非可能出现了接收数据长小于64 byte (Runt)、CRC错误(CRCerror)、接收数据大于l 518 byte(Extradata)等错误,为避免CS8900A因为接收 数据错误而被挂起,应该在RxCFG的Skip一1(D6) 写1,并退出接收程序。如果接收RxOK置位,表示 可以接收数据了。接收数据的方法是从Rx— LENGTH读取接收数据长,I/O操作方式下根据数 据长反复从I/O读写基址偏移地址为0x00(Port0) 或0x02(Port1)处把接收数据读出来。另外,由硬 件接口特性,数据每次读出来的是2 byte,如果接收 数据长为奇数,最后一个数读出来后应该取后低字 节,高字节抛弃。操作方式下则从内部RAM偏移地 址为0x404的起始处读数据,0x402处为数据长度。 发送数据方式类似,亦遵循先查询再操作规则, 只是在发送前需要把要发送的数据长度写入“发送 长度”寄存器。 2 BootLoader中网络程序的设计 网络协议独立于硬件。在接收数据后,在固定 位置读取相应的识别字来判断协议类型。发送数据 时,则在固定位置填充协议对应的识别字和数据。 在删的引导装载程序里添加的网络功能,应该 提供网络的测通功能,即PING响应,下载程序文件 功能如TFTP服务程序。 2.1 ARP协议 ARP地址解析协议可以认为是网络通讯的“敲 维普资讯 http://www.cqvip.com 522 电子器件 第29卷 门砖”,在同一局域网两机要实现正常的TCP/IP数 存储工作。 据通信,知道对方的IP地址是不够的,还需要知道 对方的MAC地址,这是通过发送ARP广播的方式 实现的,即6字节目的MAC地址全是0xFF,目的 文件传输过程中,TI P协议数据包结构如图 2所示。 IP是对方的IP,接收方收到ARP广播后,发现6字 节目的MAC地址全是0xFF,并且目的IP是自己 的IP,则返回一个ARP应答,应答返回了接收方的 AC地址,M这样对方的MAC地址就得到了。经过 眷 I发送文件名l 黑o)l 模式I 黑0) (a)读请求/写请求教据包 这样的交互,两机可以进行正常的网络通讯了。在 未知对方MAC地址的情况下PING命令、TFTP 执行后发出的头一个数据包总是ARP广播[3]。 2.2 PING响应的实现 为试探对方是否在网上,或是判断双方网络通 畅与否,PING命令成了或不可少的工具。主机端 执行PING时,通常是先发送ARP请求,ARM程 序收到请求通过ARP应答把自己的MAC物理地 址告诉对方,这时主机再回送一个ICMP回应(ech- o)包,删程序收到后再回送一个回应答复(echo replay)包,如果这一交互无误,主机端则显示PING 成功信息。也就是说要响应主机的PING命令,只 要保证ARP应答和ICMP回应答复正确就可以 了。ICMP包是建立在IP协议上层的,确切的说应 该是IP/ICMP包,每个包都包括了三个部分:以太 网帧头(包括目的MAC、源MAC和类型)、IP头和 ICMP包,填充协议时注意IP包、I 的填写方 法,尤其是校验和的算法。 2.3哪服务程序的实现 TF1 (Trivial File Transfer Protoco1):简单文 件传输协议,运行在Ln)P(用户数据报协议)上。 TFTP是“轻量级”的文件传输协议[4],却是ARM 系统实现应用程序下载的有力工具。 首先按照UDP协议编写好UDP“填”、“拆”程 序,UDP的数据包部分即是TFTP协议包。在 TFTP协议中,发送方和接收方通过操作码(Op— code)识别操作类型,文件传输都以请求读写文件开 始的。当服务器同意请求,则连接可以正式传输文 件了。文件每次以512 byte的固定长度传送,每个 数据包包含了一个用来识别数据块标识的块号,在 发送下一个数据包前,数据块必须得到确认响应包 的确认。如果接收到少于512 byte的数据包则说 明这是最后一个数据包,传输可以结束了。如果数 据包在网络中丢失,TFTP安排了数据包重发机制, 因此能够保证文件数据完整正确地到达对方。 ARM服务程序接收来于主机的文件,只需要 作T 接收,发送应答接口,同时处理好数据的 (b)数据包 I操作码 块号n l(2byte) (2 bye) (c)应答包 图2 唧协议数据包括结构图 操作码值:1读请求;2写请求;3数据传输;4 数据传输应答i5错误指示。 数据模式:在ARM端接收值应该为“octet",说 明是八位二进制数据。 主机以图2(a)数据格式请求开始,ARM的 Bootloader中TFTP服务程序总以图2(c)数据格 式应答。当ARM程序回答(0x00,0x04)+(0x00, 0x00)时,主机端收到后即开始发送文件数据了。 主机端将按照操作码为(0x00,0x03)、图2(b)格式 发送文件,删端程序按照(0x00,0x04)+(块号) 应答。 按上述格式制作TI P服务程序,ARM端应 用程序就必然能够和计算机操作系统提供的TF1 应用程序接通。每收到一包数据,按数据块号,存放 到SDRAM的相应区域。如果在ARM上调试下载 程序,程序接收完毕,即可运行。程序调试成功后把 存放在SDRAM里的下载程序拷贝到Flash的指定 位置,ARM复位重新运行后,在Bootloader里添加 的PING响应、TF1 网络服务程序即可使用了。 不单是用来调试程序,这种方法也适合在网上更新、 升级应用程序。 3硬件以及网络程序测试方法 在进行网络程序调试前应该和外网断开,避免 外界干扰;应该保证硬件能正常运行且是可控的。 主机和ARM的网口可以通过交换机也可直接用交 叉网线相连。如果不出意外,连接后LINKLED指 示灯应该亮,在主机端执行PING命令,显示器每次 出现“Request timed out.”的时候与LANLED相接 的LED应该会闪一下,如果ARM的网口有数据发 维普资讯 http://www.cqvip.com 第2期 .邓春健,高长艳等:ARM网口、Bootloader中网络程序的设计及其测试方法 523 出,对方的LANLED也会闪。这说明ARM网口和 主机网口是可通的,若非则有必要检查线路了。(注 意:在电路板焊接¥3C2410X前一定要检查管脚焊 接处与网络控制器的线路,否则可能给后来的调试 带来极大麻烦) 读取CS89OOA的寄存器(如读产品ID),如果 是默认值则表示CS89OOA能正常读取(先不考虑 EEPR0M),表示数据线、地址线、读控制连接正确。 当SelfCTL寄存器的HCoE置1,LANLED管 脚为HCO工作模式,即¥3C2410X可以通过Self— CTL寄存器的HCB0位来控制该管脚电位,这就给 我们一个直观的看CS8900A是否受控的方法,如果 与LINKLED相接的LED能够应如下指令亮、灭, 则表明数据线、读写控制都正常,¥3C2410X可以控 制网口芯片了,可以调试网络程序了。 *(volatile short*)(0x19000300+Oxa)=0x0114I// I/O操作,对象是SelfCTL寄存器 *(volatile short*)(0x19000300+0xc)I;(1<< 0xOc)l//HC0方式 *(volatile short*)(0x19000300+0xc)&=~(1< <OxOe)I//LINKLED灭 *(volatile short*)(0x19000300+0xc)l一(1<< 0x0e),II LINKLED亮 在调试网络程序时最好在主机端运行如Win— dump、网络协议分析软件来帮助分析ARM网络程 序以及主机端网络应用程序发出的数据。 为了方便,在调试响应PING命令时,在程序里 可以不理会IP来源,只要是PING命令的IP/IC— MP包即作应答,在主机对同一网段任一IP(除本机 IP外)执行PING命令,如果主机收到PING成功 信息,然后便可在程序里增加IP地址判断,即符合 自己的IP才给予应答。 TFTP的用法是TFTP[一I]host[-GET} PUT]source[destination]。把zImage.bin拷到如 C盘根目录下,在主机运行Windows的命令提示 符,键入“tftp-i 192.168.0.100 put C:\zlmage.bin” (Linux系统下只需要把“C:\zlmage.bin”换成如“/ root/zlmage.bin”的目录即可)。如果命令提示符 提示如“Transfer successful:63836 bytes in 1 sec— ond,63836 bytes/s”则表示删的TFTP服务程 序已经完全接受了主机上传的文件。 如果在文件传输成功后,命令提示符提示的传 输文件字节数远远小于传输文件字节数,很可能 TFTP命令后“一i”参数没键入,发送二进制文件, TFTP的第一个参数[一I]必须要有,否则不可见字 符会在主机端忽略掉不传输。 文件传输成功并不能说明上传的应用程序可以 正确在ARM上运行了。运行上传程序后,如果 ARM“死机”了,这很可能是上传的应用程序存储时 出现了问题,可以在ARM程序里添加调试信息,借 助串行终端在主机显示器打印所怀疑的错点。另外 可以通过播放用TFTP下载的WAV音频文件,从 “听”出的噪音、不连续、断音等等来确定出错的大 概。 4 总结 通过上述方法,设计S3C241OX的网络接口以 及在¥3C241OX的引导装载程序中加入网络功能, 实现了ARM系统网上硬件测试、程序网上下载调 试、升级、更新等功能。这适合远程控制端地处复 杂、甚至危险的状况下对其进行硬件测试,程序调 试、升级、更新的应用。设计思想不仅适合ARM9 而且适合ARM7,甚至其它微处理器,并且可以在 此基础上增添更多的网络应用程序。 参考文献:  ̄13 CIRRUS LOGIC,CS8900A Product Datasheet Ez3.USA: CIRRUS LoGIC Inc。2001. [23 suMsUANG ELEcTRONIcs¥3C2410X Usegs Manual[Z']. Republic of Korea:Sumsang,2003. [33周其伟,堵国梁等.网络和串口交互接口设备的实现口]_电子 器件,2004,27(3);508—511. [4]Network Working Group Sollins.T兀 Protocol(Revisi- on2)[.DB/OL].http://ww ̄.javvim com/pmtocol/rfc1350. pdf,July 1992.