请教STM32通过GPRS远程升级的片内程序的方案
初步设想是
当发送原声升级命令时,终端通过GPRS远程下载程序文件到某个存储芯片上,然后STM32切换模式,装载下载的升级程序文件,重启
我已经实现了
目标板上有一个FLASH芯片,用于装载新用户程序;目标板每次从BOOT区开始启动,首先检测FLASH中没有新用户程序时,跳转到用户区开始执行用户代码。GPRS服务器端要升级程序时,把新程序分包发送给终端,终端把新程序数据保存到FLASH中,新程序下完后目标板自己复位,然后从BOOT区启动,首先检测FLASH中有新用户程序时,开始读新程序并对用户FLASH区更新。。。更新完新程序后把FLASH中新程序标记清除,然后跳转到用户区执行。升级完毕。
很厉害
winloop 发表于 2008-11-17 16:53 ST MCU ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖
2楼: 我已经实现了
目标板上有一个FLASH芯片,用于装载新用户程序;目标板每次从BOOT区开始启动,首先检测FLASH中没有新用户程序时,跳转到用户区开始执行用户代码。GPRS服务器端要升级程序时,把新程序分包发送给终端,终端把新程序数据保存到FLASH中,新程序下完后目标板自己复位,然后从BOOT区启动,首先检测FLASH中有新用户程序时,开始读新程序并对用户FLASH区更新。。。更新完新程序后把FLASH中新程序标记清除,然后跳转到用户区执行。升级完毕。
------------------------------------------
我还在摸索。
问一下下载程序的时候分包大小、续传、校验之类的需要注意什么?
不错 !
不错 !
不知道 不外挂FLASH 的话能否实现?就是写一段代码在内部FLASH
区,GPRS接收数据定制协议,当接收到某个命令时,将运行该内部FLASH段代码。作用就是 将 从串口接收到的数据 写到FLASH 用户程序区,最后跳到这里执行,当然启动代码要改下,确保系统一复位 ,程序就在这里执行!
不知道这样可行不!
问一下下载程序的时候分包大小、续传、校验之类的需要注
这是自己的事情,这个没别要别人帮忙吧
可是, 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怎么可以知道应用程序的的中断函数地址呢?
可以用iap方式实现!
mcu,arm,dsp原理都一样的!
承接USB和RF设计应用
销售c8051f单片机开发工具、usb、RF 、NET学习板
http://yang96381.blog.163.com
怎么个简单呢?能否具体说下怎么实现,BOOT要放在flash起始地址,APP1和APP2放在高地址,当APP升级后,中断地址都可能改变的,boot的中断向量怎么定位中断函数的地址呢?
这个内存分块是可以实现的,不需要外部FLASH,不过应用程序大小就只能减半了。APP1,APP2存在不同地址,bootloader启动后先检查APP完整性和各自版本号,选择版本更新和完整的版本运行,中断向量在跳转之前根据运行的APP位置来设置。
至于GPRS传输采用FTP协议比较方便,传输完成后使用CRC32或MD5校验完整性。
怎么个简单呢?能否具体说下怎么实现,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。
回复 14楼 astwyg 的帖子
1:程序下载 的时候一定要校验
2:中断向量处理
3:开机对程序区的处理 跳转
回复 14楼 astwyg 的帖子
1:程序下载 的时候一定要校验
2:中断向量处理
3:开机对程序区的处理 跳转