请教STM32通过GPRS远程升级的片内程序的方案

zx8227112   2008-11-17 16:38 楼主
初步设想是
当发送原声升级命令时,终端通过GPRS远程下载程序文件到某个存储芯片上,然后STM32切换模式,装载下载的升级程序文件,重启

回复评论 (16)

我已经实现了

                                 目标板上有一个FLASH芯片,用于装载新用户程序;目标板每次从BOOT区开始启动,首先检测FLASH中没有新用户程序时,跳转到用户区开始执行用户代码。GPRS服务器端要升级程序时,把新程序分包发送给终端,终端把新程序数据保存到FLASH中,新程序下完后目标板自己复位,然后从BOOT区启动,首先检测FLASH中有新用户程序时,开始读新程序并对用户FLASH区更新。。。更新完新程序后把FLASH中新程序标记清除,然后跳转到用户区执行。升级完毕。
点赞  2008-11-17 16:53

可以,比较保险

                                  
点赞  2008-11-17 16:58

很厉害

  winloop 发表于 2008-11-17 16:53 ST MCU  ←返回版面  按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

2楼: 我已经实现了

目标板上有一个FLASH芯片,用于装载新用户程序;目标板每次从BOOT区开始启动,首先检测FLASH中没有新用户程序时,跳转到用户区开始执行用户代码。GPRS服务器端要升级程序时,把新程序分包发送给终端,终端把新程序数据保存到FLASH中,新程序下完后目标板自己复位,然后从BOOT区启动,首先检测FLASH中有新用户程序时,开始读新程序并对用户FLASH区更新。。。更新完新程序后把FLASH中新程序标记清除,然后跳转到用户区执行。升级完毕。


------------------------------------------
我还在摸索。

问一下下载程序的时候分包大小、续传、校验之类的需要注意什么?
点赞  2008-11-17 17:43

不错 !

不错 !
不知道 不外挂FLASH 的话能否实现?就是写一段代码在内部FLASH
区,GPRS接收数据定制协议,当接收到某个命令时,将运行该内部FLASH段代码。作用就是 将 从串口接收到的数据 写到FLASH 用户程序区,最后跳到这里执行,当然启动代码要改下,确保系统一复位 ,程序就在这里执行!

不知道这样可行不!
点赞  2008-11-18 09:31

问一下下载程序的时候分包大小、续传、校验之类的需要注

                                 这是自己的事情,这个没别要别人帮忙吧
点赞  2008-11-18 09:59
可是,          AREA    RESET, DATA, READONLY
                EXPORT  __Vectors

__Vectors       DCD     __initial_sp              ; Top of Stack
                DCD     Reset_Handler             ; Reset Handler
                DCD     NMI_Handler               ; NMI Handler
                DCD     HardFault_Handler         ; Hard Fault Handler
                DCD     MemManage_Handler         ; MPU Fault Handler
                DCD     BusFault_Handler          ; Bus Fault Handler
                DCD     UsageFault_Handler        ; Usage Fault Handler
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     SVC_Handler               ; SVCall Handler
                DCD     DebugMon_Handler          ; Debug Monitor Handler
                DCD     0                         ; Reserved
                DCD     PendSV_Handler            ; PendSV Handler
                DCD     SysTick_Handler           ; SysTick Handler

                ; External Interrupts
                DCD     WWDG_IRQHandler           ; Window Watchdog
                DCD     PVD_IRQHandler            ; PVD through EXTI Line detect
                DCD     TAMPER_IRQHandler         ; Tamper
                DCD     RTC_IRQHandler            ; RTC
                DCD     FLASH_IRQHandler          ; Flash
                DCD     RCC_IRQHandler            ; RCC
                DCD     EXTI0_IRQHandler          ; EXTI Line 0
                DCD     EXTI1_IRQHandler          ; EXTI Line 1
                DCD     EXTI2_IRQHandler          ; EXTI Line 2
                DCD     EXTI3_IRQHandler          ; EXTI Line 3
                DCD     EXTI4_IRQHandler          ; EXTI Line 4
                DCD     DMAChannel1_IRQHandler    ; DMA Channel 1
                DCD     DMAChannel2_IRQHandler    ; DMA Channel 2
                DCD     DMAChannel3_IRQHandler    ; DMA Channel 3

STM32的中断向量是固化在FLASH的,boot怎么可以知道应用程序的的中断函数地址呢?
点赞  2010-9-7 14:35
可以用iap方式实现!

mcu,arm,dsp原理都一样的!


承接USB和RF设计应用
销售c8051f单片机开发工具、usb、RF 、NET学习板
http://yang96381.blog.163.com
点赞  2010-9-7 14:50
                                 这个很简单,不难
点赞  2010-9-7 20:09
                                 怎么个简单呢?能否具体说下怎么实现,BOOT要放在flash起始地址,APP1和APP2放在高地址,当APP升级后,中断地址都可能改变的,boot的中断向量怎么定位中断函数的地址呢?
点赞  2010-9-8 08:53
这个内存分块是可以实现的,不需要外部FLASH,不过应用程序大小就只能减半了。APP1,APP2存在不同地址,bootloader启动后先检查APP完整性和各自版本号,选择版本更新和完整的版本运行,中断向量在跳转之前根据运行的APP位置来设置。
至于GPRS传输采用FTP协议比较方便,传输完成后使用CRC32或MD5校验完整性。
点赞  2010-9-8 12:18
怎么个简单呢?能否具体说下怎么实现,BOOT要放在flash起始地址,APP1和APP2放在高地址,当APP升级后,中断地址都可能改变的,boot的中断向量怎么定位中断函数的地址呢? ...
转个角度看,为什么要支持位置1和2都能运行?

留3块程序位置,一块是默认BOOT,两块分别是位置1(运行区)和位置2(升级暂存区)。
BOOT启动判断位置1和2的APP,位置1校验没通过,位置2通过了,就把2的搬到1处,跳到1运行之。
或者有升级标志且位置2的校验通过,就把2的搬到1处再跳到1运行。
其他情况直接运行位置1。
点赞  2011-3-7 14:17
哎不懂。有没有例子提供参考下
点赞  2011-7-6 10:25
其实我也想求个例子.我看这帖子感觉已经好高端了
点赞  2011-7-6 17:04

回复 14楼 astwyg 的帖子

1:程序下载 的时候一定要校验
2:中断向量处理
3:开机对程序区的处理 跳转
处处留心皆学问!
点赞  2011-7-6 22:58

回复 14楼 astwyg 的帖子

1:程序下载 的时候一定要校验
2:中断向量处理
3:开机对程序区的处理 跳转
处处留心皆学问!
点赞  2011-7-6 22:59
可以联系我    q1251844251
点赞  2016-7-14 10:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复