这里使用STM32F103RCT6的[color=var(--comiis-color)]芯片制作[color=var(--comiis-color)]sd卡Bootloader。
一.硬件
这里使用的原子mini[color=var(--comiis-color)]开发板,芯片为STM32F103RCT6,带SPI驱动的SD卡槽。
二.软件(寄存器编码,为的是减少Bootloader的代码占用空间)
1. SD卡使用的是SPI驱动。SPI1_Init()初始化,SPI1_ReadWriteByte读写。

2. SD卡驱动和[color=var(--comiis-color)]FATFS文件系统。读SD卡、写SD卡、初始化SD卡等等,都是写好的驱动程序,直接可以用。这里也是用到了FATFS文件系统,需要移植两个文件。
3. 芯片Flash的操作。由于升级APP程序片需要用到Flash的操作,所以Flash的擦除,写入不能少。

4. APP程序跳入。当Flash里面写入了更新后的程序,需要跳转到Flash的起始地址,所以有一个函数需要。

5. 应用部分:
首先选择一个起始地址,是需要刷写程序的起始地址。只要大于Bootloader程序的总长度,并且APP程序的长度不能超过(芯片大小 - Bootloader程序大小)即可。
然后Flash中选取一个地址作为标志位,用于判断是否需要更新程序。
最后就是读取SD卡里的文件,把读取的写入到对应的Flash里面,完成跳转。

Main函数,先检测0x08002FFE这个地址的标志位,如果是0x02,说明有应用APP程序,不需要进行升级,所以直接iap_load_app(FLASH_APP_ADDR)跳转到APP的起始地址,开始运行程序,BOOT程序就到这里结束。 |
|