终端软件下载器设计与实现

来源:百度文库 编辑:神马文学网 时间:2024/04/28 05:04:19
目前大多公司对电子产品升级采用的是电脑软件升级工具。该升级方式采用的是联网升级,利用串口线或TCP/IP 网络对终端产品进行软件升级[1],即升级前我们可以同时将多台需要升级同一程序的终端机同时连到一个网络上,电脑升级软件每升级完一台机器会自动控制升级下一台机器。但在某一时刻一台电脑也只能对一台终端产品进行一对一升级,而在销售高峰期,大量产品需要在短时间内升级,时间紧任务紧急,造成电脑资源明显不足,不能解决对现场少量不联网的机器升级这一麻烦问题。本课题的目的主要是通过设计一个生产成本低,携带方便的终端软件下载器来解决目前对电子产品升级这一难题。该下载器通过RS485 通讯来衔接电脑软件升级工具和终端产品。它是一个集下载升级代码、存储升级代码和为终端产品升级功能于一体的升级工具。设计制作终端软件下载器首先可以解决目前一些电子技术公司在产品销售高峰期对大量电子产品短时间内升级的问题;其次还可以解决由小电子产品的服务厂家是不会面对终端客户而导致的终端客户对少量电子产品升级难的问题。
  
  1 系统总体设计
  
  整个升级系统主要分为PC 机上的软件升级工具、终端软件下载器和终端产品三大部分。我们利用PC 机上的软件升级工具对升级文件(HEX 文件)加密;利用终端软件下载器与PC 机上的软件升级工具通讯下载加密过后的升级文件,正确下载后并将该文件保存;利用终端软件下载器中存储的升级文件对终端产品进行升级。
  终端软件下载器与PC 机上的软件升级工具和终端产品的通讯是整个升级系统设计的关键,选用RS485 通讯方式;在与PC 机通讯和与终端产品通讯时终端软件下载器使用的是同一通讯协议。终端软件下载器在整个系统中起到一个桥梁的作用;与PC 机通讯下载HEX文件时,终端软件下载器相当于终端产品。在与终端产品通讯为终端产品升级时,终端软件下载器相当于软件升级工具。本次设计利用IAP 在应用编程技术对终端产品升级,终端产品与终端软件下载器通讯时主要运行引导区程序。
  
  2 系统硬件电路设计
  
  本次设计是以8 位单片机SYNCMOS SM5964 为控制中心,辅以外围控制设备,实现通过RS485 与PC 机通讯下载升级文件,利用FLASH(25VF020-040)存储升级文件,经控制中心处理后再通过RS485 与待升级的终端产品通讯对终端产品进行升级。
  通讯模块是整个系统设计的关键。终端软件下载器与PC 机和终端产品之间通讯质量的好坏直接影响着整个系统的工作效率。采用的是RS485 通讯。RS-485 总线接口是一种常用的串口,具有网络连接方便、抗干扰性能好、传输距离远等优点[2]。
  存储器模块是采用的FLASH SST25VF020 作为外接存储器,用来存放要升级的HEX 文件。
  为了使终端软件下载器更好的反应当前运行状态,方便调试,也方便以后对产品的操作,给终端软件下载器设计了人机交互模块,在尽量不系统工作的情况下改变系统配置参数、显示系统运行状态。主要包括:LCD 显示模块键盘,触发模块,声音输出模块,时钟处理模块。其中,我们用四行汉显显示屏(YXM12864)来显示当前终端软件下载器的运行情况;选用带I2C 通讯协议的PCF8563 时钟芯片为系统提供时钟;在机器操作正确或错误后用蜂鸣器给出相应提示音;为了便于机器以后的升级及其它开发,电路板留出了语音芯片的接口;按键部分选用4X4 键盘。
  对于系统复位我们使用IMP813 芯片与各种电容,电阻一起组成硬件复位电路。
  
  3 系统软件程序设计
  
  软件与硬件的有机结合就像人一样。如果硬件是人的身体,那么软件就相当于人的大脑,空有身体,头脑中没有知识或头脑干脆有了疾病,则干工作的能力就会受到很大限制。硬件电路设计完成后,系统的主要功能将依赖于系统软件来实现。
  
  3.1 系统软件总体设计
  本系统采用分层次设计。系统分为上层控制、底层驱动两大块,两块之间相互关联。其中,上层控制管理各个模块的调度及控制,运行各种算法,完成模块的控制信息生成;底层驱动各模块输入,输出并直接控制硬件工作,完成上层任务。
  对于上层控制程序的核心处理方法,我们采用状态机加消息的处理模式来调度各个模块运行;上层控制主要由按键处理模块,升级处理模块,数据处理模块,显示处理模块,声音处理模块,时钟检测模块组成。底层驱动控制RS485 通讯,对FLASH 的读写操作,检测按键信息,驱动LCD 显示当前状态及从PCF8563 读取当前时间信息。
  
  3.2 系统软件核心处理方法
  传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程;而且如果当一个事件运行时间较长时将会一直占用主循环的时间,使其它优先级高的事件无法执行。为了使系统各模块相对独立,也使系统能及时的响应各模块,本次设计采用状态机[3]和消息为核心处理方法。
  有限状态机能处理任何顺序的事件,并能提供有意义的响应——即使这些事件发生的顺序和预计的不同。状态迁移图(STD),是一种描述系统的状态、以及相互转化关系的图形方式。是一种状态迁移图,由该图可以了解到状态机的工作方式:
  状态机可归纳为4 个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果[4]。
  消息主要分为消息状态,消息体两部分。消息体里装在当前需要处理的内容,消息当前状态控制着整个消息当前状况。具体状态切换流程所示。消息状态主要分为1、空2、准备好未处理3、正在处理4、已处理四个。
  
  3.3 系统上层控制
  系统上层控制根据当前系统状态直接调度各底层驱动模块控制整个系统的运行。系统上层控制主要分为:通讯处理模块,数据处理模块,显示处理模块,按键处理模块,时钟处理模块。本文重点介绍下通讯处理部分和数据处理部分。
  3.3.1 通讯处理
  通讯帧的处理是本次设计的重点。通讯帧的处理方法直接影响着通讯升级的速度,及升级的稳定性。为了便于处理,本次设计将通讯部分分为RS485 底层处理模块、下载代码时收到一帧处理模块和升级时收到一帧处理模块三部分。
  RS485 底层处理模块主要处理帧的接收校验与发送。本次设计采用的是通讯方式3,支持多机通讯,帧的接受与发送采用的是中断方式。是中断中接收到一帧后的处理过程。
  下载代码时收到一帧后的处理模块主要任务是处理终端软件下载器与PC 机软件升级工具通讯时帧的接收、处理与发送。本次通讯协议中帧类型主要分为升级命令帧,查询帧和数据帧。
  串口中断中数据帧的处理较为特殊,一般中断收到一帧只要通过CRC 校验后就认为这一帧正确,但数据帧不同。为了保证接收到的文件正确无误,本次设计在数据帧经过CRC校验后,又经过了一系列的处理。首先验证收到的数据包是否正确,不正确直接发送数据错误帧,正确后再经过解密查看是否能通过和校验。校验正确查看上一包数据是否处理完,处理完毕封装通讯消息,发接收数据正确帧。校验通不过接收错误次数减1,当接收错误次数超过8 次后发重新升级命令。
  查询帧的子类型又分为查询POS 机状态帧,设置波特率帧,设置加密帧,擦除FLASH帧,查询FLASH 是否擦完帧等。
  对终端产品升级时收到一帧后的处理模块主要任务是处理终端软件下载器与终端产品通讯帧的接收处理与发送。主要发送升级是否结束帧,POS 机状态帧,升级命令帧,FLASH擦除帧,FLASH 是否擦除完毕帧,是否要重发上一帧,设置升级数据和加密密钥,升级数据帧,升级是否结束帧。和下载代码时收到一帧的处理模块正好相对应。
  3.3.2 数据处理
  数据处理是本次设计的核心,其主要任务是:在终端软件下载器接收到一包数据后对数据进行解密,校验,存储操作或在发送一包数据前从FLASH 中读取,处理数据的操作。IntelHEX 文件记录有其一定的格式,因此要想做好数据处理部分的工作首先必须了解Intel HEX文件。
  Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量[5],Intel HEX 文件经常被用于将程序或数据传输存储到EPROM,大多数编程器和模拟器使用Intel HEX 文件。
  一个 Intel HEX 文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式:llaaaatt[dd...]cc 每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成.
  1、数据存储方式处理
  终端软件下载器与PC 机通讯接收到一包数据,经过解密校验后,可以将解密后的数据直接存入FLASH 中,也可以将未解密的数据存入FLASH 中。两者相比较前一种方法在从FLASH 中读取数据时,直接就可以判断一包数据的长度和当前是否读到文件尾,但读出一包数据后需要加密才可以发送。而后一种方法直接将未解密的数据存入FLASH 中,当读数据时必须先解密,才能知道一包数据的长度和当前是否读到文件尾。
  16 进制文件记录格式由表1 可知记录类型字节tt 有四种类型00 ----数据记录01 ----文件结束记录02 ----扩展段地址记录04 ----扩展线性地址记录。数据记录的开始地址AAAA:这个格式最大只能寻址64K 的空间。扩展段地址记录和扩展线性地址记录当寻址64K 以外的程序时才会用到[6]。考虑到本次设计所选单片机SM 5964 最大程序空间为64K,记录类型中只会出现00 ----数据记s 录01 ----文件结束记录两种,本次设计无需对该字节解密直接判断当该字节不为0 时便认为已读到文件尾。第二种方法只需解密数据长度字节即可。与第一种方法相比简单而且节省了CPU 处理时间。因此最终这次设计选择直接将未解密数据存入FLASH 中。从FLASH 中读取数据的流程所示:
  
  3.3.3 LCD 显示处理
  本次设计的产品涉及功能较多考虑到用户在使用终端软件下载器完成某项功能后未按退出键,界面有可能会一直不回到待机显示状态。我们在显示处理中设置了限时定时器。为显示部分处理流程图。其中定时器0 设置定时10S 当一个事件处理完毕后10S 内没有其他事件请求,系统强制显示屏回到待机显示状态。例如:当我们为某一台机器升级成功后,终端软件下载器将提示升级成功,这时如果按下ESC 键则显示界面回到待机显示状态,如果不再做任何操作则10S 后终端软件下载自动回到待机显示状态。
  本次设计待机模式下通过LCD 显示当前时间日期。考虑到LCD 每次刷屏占用CPU 时间较长:整屏刷新需要耗时57MS,单行刷新需耗时约16MS。而显示时间最小单位为秒,因此设计为每500MS 读一次时钟,强制显示屏刷新一次。
  在升级和下载代码时,LCD 一直显示系统当前进度,为了能够更清楚直观的了解到系统为终端产品升级的速度我们设计了进度条。下载代码时的显示界面如所示。进度条是在图片现实模式下制作的考虑到进度条刷新需要时间较长,而当程序下载1 包时进度显示不明显。我们设计没当进度运行了5%后再刷新进度条。
  3.3.4 菜单模块、时钟模块
  为了能够了解终端软件下载器的系统设置,对其系统参数进行设置,为终端软件下载器设计了二级菜单。在待机模式下按MENU 按键进入菜单。菜单主要功能有:代码信息查询、本机信息查询;时间日期设置、地址设置、代码区设置、按键提示音设置功能。菜单主要功能有:代码信息查询、本机信息查询;时间日期设置、地址设置、代码区设置、按键提示音设置功能。
  时钟部分,由于PCF8563 中存储的时间、日期信息为BCD 码,而在程序处理中我们用到的为16 进制格式,因此需要BCD 与16 进制格式转换。在这里不做详细介绍。
  
  3.4 底层驱动  
  底层驱动直接操作单片机的I/O 口,和中断,控制外围器件工作。主要包括:按键驱动,25VF020 驱动、LCD(YXM12864)驱动、 PCF8563 时钟芯片驱动,蜂鸣器驱动。
  PCF8563 时钟芯片驱动模块按照I2C 总线读写时间数据[7];25VF020 驱动模块采用SPI总线方式进行控制[8];LCD(YXM12864)驱动模块采用串口通讯方式,P4.2 控制液晶显示背光。
  
  3.5 IAP 在线升级设计
  为了方便终端软件下载器以后的软件升级我们为其设计了升级部分。本次所选单片机SM5964 是在通用80C52 内核的基础上集成了ISP 功能的单片微控制器。
  SM5964 具有64K 字节的片内闪存通常情况下可当作通用程序存储器;64K 字节闪存中包括高达4K 的特殊存储空间专门用来存储IAP 服务程序[7]。64K 闪存的地址范围为0000H—FFFFH 而IAP 服务程序的存储空间为F000H—FFFFH。
  IAP 服务程序可通过编程器写入或擦除,但利用IAP 在线编程时,不可以修改IAP 服务程序,只可以修改应用部分的程序[8]。引导区设计流程所示,为了防止写入单片机的程序被盗IAP 引导部分在对系统升级完后都会自动对程序进行加密。
  
  4 系统调试
  
  为了方便测试我们将系统分为显示调试,下载代码调试,和升级调试三大块。其中升级调试是难点,为了确保所设计系统的稳定性在三块均测试成功后我们分别找来考勤机,车载机,POS 机等进行多次升级测试,最终系统通过了测试。
  
  5 结束语
  
  本设计以 8 位单片机SYNCMOS SM5964 及其外围扩展设备( 12864 显示屏,外挂FLASH 25VF020-040,PCF8563 时钟芯片,R485 串口通讯,4*4 键盘)为硬件平台。最终制作出一个可以存储要升级的代码,对电子终端产品(水控器,POS 机,考勤机,车载机等)升级的终端升级工具。