基于LoRa技术的STM32处理器无线程序升级系统设计
设计并实现了一款基于LoRa技术对STM32F767系列处理器通过无线方式升级程序的系统。该系统的硬件结构包括:无线发送端、无线接收端及待升级程序的STM32F767处理器3个部分。
发送端将程序的数据文件通过LoRa技术传递给接收端,接收端通过串口将程序传递给STM32F767处理器,STM32处理器对收到的程序数据进行校验并最终烧录到芯片自身Flash的指定区域,进而完成程序升级的功能。实验结果表明,系统可以稳定运行,可以通过无线的方式实现对处理器中固化的程序进行升级。
随着计算机技术的发展,电子产品越来越多的融入人们生产生活的各个方面。电子产品中大部分都包含单片机、嵌入式处理器等可编程的芯片,芯片内固化的程序可能会由于某些原因需要进行改进、升级。
而有些电子产品外壳不方便打开或者安装在高压、高空等比较危险的场合,这样就不便于通过传统的下载器等方式进行程序升级,因而通过无线的方式升级处理器的程序就显得尤为重要,并且可以提供极大的便利,节省人力物力。
鉴于上述原因并结合LoRa技术功耗低、传输距离远及可靠性高等优势,研究了基于Lora技术无线升级STM32F767处理器程序的方法,该方法可以对采用其它无线通信手段升级处理器程序的应用场景提供有益的参考。
系统整体方案设计
系统的硬件结构包括:无线发送端、无线接收端及待升级程序处理器端3个部分。待升级的程序以bin文件形式存储在发送端的SD卡中,发送端通过按键来控制是否启动升级过程。发送端处理器在上电或复位后如果3s内检测到按下WK-UP键,则开始通过LoRa模块与接收端握手通信,如果握手成功则通过LoRa模块传送SD卡中待升级的bin文件,在传送过程中加入分帧机制、CRC校验机制、错误重传机制及接收超时退出机制。
接收端处理器对收到的bin文件进行文件长度和文件内容校验,确认无误后将该文件存入其内部RAM中,然后控制PA3输出低电平,PA2产生一个负脉冲,这样就复位了待升级程序端的处理器,然后通过串口一次性将bin文件的长度信息、文件内容以及CRC32校验值都发送给待升级程序端。
待升级程序端处理器复位后进入Boot Loader程序,在程序中判断PD11的电平,如果为高电平则直接跳转到用户程序的首地址,开始执行用户程序;如果为低电平则通过串口接收bin文件并存入内部RAM中,接收完毕后,如果bin文件的长度及CRC32值都正确则将其烧录到内部Flash的用户程序位置,烧录完毕后跳转到用户程序的首地址,开始执行新的用户程序。
嵌入式处理器及SD卡接口:采用意法半导体的STM32F767IGT6处理器作为发送端和待升级程序端的主控芯片,该芯片为基于Cortex-M7内核的ARM处理器,工作频率可达216MHz,内置1M字节程序存储器,512k字节SRAM及多种外设和通信接口。
接收端处理器的功能是通过LoRa模块接收程序文件,并通过串口发送给待升级端的处理器。因而接收端相当于待升级程序端处理器的板载编辑器,考虑便于将该部分功能集成到待升级程序处理器的电路板上,选用芯片尺寸及成本更具有优势的Cortex-M3内核的ARM处理器STM32F103VET6作为接收端的处理器。
待升级的程序以bin文件形式存储在SD卡中,发送端利用内置的SDIO接口来驱动SD卡,SD卡接口部分的电路原理如图。
LoRa模块采用安信可科技公司的LoRa扩频无线通信模块Ra-02.该模块是基于射频收发芯片SX1278设计开发的。
无线发送端。首先在PC机端利用集成开发环境MDK5编写待升级的程序,注意设置中断向量表的偏移地址及用户程序的首地址为0x08020000,然后利用MDK5软件内嵌的bin文件转换工具fromslf.exe生成bin文件,将该bin文件拷贝到SD卡中。
发送端的STM32F767IT6处理器在上电或复位后检测WK-UP键,如果3s内该键被按下,则读取SD卡中的bin文件,并对文件内容进行CRC232校验,然后将校验结果和文件长度封装成“首帧”并通过Lora模块发送给接收端。
发送和接收端握手成功后,开始分帧传送bin文件的内容,每一帧都加入帧序和CRC16校验值。
帧序逐帧加1(首帧帧序为0),在传送过程中加入错误重传机制及接收超时退出机制,任何一帧如果重传超过10次货10s内没有收到接收端的回应则中断发生,并给出错误提示,如果所有帧都发送完毕,则给出bin文件发送成功提示。
无线接收端,接收端的STM32F103VET6处理器上电后就一直查询LoRa模块是否接收到数据,如果接收到首帧则进行CRC16校验,校验通过则回复给发送端“ok”,同时提取文件长度和文件内容的CRC32校验值,并进入数据帧接收流程,否则回复给发送端“error”。
在接收过程中如果收到正确的数据帧,则按照帧序存入内容RAM,如果10s内没有收到数据或连续10次收到的数据CRC16校验都不通过,则退出整个bin文件的接收,重新等待发送端下次发送新的bin文件。
如果所有数据帧都接收完毕,则对接收到的数据进行CRC32校验,如果校验值和首帧的CRC32校验值一致,则配置PA3输出低电平,PA2产生一个负脉冲复位待升级程序的STM32处理器,然后通过串口一次性将bin文件的长度信息、文件内容以及CRC32值都发送给待升级程序的处理器,并重新配置PA2及PA3为高电平,然后等待STM32的串口返回值,如果收到“ok”代表文件传送成功,如果收到“error”表示文件传送失败,无论收到ok还是error都要重新等待发送端下次发送新的bin文件。
待升级程序处理器端的处理器在上电或复位后首先从Flash的0x08000000处运行Boot Loader程序,在该程序中判断PD11的电平,如果为高电平则直接跳转到用户程序的首地址0x08020000,开始执行用户程序;如果为低电平则通过串口接收待升级bin文件的内容、文件长度及CRC32值,接收完毕后对文件内容进行CRC32校验,如果校验得;到的值与串口接收到的CRC32值一致,则将文件烧录到内部Flash的用户程序位置(首地址:0x08020000),烧录完毕后跳转到用户程序的首地址,开始执行新的用户程序。文章来源:https://www.toymoban.com/news/detail-519458.html
系统测试
利用MDK5编写待升级的程序,然后转换成bin文件,存入SD卡中,测试无线程序升级的效果。因为内部RAM容量有限,目前支持的bin文件最大为61K字节,将bin文件拆分成64字节每帧,由于bin文件大小可能不是64的整数倍,尾帧可能不足64字节,尾帧长度按照实际大小处理。文章来源地址https://www.toymoban.com/news/detail-519458.html
到了这里,关于基于LoRa技术的STM32处理器无线程序升级系统设计(学习)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!