啰嗦两句
之前我们分析了IAP的基本工作原理和编程应该注意的细节问题,接着上篇,我们来看看具体的编码问题。
正文
上篇基本将IAP工作的机理和程序组成以及运行路程分析过了,所以我们只看看关键模块的编码。
首先分析IAP,关键模块有三部分:通讯,FLASH操作,引导跳转。
一、通讯
我们先来谈谈通讯问题。可以将,无论什么通讯,都可以完成代码的传输,USART也好,USB也好,CAN也好,等等,只要是通讯外设,你都可以用来传输外设,但是考虑到实用性,也许USART是简单也是最最常用的。我们以就以USART为例来讲通讯。
文件的传输一定要稳定,传输过程中不可以丢数据,否则传输的文件就有问题,导致最后的APP程序存在问题。所以我们使用USART时需要选择合适波特率,要尽量大保证传输速率,但又不能太大导致丢帧。然后开启中断在中断将接收到的数据存放到一个数组里即可,随后处理即可。编码相信大家都会,就不在这里复述了。
二、FLASH操作
我们需要将接受到的APP程序写到合适的FLASH地址,以便后面引导启动。
首先应该明确STM32F4的FLASH地址为0x08000000-0x080FFFFF,若果越过这个空间写肯定是有问题的。下面我们看看FLASH写入的步骤。
1.校验写入地址有效性
//写入地址必须处于FLASH区间并且地址为4的倍数【按字写入】
if(WriteAddr < FLASH_BASEADDR || WriteAddr%4) //addr error
return ;
2.FLASH解锁,缓冲区除能
//必须要解锁FLASH并保证数据缓存处于关闭状态才可以进行FLASH写入
FLASH_Unlock(); //ready to clear sector
FLASH_DataCacheCmd(DISABLE);
3.判断是否要擦除缓冲区