当前位置:首页 > 单片机 > 单片机
[导读]前沿:最近在做STM32的USB Bootlader/IAP功能,也就是通过USB实现固件升级,本文介绍下实现的基本思路,希望对实现IAP的同学一个参考,改方法已经在产品中得到实际应用并验证是比较合理,稳定可靠的。程序空间划分:

前沿:
最近在做STM32的USB Bootlader/IAP功能,也就是通过USB实现固件升级,本文介绍下实现的基本思路,希望对实现IAP的同学一个参考,改方法已经在产品中得到实际应用并验证是比较合理,稳定可靠的。

程序空间划分:
在单片机的程序Flash中分两个区,分别存储Bootloader代码和App代码,Bootloader放到代码起始地址,也就是0x08000000,App放到0x8020000地址,中间预留了很多的地址空间,主要是为了用来存储一些需要掉电保存的数据,比如我在0x0800C000地址就存放了App程序运行后写入该地址的标志数据。

启动流程:
上电后自然是运行Bootloader程序,Bootloader运行后,做的第一件事情如下所示


01

02

03

if((*((uint32_t*)EXE_FLAG_ADDR))==0x12345678){

JumpToApplication(APP_START_ADDR);

}


也就是判断App运行标志是否有效,这个标志是存放到EXE_FLAG_ADDR地址的,若有效就直接跳转到App程序运行,这个时间很短,所以用户看不到有Bootloader执行的效果,感觉就是直接运行的App程序,进入App程序后,App程序第一件事情如下


01

02

03

04

05

06

07

if((*((uint32_t*)EXE_FLAG_ADDR))==0xFFFFFFFF){

uint32_tExeFlag = 0x12345678;

__set_PRIMASK(1);//禁止全局中断

FLASH_Unlock();

ProgramDatatoFlash(EXE_FLAG_ADDR,(uint8_t*)(&ExeFlag),4);

FLASH_Lock();

}


也就是判断App标志是否有效,若有效则直接执行后面的程序,若无效则需要在EXE_FLAG_ADDR地址写入执行标志。
Bootloader程序判断App标志若无效,那么Bootloader就不会直接跳转到App,因为这个时候是需要进行升级App的操作,所以程序就进入Bootloader的正常工作流程,也就是等待升级App的各种命令,比如擦出固件,烧写固件,校验固件等。当固件成功写入并校验通过之后,PC端就可以发送一个程序跳转命令跳转到App执行。

PC端操作流程:
PC端和单片机是通过USB进行数据交换的,当然用其他方式也可以,基本流程都是差不多的。
PC程序首先当然是扫描设备,打开设备,然后调用获取固件信息的函数,调用该函数后可以得知当前固件的名称,版本号,固件类型(Bootloader还是App),若发现当前固件不是Bootloader,那么就得通过USB给固件发送一个程序跳转命令,也就是跳转到Bootloader代码执行,当然App在跳转到Bootloader的时候必须把EXE_FLAG_ADDR地址的标志数据擦出掉,这样Bootloader才能进入正常的升级流程。
控制固件程序进入Bootloader之后,PC端程序将打开App固件程序文件,然后根据文件大小,发送擦出App代码存储区域Flash的数据,然后再分包将固件发送给单片机,单片机端Bootlader程序接收到数据后将数据写入App的Flash区域,数据写完之后再进行校验,我是通过计算CRC16的方式进行校验的,校验通过之后就可以发送跳转命令控制程序跳转到App运行了,到此升级流程完毕。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式开发中,STM32的时钟系统因其灵活性和复杂性成为开发者关注的焦点。然而,看似简单的时钟配置背后,隐藏着诸多易被忽视的陷阱,轻则导致系统不稳定,重则引发硬件损坏。本文从时钟源选择、PLL配置、总线时钟分配等关键环...

关键字: STM32 时钟系统

在嵌入式系统开发中,STM32系列微控制器的内部温度传感器因其低成本、高集成度特性,广泛应用于设备自检、环境监测等场景。然而,受芯片工艺差异和电源噪声影响,其原始数据存在±1.5℃的固有误差。本文从硬件配置、校准算法、软...

关键字: STM32 温度传感器

在能源效率与智能化需求双重驱动下,AC-DC转换器的数字控制技术正经历从传统模拟方案向全数字架构的深刻变革。基于STM32微控制器的PFM(脉冲频率调制)+PWM(脉冲宽度调制)混合调制策略,结合动态电压调整(Dynam...

关键字: AC-DC STM32

2025年8月13日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 即日起开售Asahi Kasei Microdevices (AKM) 的...

关键字: 数模转换器 USB 无线扬声器

物联网与智能化设备快速普及,供电方式的选择直接影响设备部署的灵活性、成本与可靠性。PoE(以太网供电)与USB供电作为两大主流技术,分别在工业网络、智能家居、消费电子等领域占据关键地位。本文将从设备适配性、传输距离、功率...

关键字: PoE USB

在无线技术的发展历程中,部署的简便性往往是成功的关键。像Wi-Fi、蓝牙和早期的蜂窝技术,只有在集成变得简单、无缝且实惠时,才能实现大规模的应用。而如今,Wi-Fi HaLow——一种专为物联网(IoT)设计的远距离、低...

关键字: 物联网 Wi-Fi USB

2025年8月5日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics)即日起开售Microchip Technology的新款AVR® SD 8位MCU。AVR...

关键字: MCU 工业自动化 USB

随着高解析度音频应用的不断发展和广泛部署,诸如USB与I2S之间等不同专业接口之间的高品质音频转换需求日益增长,由此带来了实现高性能、高实时性与高灵活性的新挑战。为此,边缘AI和智能音频专家XMOS携手其全球首家增值分销...

关键字: SoC USB 处理器

【2025年7月24日, 德国慕尼黑讯】全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)近日推出新型英飞凌ID Key系列,进一步扩展其通用串行总线(USB)...

关键字: 控制器 USB 非易失性存储器

当前智能家居产品需求不断增长 ,在这一背景下 ,对现有浇花装置缺陷进行了改进 ,设计出基于STM32单片机的全 自动家用浇花机器人。该设计主要由机械结构和控制系统构成 ,机械结构通过麦克纳姆轮底盘与喷洒装置的结合实现机器...

关键字: STM32 麦克纳姆轮 安全可靠 通过性强
关闭