程浥 发表于 2016-8-26 17:38:15

在线升级

本帖最后由 程浥 于 2017-5-22 09:25 编辑

在线升级的作用:
不用带个调试器到用户那里去给用户下载程序。

在线升级过程:
某个设备使用一种通讯手段,将文件发送给单片机(app),单片机将这段代码暂时存储到某个介质(考别去)里面,然后它(boot)将自身(app)覆盖掉。

升级通信过程:
动作对象               动作                                                命令
1.        上位机                 开始升级                                        (发送升级命令)
2.        下位机                准备升级                                        (发送升级开始)
3.        上位机                发送文件                                        (传输文件)
4.        下位机                进行文件接收和判断                (发送接收文件成功/失败命令)

下位机运行流程:
Flash分区图:


Boot:
装载boot程序,负责代码搬运,开机时运行
无升级标志则跳转至app,
有升级标志将flash2的程序放到flash1

Flash1:
装载app程序,运行用户程序
接收升级文件,
接收成功后,设置升级标志

拷贝区:
装载升级文件,

备份:
预留存储

胡小均 发表于 2016-9-12 17:49:33

发的什么玩意儿??:@

程浥 发表于 2016-9-14 16:16:01

胡小均 发表于 2016-9-12 17:49
发的什么玩意儿??

被我删除了 后面补上

张金权-11级电子 发表于 2016-9-27 16:26:07

6666666666666666666666666666666666666666666

程浥 发表于 2017-5-22 09:26:45

本帖最后由 程浥 于 2017-5-22 09:38 编辑

实现例子:

例程使用串口做传输介质,选择超级终端为发送端,传输协议为ymodem文件协议。


      0.这个程序的pc平台是 超级终端或者secureCRT单片机是STM32F4
      
      1.升级流程:首先给一个值使单片机进入ymodem接收,收到文件成功后将升级标志,重启单片机让iap帮你干活

      2.ymodem移植是基于stm32官方给的iap升级程序做的,但他们的ymodem坐在了iap里
      不符合上个帖子所讲的

      3.ymodem升级需要一个操作让单片机来进入升级,当然此处的串口使用不符合正常的用法,
      一般用法都是使用空闲中断DMA接收,或者中断接收定时器鉴别包间隔,这个需要自行修改

      4.正常的在线升级还可以添加bin文件加密,比如aes、des什么的.
      这个就需要上位机加密,原文件发送,最后在iap搬运时候解密
      
      5.iap里面做app校验,升级储存区校验也是相当不错的,更加安全

      6.当然gprs,网络,usb等都挺好玩的。

附件代码:


附图:



页: [1]
查看完整版本: 在线升级