1、编译firmware时,从axf文件转换成bin文件并对bin文件进行加密处理;
2、通过PC机软件“固件升级”功能把加密后的bin文件下载到SPI Flash中;
3、ARM接收完毕新的固件并校验后设置固件升级信息,然后复位系统;
4、在ARM系统中,前4KB包含IAP(在线编程)程序。IAP在启动时首先检查固件升级信息区,如果有升级内容则根据信息区内容从SPI Flash中读取并解密固件,然后写入ARM的内部Flash。
5、升级完毕后,IAP调用固件程序执行正常程序功能;
二、IAP程序的要求和基本流程:
1、IAP程序不需要从串口、USB口或以太网接收数据,固件传输由应用软件自行完成;
2、IAP程序仅检查固件升级标志,如果没有设置,IAP则加载Flash中的应用软件;
3、如果应用软件设置了固件升级标志、固件地址和固件加密方法,IAP程序就根据上述信息,进入固件升级流程;
4、固件升级流程:解除Flash的lock状态/读写保护,读取外部存储器中已加密的firmware,对Firmware解密后写入内部Flash,开启读保护和写保护;
5、加载Flash中的应用软件。
三、应用程序的要求:
1、内存映射中IROM必须避开IAP程序占用的空间;
2、在程序中必须重新指定中断向量表的地址:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);
3、调试版和在线升级版的中断向量表和IROM的地址是不同的,必须分别处理。
4、必须实现从PC机获取Firmware手段,一般有串口、以太网或U盘,然后把Firmware复制到ARM的外部存储器。
5、为了避免盗版或增加盗版的难度,PC机必须要提供一个Firmware加密软件,该软件对Firmware加密并由IAP解密。
6、IAP程序和PC机加密软件是属于公司绝密的技术内容,必须掌握在核心工程师手中,并签署保密协定;
四、问题:
在调试IAP程序过程中,出现无法下载程序到Flash中,而且Flash中的内容也无法读出,原因是在IAP程序中启用了读保护;
解决方法:
在RAM中执行一个解密程序,去掉Flash的读保护标志;
1、从已有的STM32工程复制成STM32Unlock;
2、修改工程选项:
3、编辑RAM.ini文件:
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
}
LOAD STM32Unlock.axf INCREMENTAL // Download,红色代表工程文件名.axf
Setup(); // Setup for Running
g, main
4、在main.c文件中增加以下代码:
int main(void)
{
RCC_DeInit();
FLASH_Unlock();//This MUST done first
FLASH_ReadOutProtection(DISABLE) ;
NVIC_SystemReset();
return 0;
}
5、编译并下载到ARM的RAM中执行后重新开机即可恢复正常的Flash读写;
6、编译,要求自动输出出厂烧写版本、加密的升级版本;
包括硬件编号、编译版本;
上一篇:STM32F407驱动MT9T001 CMOS图像传感器模块
下一篇:一种基于ARM的远程电表抄表系统集中器的设计方案
推荐阅读最新更新时间:2024-03-16 15:15