基于STM32F103RCT6的Bootloader升级

本文介绍了基于STM32F103RCT6的Bootloader升级过程,详细讲解了Bootloader的用处、本质以及ICP、ISP、IAP的区别。还探讨了Bootloader的架构,包括最终架构的设计,并提到了Ymodem协议在升级中的应用。此外,文中还涉及到CRC16_XMODEM校验和cJSON库的使用,用于构建JSON反馈信息。
摘要由CSDN通过智能技术生成

基于STM32F103RCT6的Bootloader升级

Bootloader的用处

在产品发布后,免不了后续对产品进行升级以及修复BUG。
如果设备距离太远等一系列因素导致本地升级不方便,那么对固件的版本控制以及远程固件升级则是必不可少的一环。

Bootloader的本质

Bootloader本质其实就是引导程序,使之运行你想让它运行的版本。

ICP\ISP\IAP的区别

ICP:In circuit programmer,电路编程,即直接对存储区编程,如:JTAG等
ISP:In system programmer,在系统编程,一般是厂家的bootloader程序。
IAP:In application programmer,在应用里编程,用户可以自定义升级方式升级APP。

Bootloader架构

由于程序是存储在FLASH里,所以我们需要事先对FLASH地址进行划分。
以下是我划分的APP区域:
1、Bootloader地址 0x0800 0000 大小0xC800
2、APP运行地址    0x0800 C800 大小0x19000
3、APP备份地址    0x0802 5800 大小0x19000
4、参数地址       0x0803 E800 大小为剩余大小
注:这里的STM32用的型号是RCT6,每个型号的FLASH与SRAM大小都不同,具体如下:
**第二位:6=32K、8=64K、B=128K、C=256K、D=384K、E=512K**
所以分配地址需要按照大小分配,不可越界,地址起始为0x08000000。

架构说明

这里用的是双APP模式,考虑到升级的APP会有失效的情况,导致程序卡死或者不是自己想要的结果,这时候就需要用到备份APP。
这里bootloader会接收主站传输的版本号,版本号一致会直接跳转至APP运行。
APP版本号不一致则会将APP搬运至备份区存储。
这里我是用STMFLASH的库搬运的。缓存设定为1024,循环搬运。
void carry_APPtoBack(void)
{
   
	u16 buff[1024];|\\1024缓存
	u32 app_addr=appAddr,back_addr=backUpAddr;
	for(u8 temp=1;temp<=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值