您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页基于以太网的嵌入式系统软件升级技术

基于以太网的嵌入式系统软件升级技术

来源:华佗小知识
— 一 、 | 基予以太网的嵌 式系统软件升鲁啦术 Flash烧写程序将其固化在Flash中,由于操作系统映象文 件可直接在SDRAM中运行,因此在调试阶段可以省略程 序固化过程。 本文嵌入式系统的开发环境采用AVR系列的精简指令 集高速8位嵌入式微控制器ATMEGA32和面向嵌入式系统 的网络控制芯片ENC28J60为硬件实现平台。ENC28J60作 为一款面向嵌入式应用的以太网控制器芯片,具备小封 装、高集成度的特点,区别于其他EISA(增强形工业标准架 构)接1:3的以太网控制芯片,采用最大速度为10Mbit/s 的SPI(同步串行接口)作为单片机接1:3,只需4条连线即可 与主控单片机连接。系统通过RJ45接13接入网络,从而进 行系统的远程访问。嵌入式微控制器ATMEGA32与网络控 制芯片E N C 2 8 J 6 0的连接原理图如图1所示,通过 与ATMEGA32相连的以太网控制器ENC28J60和以太网接 口,即可以以太网速率将所需文件下载到ATMEGA32相 连的SDRAM中,达到文件快速下载的目的。 n.t ̄'1'74复化}U路 SDRAM-4 一…A1 G^: 微控制器 __ -4- .L: : - 一 图1嵌入式系统开发平台硬件结构 2 TFTP协议服务器端实现 应用层(HTTP,TFTP…) {  l一\重,/ I_ ! uIP 议栈 { 网络设备驱动(ENTHERNET,SLIP…) 图2 ulP1.0体系结构 为了简化目标板与PC机的通信过程,确保在目标平 台上无操作系统的前提下,能够从PC机上快速下载比较 大的文件到目标平台上,必须选择一款合适的最大幅度 精简的TCP/IP协议栈。ulP1.0协议栈是专为8位和16位的 嵌入式微控制器设计的微型TCP/IP协议栈,它提供了网 络通信所必须的协议,本身代码和占用的内存数都非常 少,ulP1.O的源代码只有几KB,RAM占用仅几百字节。 另外,它完全由C语言编写的开源软件,可以对其源代码 进行修改,以适应于具体的系统。嵌入式TCP/IP协议为四 层,分别是应用层、传输层、网络层和数据链路层,其体 系结构为如图2所示。 ulP1.0处于网络通信的中间层,TFTP协议处于网络 通信的应用层,而下层硬件或固件被称为网络设备驱动。 2.1 ulP1.0程序接口 uIP1.0内核中有两个函数直接需要底层设备驱动程 序的支持:一是uip—input()。当设备驱动程序从网络层收 到一个数据包时要调用这个函数,设备驱动程序必须事 先将数据包存放到uip—buf[】中,包长放到uip—len,然后 在uip的轮询循环中调用tapdev—read()函数检查uip—len 是否大于0,如果uip—len大于O则说明收到了数据,循环 中就分类处理各种协议的请求,如果程序有数据需要发 囡 送调用uip—send()发送数据,它同样是把数据送入数据缓 困 冲区uip_buf,设置uip—len,主循环会在本次循环中调用 国 tapdev园 —send()函数把数据送入网卡。另一个需要驱动程 序支持的函数是uip—periodic(conn)。函数用于ulP内核 对各连接的定时轮循,此需要一个硬件支持的定时程序周 期性地用它轮循各连接,用于检查主机是否有数据要发 送,如有,则构造lP包。 为了将用户的应用程序挂接到uIP1.0中,必须将宏 UlP_APPCALLO定义成用户接口函数名,这样每当某个 ulP1.0事件发生时,内核就会调用该应用程序进行处理。 由于TFPT协议通常要求传输层UDP协议承载,所以还需 要在ulP1.0的配置文件uipopt.h中定义宏UIP—UDP为1以 及将宏UIP—UDP_APPCALL定义为应用层TFTP协议实现 函数的函数名(UDP用户接13函数名)来开启ulP1.0协 议栈中的UDP功能。此外,还需要定义宏UIP—ACTIVE— OPEN为1,也就是开启ulP的主动连接功能。 2.2 ulP1.0下TFTP协议实现 要在uIP1.0下实现TFTP协议,首先要定义当前块 编号current—sector、应答块编号ack—sector及操作码 67 201 0.07。广东通信技术 按 术 交_ 流 opcode--个无符号整型16位变量;一个指向SDRAM的无 如下: void tftp—符号整型8位指针型变量p;另外,对TFTP的五种报文格 式类型分别定义五个宏TFTP—OPCODE—READ、TFTPserver_init(void) { OPCODEREAD、TFTPOPCODEDATA、TFTP———— u1 6_l any[2]; ,/主动连接 ̄JTFTP客户端192.168.2.244的udp 10000端口 uip—OPCODEACK及TFTPOPCODEERROR,并定义这 _—五个宏的操作码值分别为1、2、3、4、5。定义好的这些 变量及宏后,就可以在ulP1.0中UDP用户接口函数实现 TFTP协议,具体实现的流程如图3所示。 ipaddr(any,1 92,1 68,2,244); —conntffp=uipudp——new(any,HTONS(10000)); :至 _ t ; 弈露> — 一~ 一一一conn_tftp一>lport=HTONS(69); /,绑定本地端13为tftp server的端口 一:。鼍委奢 捕 一一一—~~ 雇 , 二。一 ~~ ~、~ 一O—69 0 .Op  co…de 3 、 (”’“ ‘ 一~一一 —pcode I }1…I、I hl lll 。.O,p  co de 2  .… ) PC机端作为TFTP客户端对使 用的端口号并不关心,只需要保证 i…——I- 一. j 特j Jip a1)Pd 舶 ti个  il¨1p appdata彳 IGJ柏第将(11J fjll1 sfl( 1(,r,佝ff[艘八 一旧个 ● -II 将IJiI)appdata]旨向的笫 叫峭个 的编 呲 ¨【I【1t… l; ;丌始r'fJ.51 2"i、 1 2剑}.抖彳f 0的 储  城…I,II划II,j f】的仇脚血J l 2 圜 困 圜 圜 将”…tt t ̄ appda 俯 竿 、 一J ? ” 该端口号在本机上唯一即可,客户端 口号又称作临时端口号,这里设置 I将 ¨1l l{…t01俩舭八I】i P }1)Ij(】¨T。 TFTP客户端的端口号为1 0000。 3 Flash技术 图3 TFTP协议写过程工作流程 在图3中,PC机端的TFTP客户进程发出写请求指明 要写入的文件名和模式,如果该文件能被该客户写,目标 ATmega32采用32K字节的系统内可编程Flash,以 往的方法是它允许程序存储器通过ISP串行接口,或者通 用编程器进行编程,也可以通过运行于AVR内核之中的 弓I导程序进行编程。引导程序可以使用任意接口将应用程 平台上的TFTP ̄E务器就返回块编号为O的ACK包,该客户 进程就将文件的头2 byte以块编号为1发出,服务器则返 序下载到应用Flash存储区(Appl cation Flash Memory)。 在更新应用Flash存储区时引导Flash区(Boot FIash 回块编号为1的ACK。TFTP客户随后发送块编号为2的数 据,TFTP客户返回块编号为2的ACK,重复这个过程直到 Memory)的程序继续运行,实现了RWW(具有同时读写的 能力)操作。为此,可从网上下载开源的flash.utils源代码 包,移植到该开发板上,执行flashcp命令就能完成flash 分区的更新烧写。 这个文件传送完,除了最后一个数据分组可含有不足51 2 byte的数据,其他每个数据分组均含有512 byte的数据, 当TFTP客户收到一个不足512 byte的数据分组时,就知 道它收到最后一个数据分组(若文件长度恰好为51 2 byte的 整数倍,则文件传送完毕后,还必须在最后发送一个只含 首部而无数据的数据PDU。 此外,还需要在主函数main中还需要对tftpserver初 本升级系统中用jfss2T具把需要更新的文件系统和 内核生成映像文件,通过TFTP下载,然后用flashcp命令 把映像文件烧写到Flash的第中,直接覆盖原来的映像文 件,然后设备command line让内核从对应flash上的jfs2 文件系统的烧录位置挂载根文件系统。系统启动后,对系 统关键设备初始化,然后启动Boot—loader,将Flash上的 始化,目的就是TFTP服务器主动对TFTP客户端器进行连 接,并绑定本地的通信端13,tftpserver的初始化主体程序 68 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务