-------------------------------------------------------------------------------------------
IAP+APP 是最基本的远程升级套件,而很多人忽略了IAP升级软件的重要性,这里就来讲讲这个IAP升级软件。暂时不考虑xmode、ymode,因为根本就不实用:在不同的WINDOWS平台都不能兼容,而且还要分X86/64BIT版本,IAP段代码占空间大。。。最多只能拿来做做试验。
-------------------------------------------------------------------------------------------
STM32F0xx系列是比F1系列便宜许多的,便宜也有好货:单位功耗低、引脚少、系列全。但是有一些不好的地方,比如FLASH容量偏小、运算速度慢、甚至IAP机制都不能用F1系列的。
所以本文就来介绍一款F0能够适用的IAP及电脑端上层IAP应用软件。
众所周知,F1系列的IAP一般都要占用12K的空间(08000000-08003000),或者小一点的也要8K的空间(08000000-08002000),这对于F1系列的FLASH起点都32K的来说,这并不算多;但是对于F0这种经济性的MCU就算多了,所以首先就要把IAP代码段缩减一半,做到4K之内(08000000-08001000),这对于STM32F030F4之类的只有16K的FLASH特别有效。
IAP一般都是采用串口1,但是针对STM32F042xx之类的建议采用串口2,应该修改IAP代码,因为这些芯片的串口1大都复用于CAN/USB,这些修改也较为容易。
然后接下来就是本文提供的重点内容:APP代码修改、文件合并工具、IAP应用软件。
-------------------------------------------------------------------------------------------
1.APP代码修改
这个应该是老生长谈的事情了,首先是中断向量的偏移问题,F1系列的中断向量偏移比较简单,而F0系列的则是略有不同,如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
for(i = 0; i < 48; i++)
VectorTable[i] = *(__IO uint32_t *)(APPLICATION_ADDRESS + (i << 2));//APPLICATION_ADDRESS =0x08001000
SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
请注意:以上这段一定要放在MAIN函数的最前面,特别是各个NVIC配置之前;如果位置错了,很有可能因为意外中断而导致跑飞!!!
其次,为了节省FLASH空间,这里不采用FLASH的标志作为跳转依据,而是采用BKP0作为标志寄存器,如下:
#ifdef IAP_DEBUG
case 0xe0:
if((UART1_RXB[2] == 0x01) && (UART1_RXB[3] == 0x01))//串口收到特定数据,则进入IAP模式
{
RTC_WriteBackupRegister(RTC_BKP_DR0, 0xABABABAB);//在BKP0位置写IAP标志(0xABABABAB)
NVIC_SystemReset(); //重启之后IAP会判断BKP0寄存器
}
break;
#endif
因为只要没掉电,BKP寄存器的数据在SystemReset过程中是不会丢失的,完全可以实现APP跳转IAP过程中保存关键性标志数据。当然BKP的使用方法需要按照ST的说明书,打开PWR\RTC功能。。。次要细节这里就不做说明。
注意:使用BKP寄存器有一个好处,就是IAP代码段不需要考虑芯片的FLASH大小,可以做成全系列通用。因为不同容量的芯片,其BKP地址是一致的,整个系列都可以使用同一个IAP代码;而采用FLASH方式,则IAP段代码就必须根据芯片的FLASH容量来修改并重新编译,比如stm32F0XX6/XX8系列的IAP段就不能通用,一个32K,一个64K,因为终点FLASH地址不同,必须修改对应的升级标志地址,导致通用性不佳。
之后还要设置开发工具里面的起始位置,这里以IAR为例:
-------------------------------------------------------------------------------------------
2.文件合并工具
不管哪种的IAP,都需要用烧录工具把IAP段先行烧录进去,然后通过IAP烧录APP。但是这会导致操作麻烦,生产过程复杂。
使用文件合并工具就能减少这段时间。
这个工具是用来把IAP段、APP段合并为同一个文件的工具,便于一次性烧录,免去二次烧录的麻烦。
当然这个工具还会把APP段空闲FLASH全部写成FF,避免因代码残留导致的意外问题。
-------------------------------------------------------------------------------------------
3.IAP应用软件
为什么费时费力要做UI软件?话说MCU工程师们总是会接点什么外包工程的,难免会遇到这样的问题:
A .授权烧录,但是无法控制数量;
B .自己烧录费时费事、物流费用高;
C .代码泄漏或者被解密的风险;
D .升级不方便、难以应对突发事件。
因为JLINK,STLINK,ULINK之类的工具是没有计数功能,也没有授权文件,谁都能烧录,而且还能读出全部代码,就算读保护也不给力。这就带来以上的尴尬问题。
而IAP应用软件正好可以解决这些麻烦。
授权文件正在开发中,敬请期待(其实是我嫌麻烦。有加密的功能用起来不方便,最重要是有一次忘记加密算法把自己坑了。后续需要的话再补充进去)
-----------------------------------------------------------------------------------------