基于GD32的网络在线烧写技术研究

2024-05-17 11:57:00宋书龙
计算机测量与控制 2024年4期
关键词:固件终端设备上位

宋书龙,葛 露

(中国西南电子技术研究所,成都 610036)

0 引言

嵌入式设备在实际使用中可能会遇到各种软件问题和用户需求的变化,这就需要对软件进行升级以提供更好的功能和性能,尤其是交付到外场的设备,需要拆卸设备链接仿真器进行软件升级,对于大型复杂的设备,甚至需要多名专业人员到现场,就会导致软件升级过程比较繁琐,增加了维护成本。软件维护人员对嵌入式终端设备的软件进行维护升级,常用的方法是拆卸设备,使用仿真器工具进行烧写,而采用在线更新软件的方式,可以解决不拆设备和挂载仿真器烧写的问题。国外的公司PHILIPS的P89C51RX2xx系列单片机同时支持两种功能在系统中编程和在应用中编程,PHILIPS为了使在线更新技术得以推广,还在单片机上提供了免费的BOOT固件,使在线烧写功能实现更简单,意法半导体公司的PSD系列微控制器的片内Flash大容量存储器,也同时支持在系统中编程和在应用中编程。国内的华大半导体有限公司HC32L136系列32位微控制器支持在线APP更新,在芯片上电复位的状态下,BOOT0脚为高电平时,芯片会进入在线编程模式,通过上位机可以进行在线编程。兆易创新科技集团股份有限公司的GD32系列片上FLASH高达3 072 K字节用于存储指令或数据,支持从系统存储器启动,在应用编程则可由用户在应用中实现。本文采用GD32F450系列ARMCortex-M4内核的32位通用微控制器(MCU,microcontroller unit),处理器主频高达200 MHz,控制器内部集成了一个以太网外设,支持100 Mbps数据传输速率,借助以太网外设,GD32F450控制器可以通过ETH外设按照IEEE 802.3-2002和IEEE 1588-2008标准发送和接收数据包。文献[1-5]同类的研究大都是采用串口、CAN等总线在线烧写,本设计是利用在应用编程技术进行免拆设备,在外场通过网络在线快速升级GD32国产微控制器固件。

1 烧写技术原理

1.1 仿真器烧写

通过仿真器烧写有两种接口:一种是JTAG模式,另一种是SWD模式,JTAG(Joint Test Action Group)国际标准测试协议被广泛应用于各种基于嵌入式系统的开发、测试和编程任务中。它提供了一种通用接口,可以方便地访问芯片内部电路和功能,可以实现与目标设备的通信,读取和写入芯片内部寄存器或存储器中的内容,以及监控和控制芯片的状态,JTAG接口通常由TMS、TCK、TDI和TDO共4条线组成,TMS用于控制时序和模式选择,TCK线则提供定时脉冲,TDI和TDO分别用于输入和输出数据。SWD(Serial Wire Debug)一种和JTAG不同的模式,使用的协议与JTAG也不一样,SWD只需要4个引脚,结构简单,需要的硬件接口为:GND、RST、SWDIO和SWDCLK,分别为地线、复位、数据线及时钟,调试阶段的终端模块大都使用仿真器仿真调试和烧写,除了仿真器可以烧写以外,还有一些通过总线方式在线烧写[6-8]。

1.2 在线烧写

在嵌入式技术中,在线编程方式主要有两种:IAP(在应用中编程)和ISP(在系统中编程)。

ISP(In-system Programming)在系统中编程,用于嵌入式系统或芯片程序的更新和烧录,跟传统的更新和烧录方式相比,ISP允许直接通过系统的通信接口如SPI、I2C、UART等对芯片内部进行编程操作,无需拆卸芯片,在系统上对程序进行更新、配置或修改,使用专门的编程器连接到目标设备进行编程操作,只要留出上位机的通信口,使用上位机软件就可以实现对芯片内部存储器的数据、配置文件、参数设置等进行修改,由于ISP技术可以对芯片内部直接访问,在系统编程中,需要确保编程操作的准确性和安全性,避免意外写入错误的代码而损坏目标设备[9]。

IAP(In-application Programming)在应用中编程,它与ISP相似,但ISP通常涉及到整个系统的编程,而IAP是在特定应用程序中对固件进行更新,目标设备开机上电,直接运行应用程序完成固件更新,而无需重新启动目标设备,需要把目标设备上的存储器划分为3个独立的区域:一个区域作为引导程序,一个区域用于更新程序,最后一个区域用于存储新固件的升级文件,通过对程序存储器的指定段进行读和写操作,从而实现对目标设备上的程序的更新和烧录[10]。

2 系统结构及原理

在线烧写系统主要由3部分组成:上位机软件、手持控制器和终端设备,上位机软件主要通过网络把数据发送给手持控制器,手持控制器把数据发送给终端设备,终端设备功能是运行点亮流水灯,系统如图1所示。

图1 系统框图

2.1 系统工作流程

1)上位机软件通过网络,把编译链接生成最终的BIN格式文件发送给手持控制器。

2)终端设备上电时候,会进入BOOT引导区,此时如果手持控制器没有给终端设备发送“启动烧写”指令,BOOT引导区的程序等待10 s以后,自动跳转到APP运行区执行;此时如果手持控制器给终端设备发送“启动烧写”指令,BOOT引导区的程序收到正确的指令会跳转到UPDATE升级区,手持控制器发送需要待烧写的BIN文件给终端设备,由UPDATE升级区运行的程序把收到的数据烧写到指定Flash分区上,烧写完成后自动跳转到APP运行区执行。

3)终端设备程序在APP运行区运行,手持控制器可以给终端设备发送复位命令,此时终端设备程序会进入BOOT引导区运行[11-12]。

2.2 系统功能设计

2.2.1 上位机模块设计

如图2所示,上位机软件基于PC机开发设计,读取本次编译的BIN格式文件,通过网络发送给手持控制器,网络收发数据使用UDP协议,每次传输数据的大小1 024字节,数据传输完成会给手持控制器发送传输完成标志。

图2 上位机模块图

2.2.2 手持控制器模块设计

手持控制器的片上Flash不需要分区,程序运行于片上Flash的开始区域0x08000000,收到数据存储在片外Flash上,外挂的Flash存储容量512 MB。

手持控制器由自检、数据读取、启动烧写及数据注入等命令组成,手持控制器发送自检命令给终端设备模块,终端设备模块收到命令将自检结果发送给手持控制器,如果手持控制器未收到自检数据,会重传自检命令给终端设备,重传3次以后仍未收到数据或收到数据异常,都会显示自检超时,只有收到正确的自检数据,会把自检结果信息显示,通过自检命令判断手持控制器与终端设备网络链接是否正常[13-14]。

如图3所示,手持控制器会主动发送数据读取命令给上位机软件,接收到上位机软件发送的数据会写入到外挂的片外Flash进行存储,当手持控制器会发送数据注入命令给终端设备模块时,会从外挂的片外Flash中读取数据,发送给终端设备模块。

图3 手持控制器模块图

2.2.3 终端设备模块设计

终端设备模块的程序分区运行,防止在更新程序时候失败,导致应用程序无法执行,终端设备模块分为3个区加载程序,分别是BOOT区、UPDATE区和APP应用区,如图4所示。

图4 终端设备模块图

1)BOOT区:终端模块设备开机上电BOOT区的程序先加载运行,根据接收到的网络命令进行程序跳转。

2)UPDATE区:固件程序更新区,主要是更新程序,下载完成新固件后,自动跳转到APP应用区运行。

3)APP应用区:主要用来实现所需要的业务的程序。

终端设备模块开机上电时候,程序会在BOOT区运行,首先会初始化网络,此时手持控制器发送“启动烧写”命令,终端设备模块BOOT区的程序就会跳转到UPDATE区域去运行,手持控制器发送 “数据注入”命令,会把待烧写文件通过网络发送给终端设备模块,终端设备模块收到正确数据后会把数据写入到片上Flash,数据写入完成后,终端设备模块的程序会跳转到APP运行区去运行,就会看到流水灯点亮,此时手持控制器发送复位命令,终端设备模块就会进行软件复位,程序会从BOOT区重新运行,APP程序为用户功能代码,执行用户功能操作。

2.3 终端设备模块Flash分区设计

GD32F450ZI上使用了两片闪存,前1 024 kB容量在第0片闪存中,后续的容量在第1片闪存中,主存储闪存总共容量为3 072 kB,包含8个16 kB的扇区、2个64 kB的扇区、14个128 kB的扇区、4个256 kB的扇区[15]。主存储闪存的每个扇区都可以单独擦除,支持32位整字或16位半字、字节编程,4 kB页擦除,扇区擦除和整片擦除操作,Bank0的总大小为1 024 kB,闪存的地址范围为0x08000000-0x080FFFFF。根据固件在线升级的需要,将其划分为 3个作用不同的区域,具体划分如表1所示。

表1 终端设备Flash地址区域划分

终端设备模块在系统上电后或复位后立即进入 BOOT引导区执行,即系统上电或复位后,软件从地址为0x8000000处执行,因此在MDK上需设置BOOT引导区片上Flash 起始地址为 0x08000000,BOOT引导区生成的BIN文件大小为52 kB设置分区大小为192 kB,同样原理,UPDATE升级区生成的BIN文件大小100 kB,因此在MDK上需要设置UPDATE升级区片上Flash 起始地址为 0x08030000,APP运行区生成的BIN文件大小150 kB,在MDK上需要设置APP运行区片上Flash 起始地址为 0x08060000,BOOT引导区、UPDATE升级区和 APP 运行区的存储区域相互独立,只存在简单的跳转关系[16]。

终端模块BOOT引导区的程序必须通过仿真器烧入,运行于片上Flash的开始区域0x08000000,UPDATE升级区的程序也必须通过仿真器烧入,运行于片上Flash的开始区域0x08030000,APP运行区的程序可以通过手持控制器烧入,运行于片上Flash的开始区域0x08060000,以后需要更新终端模块的程序,只需要更新手持控制器存储内容,无需通过仿真器进行更新,即使在烧写的过程中突然掉电,只会导致APP运行区的程序会破坏,BOOT引导区和UPDATE烧写区的程序仍然可以正确运行。

3 系统硬件设计

3.1 启动模式

ARM结构CM4手册规定芯片复位时要从0x0000 0000地址开始取出中断向量,GD32的片上Flash在MDK里被设置为起始地址0x0800 0000,因为启动模式决定了向量表的位置,GD32有3种启动模式:

1)片上Flash存储器。当选择从片上Flash启动模式后,使用JTAG或SWD模式烧写程序,一般会将程序下载到设备内置的片上Flash存储器中的0x0800 0000地址处,设备重启直接从这个地址启动程序,片上Flash的0x0800 0000地址被映射到0地址处,这个时候CM4既可以在0地址处访问中断向量表,也可以在0x0800 0000地址处访问中断向量表,而代码存放在地址0x0800 0000。GD32通过做了一个启动映射,NVIC中有一个寄存器,称为向量表偏移量寄存器,在文件GD32f4xx_misc.c通过修改该寄存器的值就能重新定位向量表,向量表在地址空间中的位置是通过重定位寄存器设置的值来指出向量表的地址。在复位后,该寄存器的值为0[17]。

2)系统存储器启动。从系统存储器启动,通过设置引导引脚BOOT1=0 BOOT0=1,芯片能够从特定区域的固化程序开始执行,特定区域的内存地址从0x1FFFF000开始,存放了厂家预置的程序,也称为ISP程序,通常是只读的,在出厂后,这个区域的数据不可以被修改或擦除,因此被认为是ROM区域。它存放着芯片出厂时预置的固化程序,主要用于初始化系统和提供下载功能,我们可以使用厂商提供的ISP程序,通过串口总线将用户的应用程序下载到芯片的Flash存储器中,下载完成后,为了使芯片能够正常启动运行已下载的程序,需要将BOOT0引脚和BOOT1引脚都重新设置为低电平。这种方式的好处是在不使用仿真器的情况下,直接通过串口进行程序更新和调试[18]。

3)片上SRAM启动。从片上SRAM启动时,确保程序正确执行,需要在应用程序的初始化代码中重新设置向量表的位置,从特定的起始地址0x2000 0000进行访问,与前面提到的系统存储器启动不同,SRAM无法永久存储程序,且在掉电后数据将丢失,如果需要长期保存的数据,必须采取其他方式进行存储,以防止掉电导致数据丢失,因此这种启动模式主要用于程序的调试和临时存储数据[19]。

在许多GD32系列芯片上,存在两个引脚BOOT0和BOOT1,它们在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。多数正常启动情况下BOOT0和BOOT1引脚都被拉低,电平都为0时,芯片从片上Flash存储器的起始地址处开始执行程序。当芯片从系统存储器启动时候,BOOT0引脚被设置为高电平,才允许外部串口下载新的程序到芯片的Flash存储器中,下载完成后,将BOOT0引脚重新设置为低电平,以便芯片正常启动已下载的程序,而BOOT1引脚通常保持为低电平。当芯片从SRAM启动,BOOT0和BOOT1两个引脚都需要拉高。启动模式如表2所示。

表2 启动模式

通过设置BOOT1和BOOT0两个引脚的电平状态,就可以灵活切换芯片的启动模式,本文启动模式设计为BOOT1=0和BOOT0=0从片上Flash存储器启动,如图5所示。

图5 启动模式原理图

3.2 PHY芯片原理

DP83848是一种由德州仪器(Texas Instruments)公司生产的集成以太网控制芯片,用于实现100 Mbit/s单路物理层以太网的收发功能,支持100 M的以太网通信,集成度高,具有低功耗等性能,同时支持MII(媒体独立接口)与RMII(简化的媒体独立接口)两种与物理层(PHY)通讯的标准接口,实现以太网数据帧的发送与接收,遵守IEEE 802.3-2002标准和IEEE 1588-2008标准,还集成了串行管理接口(SMI,serial management interface),专门用于访问PHY芯片寄存器[20-21],SMI接口包括MDC和MDIO两条信号线,MDIO是用来读写PHY的寄存器,以获取PHY的状态,MDC为MDIO提供时钟。SMI接口可以支持最多32个PHY,但在任意时刻只能访问一个PHY的一个寄存器。

本文采用RMII接口模式,需要7根线通信,MII模式需要16根通信线,RMII模式在功能上与MII是相同的,在保持物理层器件现有特性的前提下减少了PHY芯片引脚数量,RMII接口模式主要包括以下引脚:参考时钟、发送使能、接收使能、发送数据及接收数据等。PHY芯片原理如图6所示。

图6 PHY芯片原理图

ETH_50M:在RMII模式下使用,提供给PHY芯片的50 MHz参考时钟,这个外部时钟非常重要,需要稳定、高精度,让系统各个组件时序同步。

MCU_PHY_TXEN:数据发送使能,高电平有效。在整个数据发送过程保存有效电平,表示MAC层正在将要传输的数据放到MCU_PHY_TXD0和MCU_PHY_TXD1上。

MCU_PHY_TXD0:发送数据,MCU_PHY_TXEN有效后,作为发送端。

MCU_PHY_TXD1:在RMII模式下只有2位,只有在MCU_PHY_TXEN 有效数据线才有效。

MCU_PHY_CRS_DV:数据接收使能,用于数据接收。对于RMII 模式,这个MCU_PHY_CRS_DV引脚有效,则认为在MCU_PHY_RXD0和MCU_PHY_RXD1上的数据是有效的。

MCU_PHY_RXD0:接收数据,与ETH_50M时钟同步,在MCU_PHY_CRS_DV有效后的每个时钟周期里,MCU_PHY_RXD0和MCU_PHY_RXD1接收PHY芯片的两位数据。

MCU_PHY_RXD1:接收数据,MCU_PHY_CRS_DV有效后,作为接收端。

MCU_PHY_MDC:为MCU_PHY_MDIO提供时钟,最高频率为2.5 MHz的时钟信号,在空闲状态下该引脚保持为低电平状态。

MCU_PHY_MDIO:用于与PHY之间的数据传输,与MCU_PHY_MDC时钟线配合,接收和发送数据。

3.3 网络变压器原理

网络变压器原理如图7所示。在PHY芯片与RJ45网络插座之间还需要一个网络变压器,PHY芯片工作时送出的上行数据信号从网络变压器的 Pin1和Pin3进入,再由Pin16和Pin14输出,经RJ45水晶头连接网线发送出去,外部设备送来的下行数据信号经网线和RJ45水晶头,由Pin9和Pin11进入网络变压器,再由Pin6和Pin8输出,送到PHY芯片的收发器上。

图7 网络变压器原理图

理论上来说,可以不接网络变压器,从PHY芯片出来信号直接连到RJ45上,也是能正常工作的,但传输距离就会受到限制,因为PHY芯片驱动器的功率有限,当网线较长时,到接收端RJ45上的信号会逐渐衰减,导致工作异常,添加网络变压器后,通过变压器输出信号显著提高,传输距离进一步增加。增加网络变压器相当于将PHY芯片与RJ45线路隔离,减少PHY芯片受到各种干扰,输出信号更加稳定,还可以确保不同型号PHY芯片信号正常传输,增强整个网络的兼容性。

4 系统软件设计

4.1 上位机软件设计

上位机软件通过网络与手持控制器进行数据通信,手持控制器是固件更新操作的发起端,手持控制器发送数据读取命令给上位机,上位机把编译生成的BIN文件发送手持控制器存储。其具体实现流程如下:

1)上位机软件初始化,读取本地更新BIN文件,如果收到手持控制器发送的数据读取命令后,会把文件大小通过网络发送给手持控制器,手持控制器接收到正确的文件大小后擦除本地片外Flash;

2)上位机根据读取数据帧长度判断是否需要拆帧发送,数据超过1 024字节需要进行拆分为若干帧,没有超过1 024字节的数据直接发送,上位机发送的每帧数据1 024字节,发送完成都要等待手持控制器回复,否则对该帧数据进行重传3次,重传3次仍没有收到表示传输失败;

3)上位机下发的每帧数据都收到了手持控制器回复,当传输完最后一帧数据,手持控制器会显示数据读取成功,如果传输过程中出现异常,手持控制器会显示数据读取超时。

4.2 手持控制器软件设计

手持控制器操作按键选择相应功能执行,跟设备进行命令式交互,通过以太网接口与终端设备模块通信,交互信息显示在屏上显示,手持控制器起到了中转数据的作用,手持控制器设计流程如图8所示。

图8 手持控制器设计流程

手持控制器交互具体实现流程如下:

1)上电初始化手持控制器,主要包括显示模块、按键模块、网络传输模块、Flash模块等;

2)初始化完成进入主菜单,通过查询判断按键是否被按下,如果按下就会发送对应的命令给终端设备模块,终端设备模块收到命令回复确认消息,超过设置的时间未收到数据,则显示超时;

3)如果按下数据注入命令,就会读取存储在片外Flash中的数据,通过网络发送给终端设备模块,发送完成后显示发送成功;如果按下数据读取命令,就会接收上位机软件发送的数据,并将数据存储到片外Flash,接收完成后显示接收成功;

4)如果按下自检命令,就会通过网络发送给终端设备模块,终端设备模块收到自检命令就会把自检结果回传给手持控制器。

4.3 终端设备模块软件设计

终端设备模块的设计需要创建3个工程,分别是BOOT工程、 UPDATE工程和APP点亮流水灯工程,如图9所示,终端模块上电运行BOOT区程序,等待手持控制器发送升级命令,10 s没有升级收到命令,程序跳转到APP区运行。如果终端设备模块上电以后,手持控制器发送升级命令,程序跳转到UPDATE区运行,将收到的数据写入到0x8060000开始的地址,数据全部烧写完成后,程序会跳转到APP区运行。

图9 终端模块的图

4.3.1 BOOT启动区的软件设计

终端模块上电复位后在0x0800 0000地址处访问中断向量表,如果收到手持控制器升级命令,跳转到UPDATE区,10 s没有收到手持控制器命令,跳转到APP区,下面程序是收到升级命令从BOOT区跳转到UPDATE区。

define FLASH_UPDATE_ADDR 0x08003000 /*UPDATE区中断向量表*/

void iap_jump_to_update(void)

{

if (((*(__IO uint32_t*)FLASH_UPDATE_ADDR) &0x2FFE0000 ) 0x20000000) /*检查栈顶地址是否合法 */

{

__disable_irq();/*屏蔽所有中断,否则可能导致跳转的失败*/

JumpAddress = *(__IO uint32_t*) (FLASH_UPDATE_ADDR + 4); /*设置UPDATE区堆栈首地址即跳转到新的程序的起始地址 */

Jump_To_Update = (pFunction) JumpAddress; /*将跳转到达UPDATE区程序的首地址赋值给一个函数指针*/

__set_MSP(*(__IO uint32_t*) FLASH_UPDATE_ADDR); /*初始化堆栈指针*/

Jump_To_Update (); /*函数指针完成跳转*/

}

}

4.3.2 UPDATE烧写区的软件设计

UPDATE区的程序能够运行,需要在程序中再次被映射中断向量表,根据表1终端设备模块片上Flash地址区域划分,UPDATE区中断向量表被映射到0x0803 0000,修改中断向量表函数使用nvic_vector_table_set(NVIC_VECTTAB_FLASH,0x30000),UPDATE区程序存储更改为0x0803 0000,如图10所示。

图10 UPDATE区程序存储位置

手持控制器负责将上位机软件下发的数据帧内容通过网络总线转发到对应的终端设备模块,UPDATE区的程序按照表3数据帧消息内容进行解析,每帧前8个字节分别表示帧头、长度和帧序号,后面接着1 024字节真实BIN文件数据,为避免传输出错会进行CRC校验,终端设备模块收到每帧数据都正确,就会写入到片上Flash存储。

表3 数据帧消息内容

下面程序是UPDATE区核心程序,主要功能是烧写BIN文件到片上Flash中,烧写完成程序会自动跳转到APP区。

define FLASH_APP2_ADDR (0x08060000) /* APP区起始地址*/

define READ_LEN (1024) /*一帧固件数据大小*/

void Write_MCU_To_Flash(void)/*把固件数据写到flash*/

{

uint32_t data_buff[512]={0};

if(JTAG_flag 1)

{

g_cn = 0;/*计数清0*/

}

else if(JTAG_flag 2)/*收到一帧数据1024字节*/

{

memcpy(data_buff,g_UdpRxBuf+8,READ_LEN);

fmc_write_32bit_data(FLASH_APP2_ADDR+g_cn,READ_LEN/4, data_buff); /*写入片上FLASH*/

g_cn+=READ_LEN;

}

else if(JTAG_flag 3) /*收到最后一帧数据不足1024字节*/

{

memcpy(data_buff,g_UdpRxBuf+8,data_len);

fmc_write_32bit_data(FLASH_APP2_ADDR+g_cn,data_len/4, data_buff); /*写入片上FLASH*/

g_cn = g_cn + data_len;

}

}

4.3.3 APP运行区的软件设计

1)同样原理APP区的程序能够运行,根据表1终端设备模块片上Flash地址区域划分,APP区中断向量表被映射到0x08060000,修改中断向量表映射位置nvic_vector_table_set(NVIC_VECTTAB_FLASH,0x60000)。

2)默认情况下MDK编译链接是不会生成 BIN 文件,需要配置工程选项,在 MDK的“Options For Target->Users”中加入fromelf 指令,编译生成BIN格式文件如图11所示,KARMARMCCinfromelf.exe --bin-output=@L.bin !L。原始数据如图12所示,其中BIN 文件是最直接的代码映像,它记录的内容就是要存储到片上FLASH 的二进制数据,在片上FLASH 中烧写的内容与BIN文件内容完全相同[22]。

图11 配置工程

图12 BIN文件的原始数据

3)程序在UPDATE区运行时候,才能更新固件,在APP区运行无法更新,此时,手持控制器给终端设备模块发送复位命令,通过NVIC_SystemReset()函数执行软件复位。软件复位后程序就会重新从BOOT区运行,手持控制器给终端设备模块发送烧写命令,终端设备模块程序跳转到UPDATE区运行,固件更新完成后会自动运行新的应用程序。

5 实验结果与分析

本文是把生成固件通过上位机发送给手持控制器,通过手持控制器,对终端设备模块的应用程序进行烧写,通过实验对固件升级过程进行模拟测试验证,并对终端设备模块的环境实验进行测试验证,最后对实验结果进行分析和总结。

5.1 固件升级

1)按照3.3节完成终端设备模块设计,把片上Flash全部擦除,BOOT区的可执行程序和UPDATE区的可执行程序通过仿真器烧录到片上Flash,将APP应用程序生成的BIN文件,通过上位机软件发送到手持控制器;

2)终端设备模块上电复位,通过手持控制器把APP应用程序生成的BIN文件烧写到片上Flash指定地址,通过读取0x0806 0000地址数据与BIN源文件比对,如果两者一样,说明烧写到片上Flash成功,BIN源文件的部分数据如图12所示,片上Flash部分数据如图13所示;

图13 片上Flash读出来的数据

3)烧写完成后,手持控制器会显示烧写完成,观察终端设备模块上的流水灯会闪烁,表明此次升级成功。有多种情况会造成固件升级失败,比如升级过程中网络断开、突然断电都会导致终端设备模块烧写失败,此时终端模块上电复位会无法工作,流水灯无法点亮。由于本设计分为BOOT区、UPDATE区和APP区,异常造成固件升级失败,只是APP区的程序无法正常运行,断电后终端设备模块重新上电烧写,仍可以将固件写入APP区完成升级。

5.2 环境实验测试

通过手持控制器烧写完成的终端设备模块放到温箱进行环境实验测试,分别在高温正52 ℃、低温负55 ℃和常温正30 ℃进行功能验证,观察流水灯是否点亮,在此范围温度上电断电各30次,测试记录如图14所示,流水灯全部点亮。

图14 环境实验图

5.3 实验结果

通过上述实验表明,在-55~52 ℃流水灯都点亮,固件都能正常工作,上下电各30次全部点亮,成功率均达到了100%,实验结果与预期一致,通过在线烧写固件方法,可以让终端设备模块程序正确运行,方案是稳定可靠的。

6 结束语

本文是通过免拆终端模块及无须挂载仿真器对其在线烧写,并对其功能进行验证,通过实验测试验证流水灯都能正常工作,说明此方案可行性,达到了预期的目的,基于GD32芯片网络在线烧写固件技术可靠,为外场升级免拆设备提供依据,在企业的实际生产和维护过程中使用在线烧写技术,可以降低设备维护人力成本,大大地提高了企业经济效益。

猜你喜欢
固件终端设备上位
视频监视系统新型终端设备接入方案
特斯拉 风云之老阿姨上位
车迷(2018年12期)2018-07-26 00:42:22
“三扶”齐上位 决战必打赢
配电自动化终端设备在电力配网自动化的应用
电子制作(2016年15期)2017-01-15 13:39:12
基于ZigBee和VC上位机的教室智能监测管理系统
基于固件的远程身份认证
车站信号系统终端设备整合及解决方案
以新思路促推现代农业上位
学习月刊(2015年3期)2015-07-09 03:51:04
提取ROM固件中的APP
电脑爱好者(2015年7期)2015-04-09 08:54:02
一种通过USB接口的可靠固件升级技术