# bootloader_stm32f103_md **Repository Path**: eming/bootloader_stm32f103_md ## Basic Information - **Project Name**: bootloader_stm32f103_md - **Description**: 中等容量stm32的bootloader,支持应用程序跳转,固件升级,不支持差分补丁升级 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 7 - **Created**: 2023-03-13 - **Last Updated**: 2025-05-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 功能说明: - 这个bootloader的主要功能是按照下载的升级包类型升级应用程序,然后跳转到应用程序区运行。 - 仅支持非压缩的固件。 - 升级包均附加64字节包头,用来保存升级包名称,长度,校验等信息,类似u-boot镜像头。 - 支持STM32F103CB芯片。 ## FLASH分区说明: - 目前所有数据均使用芯片内部Flash存储,因此将Flash分为4个分区。 - 分区1为bootloader分区,固定20K - 64字节,这最后64字节用来保存应用程序镜像头。 - 分区2为应用程序区,镜像起始地址为0x08004FC0,程序入口地址为0x08005000。 - 分区3用来保存下载的升级包。 - 分区4位于Flash的最后2K,用来保存一些升级信息。 - 当前bootloader支持128K分区参数,具体可参见flash.h文件。 - 如果需要将数据保存在外部Flash,可自行改造。 ## 升级流程说明: 1. 首先需要使用到mkuzimage工具,用来生成非压缩固件。 - 非压缩固件 `mkuzimage -a 0x08004FC0 -e 0x08005000 -i image.bin -o uimage.bin` 2. 然后将升级包(uimage.bin)通过某种通信方式(串口,网口,4G等)下载到分区3,这部分需要在应用中实现。也可以在bootloader命令行下使用ymodem命令,具体下述。 3. 最后更新位于分区4的升级标志(分区4偏移地址0,值为0xAA55),这一步建议在应用程序中完成。也可在bootloader命令行下,输入`iap-start`命令,更新这个标志。 4. 复位,bootloader会自动解析升级包类型,然后升级。 ## 使用ymodem下载固件及补丁包(超级终端使用SecureCRT) 1. 下载应用程序到分区2 - 分区2固件由bootloader直接引导,所以必须使用mkuzimage生成非压缩固件,然后下载,在超级终端输入命令: `#ymodem app ` - 超级终端窗口收到`CCC`时,用YMODEM发送文件。 - 下载成功后,设备会自动重启,并引导到应用程序运行。 2. 下载升级包到分区3 - 升级包支持上文提到的2种类型,下载时可任选一种,在超级终端输入命令: `#ymodem patch ` - 超级终端窗口收到`CCC`时,用YMODEM发送文件。 - 下载成功后,设备会自动重启,并自动升级到新版本程序。 ## 其他: 这个项目使用了很多源于网络的开源代码,例如atomlib等,在此表示感谢。