一种基于国产单片机GD32的软件升级方法技术

技术编号:31743421 阅读:21 留言:0更新日期:2022-01-05 16:22
本发明专利技术公开了一种基于国产单片机GD32的软件升级方法,使用基于CAN总线的IAP升级方法,将待升级的设备全部接在总线上,通过使用YMODEM协议进行简单快速批量化的升级。本发明专利技术将所有待升级的设备全部挂在CAN总线上,通过YMODEM协议将升级文件发送到各个待升级的设备,这种升级方法简单、快速、并可以进行批量化软件升级。软件升级。软件升级。

【技术实现步骤摘要】
一种基于国产单片机GD32的软件升级方法


[0001]本专利技术属于计算机控制
,涉及一种基于国产单片机GD32的软件升级方法。

技术介绍

[0002]工业控制领域的软件通常在第一次部署后还需再次升级,软件使用一段时间后由于出现BUG、用户的需求增加、模块性能的升级等需要再次对芯片中的软件进行烧写,软件升级方法包括ISP(在系统中编程)和IAP(在应用中编程)两种方法。
[0003]ISP升级方法一般通过仿真器进行软件升级,目前已经使用比较少,这种方法的缺点主要是需要拆开设备,连接仿真器,时间成本、经济成本均较高。
[0004]目前主流的方法是IAP升级方法,传统上通常使用串口进行升级,在系统进入BootLoader的时候通过串口将升级文件写入到FLASH中并进行跳转。
[0005]常用的单片机软件升级包括使用仿真器进行升级和使用IAP进行软件升级,国产单片机GD32同样也可以使用仿真器进行升级或者使用IAP进行升级,对于使用仿真器升级的方法(使用JTag或者SWD进行烧录)需要每次连接专用的烧录仿真器,对于产品设计来说需要设计单独的升级接口电路,并且每次只能单独升级一个设备。

技术实现思路

[0006](一)专利技术目的
[0007]本专利技术的目的是:提供一种基于国产单片机GD32的软件升级方法,使用基于CAN总线的IAP升级方法,将待升级的设备全部接在总线上,通过使用YMODEM协议进行简单快速批量化的升级。
[0008](二)技术方案
[0009]为了解决上述技术问题,本专利技术提供一种基于国产单片机GD32的软件升级方法,包括如下过程:
[0010](1)设计CAN总线通讯应用层协议,设计CAN数据处理过程中的CAN消息结构体CAN_RECV_DATA,并对CAN总线的29位扩展帧进行配置。
[0011](2)对单片机系统进行初始化操作,配置时钟信息以及中断信息,配置总线通讯速率信息,总线ID的掩码值以及过滤器值,定义所使用的变量以及乒乓缓冲区。
[0012](3)在CAN总线中断回调函数CAN0_RX0_IRQHandler中,将接收到的CAN总线数据依次存入到乒乓缓冲区中。
[0013](4)根据步骤1定义CAN总线通讯协议对CAN总线数据进行解析,将获取到的数据帧的ID值赋值到接收帧标识变量RecvID,将获取到的数据长度赋值到接收帧长度变量RecvDLC,将获取到的最多8个数据值赋值到接收数据指针RecvData。
[0014](5)在主函数中对收到的CAN总线数据进行解析,将解析后得到的数据提取出来,使用写入闪存函数WriteFlash()将更新后的固件信息写入到Flash中;读取应用程序启动
地址APP_ADDR_FLASH并判断该地址所存储的数据最高位是否为1,为1则表示已成功将固件写入到Flash中。
[0015](6)获取APP_ADDR_FLASH地址偏移4个字节地址所存储的值并转化为函数指针类型,使用初始化堆栈指针函数:set_MSP()函数,参数为APP_ADDR_FLASH初始化用户的堆栈指针;运行pFunction函数指针所指的实体进行程序跳转,完成启动程序到应用程序的跳转,完成程序升级。
[0016](三)有益效果
[0017]上述技术方案所提供基于国产单片机GD32的软件升级方法,将所有待升级的设备全部挂在CAN总线上,通过YMODEM协议将升级文件发送到各个待升级的设备,这种升级方法简单、快速、并可以进行批量化软件升级。
附图说明
[0018]图1为本专利技术实施例基于国产单片机GD32的软件升级方法流程图。
具体实施方式
[0019]为使本专利技术的目的、内容和优点更加清楚,下面结合附图和实施例,对本专利技术的具体实施方式作进一步详细描述。
[0020]参照图1所示,本实施例基于国产单片机GD32的软件升级方法包括以下步骤:
[0021]S1:定义CAN总线通讯应用层协议,协议包括两个字节的帧头、两个字节的帧长度、一个字节的目的地址、一个字节的源地址、一个字节的升级文件总帧数、一个字节的当前帧序号、1K字节的YMODEM协议升级文件内容、两个字节CRC校验。帧头两个字节分别为0x55、0xAA。
[0022]设计数据处理过程中CAN消息结构体CAN_RECV_DATA,此结构体中包括

扩展帧ID值ExtID,类型为无符号长整形;

数据长度DLC,类型为无符号短整形;

数组Data,长度为8,类型为无符号字符型。
[0023]对CAN总线29位扩展帧ID进行配置,使用第14位到21位共8位作为CAN总线源节点域,第22位到29位共8位作为CAN总线目的节点域。定义CAN总线源节点ID值为SRCID,目的节点ID值为DSTID,将SRCID值和DSTID值分别赋值到CAN总线的目的节点域和源节点域。
[0024]S2:使用官方库提供的初始化函数SystemInit()对GD32板卡进行基本功能初始化操作,配置过程包括使用系统时钟配置函数SetSysClock()函数对系统时钟进行初始化操作,使能片外高速时钟HSE,配置时钟分频因子(包括AHB高速总线分频因子APB1低速总线分频因子APB2低速总线分频因子),打开锁相环(PLL)时钟,配置中断向量NVIC。对CAN总线进行初始化设置,包括波特率设置为1M,帧类型设置为扩展帧。使能CAN总线中断。设置设置CAN设备的掩码值(CAN_Mask)为0x1FE00000(高8位值都设置为1),设置CAN设备的过滤器值(CAN_Filter)为SRCID,将帧类型设置为数据帧。
[0025]定义乒乓缓冲区Rx_CAN_Buffer,此缓冲区为二维数组,类型为无符号字符型,数组的行数为乒乓缓冲区个数(设置为2),列数为缓冲区的长度Buffer_Size(长度设计为2096),同时定义Rx_CAN_Ptr,用来写入缓冲区数据的位置,初值设置为0。定义当前帧长度Cur_Len,初值设置为0,接收完成标志Recv_Flag,初始值设置为0。
[0026]S3:在CAN总线中断回调函数CAN0_RX0_IRQHandler中,定义变量RecvID,类型为无符号整型,定义变量RecvDLC,类型为无符号字符型,定义变量RecvData,类型为无符号字符数组类型,长度为8。使用GD32标准库中的can_message_receive()函数获取CAN总线上收到的数据,参数为CAN0(表示第一路CAN)以及CAN_FIFO0(第一路FIFO缓冲区)。将获取到的数据帧的ID值赋值到RecvID,将获取到的数据长度赋值到RecvDLC,将获取到的最多8个数据值赋值到RecvData。
[0027]定义CAN消息结构体(CAN_RECV_DATA)变量CANData,对CANData中扩展帧ID值赋值为RecvID,对数据长本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于国产单片机GD32的软件升级方法,其特征在于,包括以下步骤:S1:设计CAN总线通讯应用层协议,设计数据处理过程中的CAN消息结构体CAN_RECV_DATA,并对CAN总线29位扩展帧ID进行配置;S2:对单片机系统进行初始化操作,配置时钟信息以及中断信息,配置总线通讯速率信息,总线ID的掩码值以及过滤器值,定义所使用的变量以及乒乓缓冲区;S3:在CAN总线中断回调函数CAN0_RX0_IRQHandler中,将接收到的CAN总线数据依次存入到乒乓缓冲区中;S4:根据步骤1定义CAN总线通讯协议对CAN总线数据进行解析,将获取到的数据帧的ID值赋值到接收帧标识变量RecvID,将获取到的数据长度赋值到接收帧长度变量RecvDLC,将获取到的最多8个数据值赋值到接收数据指针RecvData;S5:在主函数中对收到的CAN总线数据进行解析,将解析后得到的数据提取出来,使用写入闪存函数WriteFlash()将更新后的固件信息写入到Flash中;读取应用程序启动地址APP_ADDR_FLASH并判断该地址所存储的数据最高位是否为1,为1则表示已成功将固件写入到Flash中标识升级成功;S6:获取APP_ADDR_FLASH地址偏移4个字节地址所存储的值并转化为函数指针类型,使用初始化堆栈指针函数set_MSP()函数,参数为APP_ADDR_FLASH初始化用户的堆栈指针;运行pFunction函数指针所指的实体进行程序跳转,完成启动程序到应用程序的跳转,完成程序升级。2.如权利要求1所述的基于国产单片机GD32的软件升级方法,其特征在于,所述步骤S1中,CAN总线通讯应用层协议包括两个字节的帧头、两个字节的帧长度、一个字节的目的地址、一个字节的源地址、一个字节的升级文件总帧数、一个字节的当前帧序号、1K字节的YMODEM协议升级文件内容、两个字节CRC校验;帧头两个字节分别为0x55、0xAA。3.如权利要求2所述的基于国产单片机GD32的软件升级方法,其特征在于,所述步骤S1中,CAN消息结构体CAN_RECV_DATA包括

扩展帧ID值ExtID,类型为无符号长整形;

数据长度DLC,类型为无符号短整形;

数组Data,长度为8,类型为无符号字符型。4.如权利要求3所述的基于国产单片机GD32的软件升级方法,其特征在于,所述步骤S1中,CAN总线29位扩展帧ID中,第14位到21位共8位作为CAN总线源节点域,第22位到29位共8位作为CAN总线目的节点域;定义CAN总线源节点ID值为SRCID,目的节点ID值为DSTID,将SRCID值和DSTID值分别赋值到CAN总线的目的节点域和源节点域。5.如权利要求4所述的基于国产单片机GD32的软件升级方法,其特征在于,所述步骤S2中,使用初始化函数SystemInit()对GD32板卡进行基本功能初始化操作,配置过程包括使用系统时钟配置函数SetSysClock()函数对系统时钟进行初始化操作,使能片外高速时钟HSE,配置时钟分频因子,打开锁相环PLL时钟,配置中断向量NVIC;对CAN总线进行初始化设置,包括波特率设置为1M,帧类型设置为扩展帧;使能CAN总线中断,设置CAN设备的掩码值CAN_Mask为0x1FE00000,设置CAN设备的过滤器值CAN_Filter为SRCID,将帧类型设置为数据帧;时钟分频因子包括AHB高速总线分频因子、APB1低速总线分频因子、APB2低速总线分频因子。...

【专利技术属性】
技术研发人员:王雨龙
申请(专利权)人:天津津航计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1