图4-3 TCP报文格式
4.2 通信模块设计
4.2.1通信协议裁剪
TCP/IP 协议是一个非常庞大的体系,鉴于嵌入式系统资源有限,不大可能将所有TCP/IP协议进行集成,所以在对TCP/IP进行裁剪的基础上,将其作为嵌入式软件的一部分,应用到嵌入式系统中,使数据传输按TCP/IP 协议格式封装,从而达到在Internet 上传输的目的[8]。由于课题是更新嵌入式设备的软件内容,错误的固件数据写入Flash并运行时会对嵌入式系统产生不可预知的错误影响,因此要求通信模块能够准确传输每一位数据。UDP协议是一个不可靠,无连接的协议,发生传输数据错误需要应用层上纠错。TCP协议虽然性能不如UDP,但TCP中流量控制重组包和连接文护等影响性能的附加开销却提供了更为可靠的数据连接。因此,本系统中选择面向连接的TCP协议作为传输层协议。在应用层上,系统没有使用现成应用层协议,因为实现这些协议会大量消耗嵌入式系统的宝贵资源。嵌入式系统上的软件建立一套直接使用TCP协议和上位机传输数据的机制。除TCP协议外,还实现了ARP,ICMP 及IP 协议,其它协议一起被裁剪。
4.2.2应用层设计
网卡的驱动和裁剪的TCP/IP协议栈实现了嵌入式系统利用以太网与上位机进行数据传输的通道,但具体的通道内容和方式还是应用层协议来规定。应用层实现的功能是将从上位机将需要升级的固件数据传送到DSP端,同时进行通过检验确保数据传输正确;传输升级控制命令,比如升级开始;向上位机传输升级信息说明,比如DSP端开始烧写Flash,Flash烧写成功等。同时应用层还要有明确的流程协调处理整个升级流程,并当传输数据发生错误或者烧写错误时,有相应的处理机制。
为了实现升级数据和信息的传输,升级过程的协调,应用层提供了以下升级帧来完成整个升级时的通信流程。
表4-1 上位机和嵌入式系统升级时的通讯协调时发送的内容及其含义
发送内容 含义
0x0404 升级开始
0x0505 开始升级
0x06+Data 升级数据
0x0707 Flash烧写开始
0x0808 Flash烧写成功
0x0909 Flash烧写失败
0x1010 回传比较一样
0x1011 允许DSP烧写
本次毕设中,升级的固件程序小于1KB,因此只要发送一帧。上位机利用目的DSP的IP地址和端口号与目的DSP建立连接。然后等待上位机发送升级申请帧。升级时,上位机和嵌入式系统之间具体通信协调过程如图所示。
图4-4 上位机和嵌入式系统升级时的通讯协调过程
升级开始之后,上位机首先向DSP发送0x0404帧,通知DSP升级开始。DSP在收到升级帧0x0404后,返回0x0505帧告知上位机,DSP进入升级流程,上位机在接受到0x0505帧后,在升级数据头前加0x06并发送。DSP收到帧后,通过0x06头判断出接受的升级数据,然后将升级数据取出存储,并将原始数据重新传给上位机进行检验。同样上位机在通过0x06头判断接收到的是重传过来的升级数据,然后与先前发送的数据进行比较,如果比较发现重传数据和先前的数据不一样,则重新发送数据,或者在停止发送数据。如果比较一致,则说明上位机已经将升级数据正确传输到DSP端,发送比较一致帧。DSP在接到上位机发送的说明重传数据比较一致的0x1010帧后,向上位机发送开始烧写的信息,并开始将固件数据烧写进Flash。最后DSP向上位机发送烧写结果说明,说明烧写成功或者失败。
下位机为了实现与上位机的通信过程,采用了循环判断的方法:不断对上位机发送来的升级帧数据进行判断,对不同的升级帧数据完成不同的动作,并且通过不断循环,和上位机紧密配合,实现数据的发送和接受。下位机的通信流程如图4-5所示 嵌入式设备的远程更新平台(8):http://www.751com.cn/zidonghua/lunwen_9473.html