极海半导体APM32F407的USB MSD IAP应用(下)
05 Flash操作的实现
极海半导体APM32F407系列Flash的操作和普遍的IAP程序一样,包括Flash的解锁、上锁、擦除和写入等操作

06 MSD Bootloader实现
### Bootloader架构
MSD Bootloader的程序结构如下,由USB、Flash驱动、伪FAT32系统、MSC类处理及Bootloader应用程序代码构成。
资源使用和分配情况
使用AC6的image size优化等级后,MSD Bootloader约使用15KB Flash资源,如果使用F4xx系列,刚好使用第一个扇区存放bootload程序即可。
 Total RO  Size (Code + RO Data)                14728 (  14.38kB)
    Total RW  Size (RW Data + ZI Data)             11936 (  11.66kB)
    Total ROM Size (Code + RO Data + RW Data)      14936 (  14.59kB)
所以APP和Bootloader空间划分如下所示。
程序流程
程序运行流程如下图所示,首先枚举MSD设备,接着以伪FAT32文件系统应答和处理主机的操作和数据,最后更新状态文件或者直接跳转到APP程序中。

这些流程中,是以USB Host访问的地址及数据来判断属于哪个过程的,这些地址的计算可以参考上述伪文件系统章节的扇区和APP固件起始地址的计算。
状态判断和切换
Bootloader程序初始化时会创建第一个文件,用于指示Bootloader状态。该文件的文件名变化和IAP过程的关系如下图所示。
07 MSD IAP的使用过程

将USB口接入电脑,然后按住KEY1按键并复位MCU,那么程序就会自动进入MSD BOOTLOADER模式。同时在电脑上枚举出以BOOTLOADER命名的U盘,而MINI Board上的LED3会持续闪烁。
初始化完成后可以看到U盘中的状态文件名变为READY.txt。
然后拷贝或者发送APP的BIN文件到U盘。注意该BIN文件的偏移地址大小需要根据实际来设定,这里设定为0x4000。
等待文件传输完成后,程序将自动重新枚举。如果IAP成功则状态文件名变更为SUCCESS.txt,如果失败则为ERROR.txt。
然后复位(释放KEY1)即可进入APP程序中,也可以设置IAP完成后自动跳转到APP。