STM32 IAP程序设计以及问题

发布者:GHR2596最新更新时间:2016-10-17 来源: eefocus关键字:STM32  IAP  程序设计 手机看文章 扫描二维码
随时随地手机看文章
一、IAP实现方法:
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、编译,要求自动输出出厂烧写版本、加密的升级版本;
包括硬件编号、编译版本;
关键字:STM32  IAP  程序设计 引用地址:STM32 IAP程序设计以及问题

上一篇:STM32F407驱动MT9T001 CMOS图像传感器模块
下一篇:一种基于ARM的远程电表抄表系统集中器的设计方案

推荐阅读最新更新时间:2024-03-16 15:15

基于IAP和Keil MDK的远程升级设计
写在前面:三个周之前,我突然想写一个远程升级的程序。那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知。我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题。三个周之后,我用自己设计的方法实验了50多次,无一例升级失败。 三个周来,遇到了很多的不解、困惑,甚至是想放弃,但我现在想说的是:很多未知的困难会挡在我们面前,我们会感觉毫无头绪甚至觉得毫无出路忍不住要放弃,但多坚持一下,那些困难不但能烟消云散还能带给我们进步。 本设计是基于LPC2114和Keil MDK(V4.10),但所有支持IAP的处理器都可借鉴本方案,重要的是思想,而不是用什么。 0 引言 在应用编程(IAP)技术为系统
[单片机]
基于<font color='red'>IAP</font>和Keil MDK的远程升级设计
嵌入式uClinux下的CAN总线设备驱动程序设计
1、uClinux操作系统概述   uClinux是Linux2.0的一个分支,它被设计用于没有MMU的微控制器领域,即被广泛应用于嵌入式Linux领域。uClinux的最大特征就是没有MMU(内存管理单元模块)。它很适合那些没有MMU的处理器,如ARM7TDMI,m68ez328等。   uClinux具有完全的TCP/IP协议栈,同时对其他许多的网络协议都提供支持。这些网络协议都在uClinux上得到了很好的实现。uClinux可以称作是一个针对嵌入式系统的优秀网络操作系统。 2、Linux驱动程序设计概述   Linux系统内核通过设备驱动程序与外围设备交互,设备驱动程序是Linux内核的一部分,它是一组数据结构和函
[单片机]
STM32高级控制定时器1学习
高级控制定时器(Tim1)是由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。 用途在于:测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较,PWM,嵌入死区时间的互补PWM等)。 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。 具体如下: 16位上下,自动装载计数器。 16位可编程预分频器,计数器时钟频率的分频率的分频系数为1-65535之间任意数值 4个独立通道: 输入捕获 输出比较 PWM生成 单脉冲模式输出 死区时间可编程的互补输出 使用外部信号控制定时器和定时器互连的同步电路 在指定数目的计数器周期之后更新定时器寄存器
[单片机]
基于STM32的多种printf用法
在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。 如果你的UART串口不够用,还要用printf,此时该怎么办? 解决方法:使用SWO/SWV。 SWO:Serial Wire Output,串行线输出 SWD:Serial Wire Viewer,串行线查看器 一、常见printf输出 1.UART打印 2.Keil MDK-ARM Viewer输出 3.IAR EWARM终端输出 4.ST-LINK Utility SWV输出 二、UART映射printf 使用硬件UART串口映射,实现printf打印输出。 #include stdio.h int fp
[单片机]
stm32专题三十六:MDK编译过程和文件类型(一)
MDK编译过程和文件类型 1 编译过程 (1)编译:MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个 c / c++和汇编源文件编译成对应的以“.o”为后缀名的对 象文件(Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息; 编译器: .o文件(每个.c文件,编译完都会生成.o目标文件): (2)链接:链接器 armlink 把各个.o 文件及库文件链接成一个映像文件 “.axf” (MDK)或 “.elf”(IAR) ; (3)对链接器生成的 elf 映像文件利用格式转换器fromelf 转换成“.bin”或“.hex”
[单片机]
<font color='red'>stm32</font>专题三十六:MDK编译过程和文件类型(一)
ST发布STSAFE-A100评估套件,扩大STM32 Nucleo生态系统
意法半导体发布了STSAFE-A100评估套件,将进一步扩大STM32 Nucleo生态系统的丰富资源,加快安全单元的集成设计,利用可复用源代码以简化安全物联网设备、医疗探针等高价耗材、IT配件和消费产品的开发设计流程。 该评估套件包括集成STSAFE-A100安全单元的X-NUCLEO-STSA100扩展板和STSW-STSA100软件包。软件包括设备驱动程序、STM32微控制器源代码和STSAFE-A100的用例源代码,包括品牌和生态系统保护、设备注册和安全云连接等用例。 STSAFE-A100是一款便于使用的8引脚安全单元,可为主机系统提供稳健的不可变的硬件身份验证和安全数据管理服务,具有极强的网络攻击防御能力
[单片机]
ST发布STSAFE-A100评估套件,扩大<font color='red'>STM32</font> Nucleo生态系统
STM32 SPI时钟问题
STM32中有SPI1/2/3,关于SPI的时钟问题,要具体看是SPI1还是SPI2/3。SPI1时钟由APB2时钟分频而来,而SPI2/3时钟由APB2时钟分频而来。 APB1的最高频率是36MHz,APB2的最高频率是72MHz,而PCLK1和PCLK2一般也默认配置为其最高工作频率36M和72M,详参时钟树。 SPI1时钟由APB2时钟分频而来,可以选择2、4、8、16、32、64、128、256这几个分频系数。而手册规定STM32的SPI时钟最快是18MHz。对于STM32F103的SPI1接口时钟,由72M的PCLK2分频得到,所以分配系数大于等于4(72M/4 = 18M)。对于STM32F103的SPI2/3
[单片机]
基于P89C51RD2 IAP功能的数据存取与软件升级
摘要:分析Boot ROM中的部分源代码,重点是IAP功能以及ISP和IAP的相互关系;应用IAP功能将剩余程序空间转化为数据空间,以及自编ISP程序来实现仪器的软件升级。 关键词:P89C51RD2 Boot ROM IAP(ISP)功能 软件升级 1 概述 P89C51RD2是Philips公司的80C51系列单片机中的佼佼者,具有1KB的片上RAM和64KB的片上内存;具有3种编程方式,即在系统编程ISP(InSystem Programming)、在应用中编程IAP(In-Application Programming)以及通过商用编程器的并行编程。ISP是指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved