打印
[应用相关]

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

[复制链接]
8850|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yaxis|  楼主 | 2008-11-17 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初步设想是
当发送原声升级命令时,终端通过GPRS远程下载程序文件到某个存储芯片上,然后STM32切换模式,装载下载的升级程序文件,重启
沙发
winloop| | 2008-11-17 16:53 | 只看该作者

我已经实现了

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

使用特权

评论回复
板凳
lzt7_519| | 2008-11-17 16:58 | 只看该作者

可以,比较保险

使用特权

评论回复
地板
yaxis|  楼主 | 2008-11-17 17:43 | 只看该作者

很厉害

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

2楼: 我已经实现了

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


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

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

使用特权

评论回复
5
千千鸟| | 2008-11-18 09:31 | 只看该作者

不错 !

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

不知道这样可行不!

使用特权

评论回复
6
winloop| | 2008-11-18 09:59 | 只看该作者

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

这是自己的事情,这个没别要别人帮忙吧

使用特权

评论回复
7
LUCONGWEN| | 2010-9-7 14:35 | 只看该作者
可是,          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怎么可以知道应用程序的的中断函数地址呢?

使用特权

评论回复
8
大秦正声| | 2010-9-7 14:50 | 只看该作者
可以用iap方式实现!

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


承接USB和RF设计应用
销售c8051f单片机开发工具、usb、RF 、NET学习板
http://yang96381.blog.163.com

使用特权

评论回复
9
xixihaha0| | 2010-9-7 20:09 | 只看该作者
这个很简单,不难

使用特权

评论回复
10
LUCONGWEN| | 2010-9-8 08:53 | 只看该作者
怎么个简单呢?能否具体说下怎么实现,BOOT要放在flash起始地址,APP1和APP2放在高地址,当APP升级后,中断地址都可能改变的,boot的中断向量怎么定位中断函数的地址呢?

使用特权

评论回复
11
janeslee| | 2010-9-8 12:18 | 只看该作者
这个内存分块是可以实现的,不需要外部FLASH,不过应用程序大小就只能减半了。APP1,APP2存在不同地址,bootloader启动后先检查APP完整性和各自版本号,选择版本更新和完整的版本运行,中断向量在跳转之前根据运行的APP位置来设置。
至于GPRS传输采用FTP协议比较方便,传输完成后使用CRC32或MD5校验完整性。

使用特权

评论回复
12
heuyck| | 2011-3-7 14:17 | 只看该作者
怎么个简单呢?能否具体说下怎么实现,BOOT要放在flash起始地址,APP1和APP2放在高地址,当APP升级后,中断地址都可能改变的,boot的中断向量怎么定位中断函数的地址呢? ...
LUCONGWEN 发表于 2010-9-8 08:53

转个角度看,为什么要支持位置1和2都能运行?

留3块程序位置,一块是默认BOOT,两块分别是位置1(运行区)和位置2(升级暂存区)。
BOOT启动判断位置1和2的APP,位置1校验没通过,位置2通过了,就把2的搬到1处,跳到1运行之。
或者有升级标志且位置2的校验通过,就把2的搬到1处再跳到1运行。
其他情况直接运行位置1。

使用特权

评论回复
13
1949zbh| | 2018-10-24 16:57 | 只看该作者
收藏

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

23

帖子

0

粉丝