- 远程升级加备份一共需要4个扇区,要确保flash可以被分成四个扇区(F4的扇区好大,4个16k,1个64k,剩下都是128k,对于小容量芯片非常不友好)。
第一个存放出厂程序,也叫启动程序boot loader,第二个存放运行的升级程序,第三个存放接收的升级程序,第四存放备份数据。 - 由于stm32f401rct6只能分成2个64k和1个128k,所以存放接收的升级程序和备份空间放到了一切。
日常备份数据时并不会擦除整个扇区,只有存满64k的空间才会擦除。
接收升级程序前找到最后一个备份数据,拷贝到ram空间中,接着擦除整个扇区,再把升级程序以及备份数据写入。(注:将升级程序拷贝到第二个扇区后,把第三个扇区存放接收升级程序的特定位置写入垃圾数据(flash只能从1变成0,不能从0变1),避免启动程序一直重复。
注意点:
-
flash只能从1变成0,不能从0变1。
-
有指针指向flash的时候不能进行读写操作,会出现某些flash寄存器出错,包括但不限于:WRG,PGP,PGS。