基于WiFi的车载终端远程软件升级方法

时间:2016-10-22来源:网络

⑤Error(ERROR);

⑥OACK。

目前常用的是前5种。由于系统只需实现终端从数据采集设备上下载软件文件,无需实现完整的TFTP协议,仅实现上述第1、3、4、5类数据包功能即可。主要定义以下4个接口函数:

①RRQ发送接口函数定义:

void tftpReadQuerry(void);

该函数用于终端发送读文件请求,数据采集设备收到该包将发送文件数据包给终端;

②数据包接收接口函数定义:

void tftp_recvpacket(void);

该函数用于接收数据采集设备发送到的包,根据包类型分别对ERROR包、DATA包进行处理。如果是ERROR包则需要重新传输文件,本次传输失败。如果是DATA包,则校验后根据包号存储到FLASH指定位置,然后调用发送ACK函数回复ACK。掉包、错包等的错误处理也在该函数执行;

③ACK发送接口函数定义:

void tftpSendAck(unsigned char BlockNo[2]);

该函数用于根据接收到的包的编号回复ACK。

④ERROR包接口函数定义:

void tftpSendErr(unsigned char BlockNo[2]);

该函数用于返回传输错误信息。

文件传输实现流程如下:

①数据采集设备在端口为69的UDP上等待终端发出读文件请求包;

②终端通过UDP发送符合TFTP请求格式的RRQ包给数据采集设备;

③数据采集设备收到终端的这个请求包后,将直接发送DATA包给终端,这个DATA包中含数据采集设备选择的TID作为UDP的源端口和终端的TID作为UDP目标端口,起始包号为1,往后包号逐次加1。

④终端接收来自数据采集设备的DATA包并回复ACK。直到请求完成。

传输过程中的掉包或包错误会导致重传,重传不超过三次,否则认为传输失败。传输过程中的错误,会触发发送ERROR包。ERROR包的错误代码值供程序员分析使用。

(4)拷贝软件到应用程序区

软件正确的下载到临时区后,需要拷贝到应用程序区。该部分关键部分在于STM32内嵌FLASH的擦除与读写。

STM32F107内嵌FLASH是通过分页机制来实现对寻址空间的扩展和FLASH页面的使用和管理的。所以对FLASH的擦除操作需要按页进行擦除。即擦除FLASH不能擦除某一字节或一次擦除小于一页(2048字节)。

FLASH擦除的具体步骤:

①解锁FLASH编程控制寄存器;

②定位要擦除的扇区;

③写扇区擦除命令;

④等待命令执行完成;

⑤锁定FLASH编程控制寄存器。

对FLASH执行写操作步骤如下:

①解锁FLASH编程控制寄存器;

②向指定的地址写若干字数据;

③等待上一条命令执行完成;

④如果未写完数据,则递增源地址和目标地址,重复步骤②和③;

⑤锁定FLASH编程控制寄存器。

(5)软件跳转应用程序区

应用程序准备好后,程序需要从BOOT区跳转到应用程序区首地址处执行应用程序。这里分为两步:

①修改中断向量表位置。由于STM32F107采用ARM Cortex—M3内核,该内核的系统控制空间中写中断向量表的寄存器地址NVIC_VectTaD_ Addr为0xE000ED08,在该地址写入应用程序起始地址即可,本程序应用程序起始地址APP_START_ADDRESS为0x08005000。设计如下:

ldr r0,=0x08005000

ldr r1,=0xe000ed08

Str r0, [r1]

②跳转到应用程序首地址处执行应用程序。该步骤完成堆栈指针和程序指针(PC)的修改。在上述汇编代码之后,通过以下方式实现:

;从应用程序向量表中载入堆栈指针

ldr r1, [r0]

mov sp,r1

;从应用程序向量表中初始化程序指针(PC),并跳转到应用程序

;入口

ldr r0, [r0,#4]

bx r0

为保证软件升级错误不导致系统崩溃,将终端程序隔离为引导程序(BOOT区程序)及应用程序两部分,如单次软件升级失败仍可进行再次升级。两部分程序分别在Keil中编译,并把BOOT区程序烧写在FLASH首地址0x08005000处,以便终端启动直接进入BOOT区。用于应用程序编译夹枭瓒ㄉ招吹刂肺应用程序区首地址,并生成bin文件以便直接下载到FLASH中即可运行。

结语

该方法实现了采用WiFi通信方式,通过TFTP协议将编译后的软件文件下载到终端设备,完成软件升级的功能。在嵌入式系统领域,程序升级可以方便地对程序缺陷进行弥补和修改,或对程序功能进行扩充,运用该方法可极大提高产品的生存周期,节省对项目的维护成本和提高了开发效率。

基于该方法已成功设计出可远程在线升级程序的车辆管理系统。使用情况表明,该系统能稳定、可靠地工作,且为系统的维护节省了大量的工作量,对同类型的嵌入式设备软件在线升级设汁有很好的参考价值。

1 2

关键词: 嵌入式设备 在线升级 自举 IAP STM32 WiFi

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版