导言
基于FLASH存储器的微处理器,一个重要的需求是安装到产品中后,仍具有升级固件(firmware)的能力。这种能力称为“在应用中编程”(In-application-programming,IAP)。
这篇应用笔记以STM32F 32位cortex-M3为例,阐述了构建IAP系统的一些通用概念。并提出了一种新的技术,有助于单片机开发人员更好的构建IAP系统。
STM32系列微处理器基于FLASH存储器。在FLASH中运行的固件可以擦写FLASH本身。FLASH的头4KB具有写保护,适合存储IAP固件(IAP BootLoader)。
IAP(In-application-programming)、ICP(In-circuit-programming)、ISP(In-system-programming):ICP是在电路板编程,IAP是在应用编程。ISP大部分时候指ICP,但少数MCU厂家将IAP称为ISP。
1.1 IAP系统的要求:
1.1.1 Safety(安全性):升级代码需要完整的、正确的写到Application Area。另外需要考虑到升级过程中断电、强干扰等意外事件。
1.1.2 Security(保密性):升级过程有可能被商业竞争对手入侵,因此需要采取加密手段。
1.1.3 Smart(灵巧性):BootLoader会挤占FLASH空间,因此应该尽量减小BootLoader占用的FLASH大小。
1 只占2KB的IAP BootLoader—一种同时满足Safety/Security/Smart的新技术:
1.1 需要解决的2个问题:
1.1.1 由于IAP BootLoader需要包含对FLASH进行擦写的指令,在强干扰的环境中,微处理器可能跑飞。如果跑飞到对FLASH进行擦写的指令段,有机会造成Application Code的失效,后果严重。
1.1.2 在Safety/Security和Smart之间,存在矛盾。要保证安全性和保密性,就会增加BootLoader的复杂性,从而称不上“Smart”。
1.1 要点:
1.1.1 IAP BootLoader In FlashèIAPPreLoader In Flash+IAPBurner In SRAM:
为了减小IAP BootLoader占用的空间,在FLASH中只存储一个装载程序IAPPreLoader(预引导程序),而真正完成IAP工作的代码IAPBurner(烧录者)存储在IAP Server中,或包含在升级代码中。
1.1.2 为了防止装载非法的IAPBurner,采用了散列函数算法。散列函数(Hash)是计算机领域的重要算法。具有以下特性:
1.1.2.1 压缩性。对任意长的数据,经hash算法得到一个固定长度的数据。比如我们常用的BT下载软件,就使用MD5算法的128bit摘要数据来代表文件块。
1.1.2.2 单向性。不可能从hash算法的结果逆推出源数据。
1.1.2.3 弱抗冲突性。给定一组数据,计算上不可能找出另一组具有同样hash结果的源数据。
1.1.2.4 强抗冲突性。计算上也不可能找出任意两组源数据,使它们具有相同的hash结果。
1.1.3 可以重复利用SRAM,装载多段IAPBurner程序,以完成更复杂的功能。
1.1 新IAP方案的有益效果:
1.1.1 减小IAP BootLoader占用的FALSH。
1.1.2 防止长期运行时跑飞到BootLoader,而误擦写代码。
1.1.3 允许增加IAP程序的复杂性,获得更强的加密性能。
1.1.4 由于IAPBurner的代码不存储在FLASH中,可以增加保密性。
全文pdf格式下载