一种对微处理器存储单元进行文件烧写的方法与流程

文档序号:14443638阅读:273来源:国知局
一种对微处理器存储单元进行文件烧写的方法与流程

本发明涉及一种对微处理器存储单元进行文件烧写的方法。



背景技术:

嵌入式行业中常用的微处理器stm32程序升级方法为使用开发工具或者系统存储区中工厂内置的自举程序,通过外部串行调试(swd或者jtag)将升级包编程到flash的基址;如果要使用串口usart下载升级程序,stm32厂商采用iap应用程序结构的嵌入式软件,iap驱动程序是预先烧写在0x8000000的一小段代码,在用户应用程序执行前执行,接收串口数据烧写flash;在官方和市面上使用的iap驱动程序是通过pc端的超级终端将二进制文件下载到微处理器的内部flash中的;对于具有iap驱动程序结构的嵌入式软件,iap驱动部分和用户应用程序时相对独立的。产品有了升级版本后,用户可以得到产品和升级程序包。整个过程较为复杂,稳定性差,出错率高,很容易出差错。而且官方iap驱动程序使用的数据传输协议为ymodem协议,可以轻松被任意的超级终端截获数据,非法使用者可以获得完整的升级包,对产品篡改,iap代码也容易获得,非法使用者通过升级模式更新应用程序部分,将可以复制产品的全部软件代码,因此安全性能极差,对技术型企业存在潜在威胁。



技术实现要素:

针对上述现有技术中存在的问题,本发明的目的在于提供一种可避免出现上述技术缺陷的对微处理器存储单元进行文件烧写的方法。

为了实现上述发明目的,本发明提供的技术方案如下:

一种对微处理器存储单元进行文件烧写的方法,通过主机与从机互相配合实现,包括主机运行操作过程和从机运行操作过程。

进一步地,所述主机运行操作过程包括以下步骤:

步骤(1):主机打开升级文件初始化文件指针,初始化串口设备和circlebuffer缓存,开始接收串行字符数据;

步骤(2):主机轮询circlebuffer缓存;

步骤(3):主机控制从机复位引脚,置低电平,延时200ms后置高电平,完成从机重新复位;

步骤(4):主机等待从机起始帧升级请求,接收到请求,按照升级文件update.bin的大小,发送升级数据包总数量请求;

步骤(5):主机等待从机升级请求回复,接收到回复,发送flash解锁请求;

步骤(6):主机等待从机解锁回复,接收到回复,进入数据包传输等待;

步骤(7):主机接收到数据包请求,发送对应的数据包数据;

步骤(8):主机接收到文件校验请求,发送校验和数据;

步骤(9):主机接收到升级完成通知,退出运行。

进一步地,所述从机运行操作过程包括以下步骤:

步骤一:初始化串口设备和circlebuffer缓存;

步骤二:发送升级起始帧,通知主机准备就绪;

步骤三:启动定时器,判断主机回复是否超时;

步骤四:查询criclebuffer数据长度,提取分析数据包数据;

步骤五:停止定时器,进入协议通信和数据处理子函数controllogical进行操作;

步骤六:结束升级协议处理程序,发送校验码请求命令;

步骤七:接收校验码,与内部flash存储空间计算的校验结果进行比较。

进一步地,所述步骤三具体为:启动定时器,判断主机回复是否超时,如果回复状态位超时则判断用户程序完整性,跳转下一阶段程序;如果回复状态位不超时则更新指示灯状态,进入步骤四。

进一步地,所述步骤五具体为:停止定时器,进入协议通信和数据处理子函数controllogical实现以下操作;

1)接收升级请求命令,分析数据包数量,保存数量为packet_maxnum;

2)接收解锁请求命令,调用flash_unlock(),flash_readoutprotection()进行解锁操作,并发送解锁请求回复;

3)等待主机上一条命令的ack回复,进入数据包传输状态,发送数据包请求,数据包计数m_index自加一;

4)循环接收数据包,当数据包计数取余64不等于0,保存数据包的32byte数据到m_flashbuff存储,直至m_fashbuff数据量达到2048byte容量,写于内部flash中,完成一个页的写入操作;

5)当数据包数据达到packet_maxnum,而取余不等于64,此时认为达到升级文件最后的字符,对于不满足2048byte数据位填充零处理,写入最后的数据到flash。

进一步地,所述步骤七具体为:接收校验码,与内部flash存储空间计算的校验结果进行比较,若校验正确,则完成升级程序,发送升级完成命令,通知主机完成升级,并跳转至用户程序;若校验失败则跳转至步骤一。

进一步地,所述方法的通信协议物理层采用标准uart通信接口,逻辑电平为3.3vttl电平,uart工作在8n1模式,即8位数据位,无奇偶校验,一位停止位,波特率固定在115200bps。

进一步地,所述方法的通信协议链路层的数据帧结构如下:

进一步地,所述方法的通信协议链路层的子命令码描述如下:

本发明提供的对微处理器存储单元进行文件烧写的方法,过程较为简单,稳定性好,出错率低,不容易出差错,安全性能好,运行效率高,可以很好地满足实际应用的需要。

附图说明

图1为主机与从机的功能关系示意图;

图2为主机运行操作过程流程图;

图3为从机运行操作过程流程图;

图4为本发明的时序图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图和具体实施例对本发明做进一步说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

一种对微处理器存储单元进行文件烧写的方法,通过主机与从机互相配合实现,包括主机运行操作过程和从机运行操作过程。

如图1所示为主机与从机的功能关系示意图。主机的功能包括:

从机电源控制:用户控制的升级操作开始时,主机控制从机电源重启,从机跳转到rploader程序运行;

升级文件处理:主机识别升级文件大小,计算长度,确定数据包数量,在通信中起关键作用;

人机界面处理:主机会通过framebuffer绘制进度条,实时显示升级进度,出错情况等。

从机的功能包括:

数据包烧写:操作stm32内部flash,把串口编程到指定地址;

flash自检:开机后和升级后对整个升级位置校验,并和主机通信;

串口缓冲:主机从机串口收发缓冲处理,本方案用circlebuffer缓冲处理。

用户发出指令(点击升级按钮)后,开始对微处理器存储单元进行文件烧写的过程。

参考图2和图4所示,所述主机运行操作过程(可以通过运行rpsender程序实现)包括以下步骤:

步骤(1):主机打开升级文件初始化文件指针,初始化串口设备和circlebuffer缓存,开始接收串行字符数据;

步骤(2):用户通过ui界面点击升级按钮通知主机串口进入升级等待程序,主机轮询circlebuffer缓存;

步骤(3):主机控制从机复位引脚,置低电平,延时200ms后置高电平,完成从机重新复位;

步骤(4):主机等待从机起始帧升级请求,接收到请求,按照升级文件update.bin的大小,发送升级数据包总数量请求;

步骤(5):主机等待从机升级请求回复,接收到回复,发送flash解锁请求;

步骤(6):主机等待从机解锁回复,接收到回复,进入数据包传输等待;

步骤(7):主机接收到数据包请求,发送对应的数据包数据;

步骤(8):主机接收到文件校验请求,发送校验和数据;

步骤(9):主机接收到升级完成通知,退出运行程序(rpsender程序)。

参考图3和图4所示,所述从机运行操作过程(可以通过运行rploader程序实现)包括以下步骤:

步骤1:初始化串口设备和circlebuffer缓存;

步骤2:发送升级起始帧,通知主机准备就绪;

步骤3:启动定时器,判断主机回复是否超时,情况如下:

1.回复状态位超时:判断用户程序完整性,跳转下一阶段程序;

2.回复状态位不超时:更新指示灯状态,进入步骤4;

步骤4:查询criclebuffer数据长度,当数据长度大于5byte时就提取分析数据包数据;

步骤5:停止定时器,进入协议通信和数据处理子函数controllogical实现以下操作;

1.接收升级请求命令,分析数据包数量,保存数量为packet_maxnum;

2.接收解锁请求命令,调用flash_unlock(),flash_readoutprotection()进行解锁操作,并发送解锁请求回复;

3.等待主机上一条命令的ack回复,进入数据包传输状态,发送数据包请求,数据包计数m_index自加一;

4.循环接收数据包,当数据包计数取余64不等于0,保存数据包的32byte数据到m_flashbuff存储,直至m_fashbuff数据量达到2048byte容量,写于内部flash中,完成一个页的写入操作;

5.当数据包数据达到packet_maxnum,而取余不等于64,此时认为达到升级文件最后的字符,对于不满足2048byte数据位填充零处理,写入最后的数据到flash;

步骤6.结束升级协议处理程序,发送校验码请求命令;

步骤7.接收校验码,与内部flash存储空间计算的校验结果进行比较:

1.校验正确:完成升级程序,发送升级完成命令,通知主机完成升级,并跳转至用户程序;

2.校验失败:跳转至步骤1;

本发明所采用的通信协议设计如下:

(一)物理层描述

采用标准uart通信接口,逻辑电平为3.3vttl电平,uart工作在8n1模式,即8位数据位,无奇偶校验,一位停止位,波特率固定在115200bps。

(二)链路层描述

数据帧结构如表1所示:

表1

子命令码描述如表2所示:

表2

本发明的方法中,烧写文件利用的是主机的存储器,当主机有优越的文件读写速度时,可以利用主机对升级文件进行校验、网络更新下载等操作,而从机硬件设计上则不需要sd卡、usb等外部存储器,只需要提供基本电源和连接串口,软件系统上也不需要搭载文件系统,从机整个的rploader软件只需要8.19kb大小,而市面上的升级系统,如果搭载sd卡,一般要读取sd卡升级文件,移植文件系统,会使从机bootloader软件体积较大;在串口数据收发处理中,使用软件缓存circlebuffer结构,为发送接口tx和接收接口rx分别申请1k内存,快速接收所有字节进入缓存,然后通过recvmsgfrombuffer和stmcontrollogical两个方法把接收的正确字符转换为协议消息,完成接收过程;该过程支持更高的串口波特率,通过修改串口波特率,可以提高文件传输速度,串口协议默认波特率为115200,当stm32f105作为从机时,在时钟速度设置正确的情况下串口传输波特率可以设置为400k,稳定完成文件烧写;本发明的方法中设计的协议使用的单一个32byte数据包校验和整个flash升级数据校验一起实现的冗余数据校验的方法,运算过程比crc16简单,cpu占用率低,单个校验结果虽然比crc的误码率高,但两种校验结合误码率会大幅度降低,并且提高运算效率;通过ack应答和重发机制实现错误数据包在不大于设定的错误计数内重发,比stm32的iap程序更加安全可靠;demo板对主机系统完成了ui界面的接口和升级协议接口的对接,从机电源受主机的操作,当用户发现从机运行异常时,通过ui接口使用遥控器操作ui,点击升级按钮,实现重启从机,运行0x0地址的rploader完成从机升级文件的烧写和更新,通过ui和从机的状态灯闪烁都能正确提醒用户升级状态,这是对升级方法的可视化扩展,也是stm32的iap所不具有的。

本发明提供的对微处理器存储单元进行文件烧写的方法,过程较为简单,稳定性好,出错率低,不容易出差错,安全性能好,运行效率高,可以很好地满足实际应用的需要。

以上所述实施例仅表达了本发明的实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1