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。