APP下载

基于CKS32F103CBT6 的IAP 固件升级的设计*

2022-01-08王云飞

电子与封装 2021年12期
关键词:固件校验中断

常 浩,王 彬,王云飞

(中科芯集成电路有限公司,江苏无锡 214072)

1 引言

随着电子技术的飞速发展,嵌入式终端广泛应用于工业控制、消费电子等各种领域。为满足不同客户的需求以及系统的功能升级或修复原有系统的缺陷,嵌入式终端产品对固件进行升级几乎成了必备功能之一。在应用编程(In Application Programming,IAP)在用户程序运行的过程中对Flash 的部分区域进行烧写,目的是产品发布后可以方便地通过预留的通信口对产品的固件进行升级[1]。本文以CKS32F103CBT6 处理器为平台给出了IAP 方案的设计原理和设计流程,解决了传输过程中意外中断、传输数据误码等关键性技术问题,保证了系统内部应用程序的正确运行。

2 IAP 原理

传统单片机IAP 的原理是在用户程序正常运行时,接收到升级指令后,程序指针重新指回Bootloader中的IAP 程序,将接收到的新的应用程序(Application,APP)数据写入到控制擦除APP 所在的Flash 区域,完成后程序复位,经Bootloader 的引导,使新的APP 得以运行[2]。

在没有任何意外发生的情况下,传统的IAP 升级方案可以正常运行,但是存在3 个比较严重的问题:(1)如果升级过程中被打断,可能会导致整个应用程序都无法运行,产品所有功能异常;(2)如果升级发生中断,重新发起传输时需要再从头开始发包升级,在传输不稳定的情况下升级时间大大加长;(3) 数据采用明文传输,数据在传输过程中容易被窃取[3]。

3 IAP 技术的实现方案

3.1 Ymodem 串口IAP 升级方案

串口纠错协议Ymodem 是Xmodem 的改进版协议,具有传输快速、稳定的特点,每包数据可以达到1024 B,是一种非常高效的文本传输协议。Ymodem 是一种发送并等待的协议,发送一个数据包后,等待接收方确认。如果是应答(Acknowledgment,ACK)信号则可以发送新的包。如果是否定应答(Negative Acknowledgement,NAK)信号,则重发或者错误退出[4]。

需要固件升级的设备收到升级指令后,向上位机发送字符“C”,表示设备已经准备好接收固件了,上位机收到“C”字符开始传输固件的头帧,头帧包含SOH、数据块编号、固件名称、大小等数据,不足128 B 用0x00 补齐,接收方收到数据后发送ACK 然后发送字符“C”,发送方收到字符“C”后开始传输固件数据帧[5]。Ymodem 协议数据帧格式如表1 所示。

表1 Ymodem 协议数据帧格式

IAP 上位机程序按帧格式顺序发送需升级固件的数据,终端设备收到固件后写入Flash 更新区,每帧数据大小为1024 B。终端收到每帧数据后,会对帧数据进行CRC 校验,校验正确写入升级固件存储区。

3.2 Flash 空间划分

将Flash 空间划分为3 个区域,第一个区域为Bootloader 引导区,第二个区域为APP 1 区,即客户应用程序运行区,第三个区域为APP 2 区,即升级固件储存区,升级中收到的固件数据先存入到APP 2 区,这样即使固件传输意外中断后,整个系统也能按照之前客户应用程序运行区的程序运行[6]。

IAP 方案内部Flash 区规划如图1 所示。上位机将需要升级的固件发送给终端,传统IAP 在收完固件后立马进行程序跳转,跳转到用户程序区,但是如果接收到的数据出错或者受到干扰写入错误,可能会导致整个程序跑飞。为了进一步保证固件升级数据的安全性,终端收到固件后先将数据写入到APP 2 区,在固件完全接收成功后,会将写入APP 2 区的数据按照顺序进行读出,与传输中保存的校验数据进行对比,校验成功后将APP 2 区的程序拷贝到APP 1 区,再进行程序跳转,保证了整个系统的安全[7]。如果固件升级过程中出现异常,导致升级失败,程序会跳转至原APP 1区运行,不影响正常程序运行。

图1 IAP 方案内部Flash 区规划

3.3 断点续传原理

断点续传即在上一次传输被意外中断处继续进行固件的传输,因外界干扰较大导致固件传输中断的环境下,利用断点续传可以极大地提高升级的效率,即使多次发生中断,也可以实现固件续传[8]。断点续传流程见图2。

图2 断点续传流程

上位机将固件传输进行分帧处理,每一帧的数据大小为1024 B,传输时对每一帧数据进行编号传输。终端在收到每一帧数据校验完成后,保存固件接收的帧状态数据到外部的EEPROM 中,将接收到的固件数据依次写入指定的Flash 地址中,并回复ACK 给上位机,上位机收到ACK 指令后继续进行下一帧数据的传输。当传输发生意外中断后,如果需要将固件进行断点续传,终端会从外部EEPROM 中读取上一次中断时的帧状态数据,在上一次的中断处继续接收相应固件数据,接收到的固件帧数据依次写入到中断前Flash 操作后面的区域,从而保证固件升级继续进行。

3.4 数据加密原理

传统IAP 升级数据传输使用明文传输,固件升级时传输数据容易被监听,从而导致固件被窃取。本设计采用了一种密钥池加密方法,密钥池是255 B 的随机数容器,上位机和终端里都存放着此密钥池,每次传输都可以从中随机抽取若干数据进行运算组成通信密钥。

上位机根据导入的升级固件的6 B 名称数据,从对应密钥池里选择6 组密钥进行运算得到本次通信的新密钥,终端在接收到固件名称数据后,同样从密钥池里选择6 组密钥进行运算得到相同的密钥,这样交互双方即确定了本次通信的密钥。上位机将固件数据通过通信密钥加密后传输,终端接收到加密数据后,进行解密并写入到对应的Flash 区。由于每次传输的固件名称不同,即每次通信采用了密钥池里不同的密钥进行数据加密,密钥选择是随机进行的,毫无规律可查,从而增加了固件传输被破解的难度。为了保证IAP 升级系统密钥池的安全,可以按照产品的批次更新密钥池。

4 方案设计

4.1 MCU 硬件原理

中科芯集成电路有限公司设计的CKS32F103CBT6 标准型MCU 使用高性能ARM®Cortex®M3 32 位RISC 内核,工作频率为72 MHz,具有高达128 kB 的闪存和20 kB 的SRAM。其中包含2个12 位ADC、3 个通用16 位定时器和1 个PWM 定时器,多达2 个I2C 接口和SPI 接口、3 个USART 接口。MCU 最小系统原理见图3。

图3 MCU 最小系统原理

4.2 Bootloader 引导程序设计

系统上电后,首先运行Bootloader 程序,Bootloader 程序放在0x08000000 开始的15 kB 空间。用户按下按键后初始化串口,上位机显示选择菜单。菜单1 为重载固件,菜单2 为断点续传固件,菜单3 为运行应用程序。Bootloader 引导程序流程见图4。

图4 Bootloader 引导程序流程

当用户菜单选择重载固件时,用户重新接收新固件并存储到升级固件存储区,接收完成后对固件存储区数据进行校验,校验正确后置位升级成功标志位。当用户菜单选择断点续传时,从上一次传输被意外中断处继续进行固件的传输,接收完成后对固件存储区数据进行校验,校验正确后置位升级成功标志位。当用户菜单选择运行应用程序时,判断升级成功标志,如果升级成功标志位置位,则把升级存储区代码复制到用户应用程序运行区,否则直接运行用户应用程序运行区代码。

5 试验结果与分析

本文实现了支持单帧数据校验、断点续传、数据加密、存储校验的IAP 系统升级方案。测试上位机界面如图5 所示,上位机开发平台采用Visual Studio 程序,开发语言为C#,波特率可手动选择。配合本文改进的IAP 升级方案,测试时通过上位机打开固件,选择加密固件进行传输,传输方式可选择断点续传或者重载固件方式,传输时实时显示固件传输的进度,传输完成后显示成功并记录升级时间。固件下载成功后,上位机可发送运行应用程序相关指令提示终端进入应用程序执行。

图5 上位机界面

测试升级固件大小分别为5 kB、10 kB、20 kB、38 kB、54 kB,单个固件下载次数均为50 次,测试成功升级率为100%。

测试在外界干扰导致升级中断的情况下IAP 方案的耗时情况,为了减少测试误差,上位机软件在点击升级固件后开始执行软件计时,减少人工计时可能产生的误差。实验数据如表2 所示,测试波特率均为115200 bit/s,实验结果表明在存在外部干扰导致传输中断的情况下,本文设计的断点续传IAP 方案随着中断次数的增加相对于传统IAP 方案耗时大大减少。

表2 外界干扰下传输耗时测试数据

测试升级38 kB 固件,测试在升级过程中人为干扰导致升级失败的情况,测试次数为50 次,传统IAP方案升级意外中断后运行应用程序均出现死机情况,本文提出的IAP 方案在升级意外中断后,系统恢复应用程序之前的工作状态,系统正常运行。

6 结论

本文以ARM®Cortex®M3 内核的微处理器CKS32F103CBT6 为平台,串口作为通信接口,给出了一种嵌入式的固件升级方案。该方案引导程序的设计实现了更新代码区和运行代码区的隔离,保障了整个系统的安全可靠。基于Ymodem 的串口升级对每帧数据进行CRC 校验,且串口传输数据为加密后的数据,保证了传输的正确性与安全性,数据传输完成后对收到的固件进行校验,校验一致才进行固件升级。该设计可以有效处理升级过程中意外中断、数据传输错误等异常情况,在由于外部环境导致升级失败时,系统软件恢复之前的运行状态,保证了整个系统能够正常运行。实验测试证明,该技术方案具有较好的可行性、稳定性和安全性,可以广泛应用于ARM®Cortex®M3 内核的微处理器芯片的固件升级,具有很好的实际应用价值。

猜你喜欢

固件校验中断
基于FPGA的中断控制器设计*
炉温均匀性校验在铸锻企业的应用
跟踪导练(二)(5)
千里移防,卫勤保障不中断
结合抓包实例分析校验和的计算
基于固件的远程身份认证
大型电动机高阻抗差动保护稳定校验研究
基于加窗插值FFT的PMU校验方法
提取ROM固件中的APP
一种通过USB接口的可靠固件升级技术