ARM片外Flash存储器IAP解决办法

合集下载

基于arm7的(lpc2388)flash的读写操作

基于arm7的(lpc2388)flash的读写操作
*/
int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf) {
unsigned long n;
#if SET_VALID_CODE != 0 // Set valid User Code Signature
if (adr == 0) { // Check for Vector Table
}
// Load data to data latches
for (i = 0; i < ((sz+3)/4); i++) {
M32(adr) = *((unsigned long *)buf);
buf += 4;
adr += 4;
}
// Load remaining bytes to full page (512) with 0xFF
{
flash_paramin[0] = IAP_ERASESECTOR;
flash_paramin[1] = sec1;
flash_paramin[2] = sec2;
flash_paramin[3] = IAP_FCCLK;
(*(void(*)())STAT_ADR)(flash_paramin,flash_paramout);
if (IAP.stat) return (1); // Command Failed
IAP.cmd = 51; // Copy RAM to Flash
IAP.par[0] = adr; // Destination Flash Address
IAP.par[1] = (unsigned long)buf; // Source RAM Address

LPC2214的IAP实现方案

LPC2214的IAP实现方案

LPC2214的IAP实现方案引言 IAP即在应用中编程,对于嵌入式产品,指在不影响产品正常运行的情况下实现应用程序的更新。

许多ARM芯片都提供该操作接口,相对于ISP(在系统编程)方式,具有方便灵活且不需要借助专用boot装载程序或工具的特点,而且在不影响嵌入式产品正常运行的情况下即可完成应用程序的动态升级。

在工业控制领域尤其是电力系统控制领域中,嵌入式产品必须保证连续、稳定、可靠地运行,由各种原因导致的应用程序的更新都必须在产品正常运行过程中完成,因此许多用户对相关产品的IAP功能都有明确的要求。

LPC2214是Philips公司推出的一款32位ARM7TDMI-S工业用微控制器。

内置25 6 KB 高速Flash,128位宽度接口/加速器可以实现60 MHz的操作频率;配置有2个UART接口、4个外部片选,支持8、16、32外部总线;片内boot下载程序可以实现在系统编程(ISP)和在应用中编程(IAP)。

由于该芯片的内置Flash速度很快,并且支持128位宽度接口/加速,应用程序存储并运行在片内Flash中可以获得较快的执行速度。

本文提供一种基于LPC2214的在应用编程方案,可以实现应用程序方便、可靠的升级,以及当地维护串口或远方GPRS方式的代码更新。

更新过程中,通信中断、装置异常复位、装置停电等异常情况的发生,都不会导致因程序更新而造成的产品死机。

1 嵌入式产品应用程序启动方式在嵌入式产品中,应用程序可以运行在RAM或Flash中。

对于中高端产品,由于要求较高的执行速度和效率,一般采用Coldfire、x86、PowerPC、ARM9等CPU。

此类CPU一般都有DRAM控制器,支持DRAM操作,为了获得较快的执行速度,将应用程序从代码Flash中复制到DRAM的代码空间后才开始执行。

对于x86模式,应用程序以文件方式保存在硬盘或电子盘上。

在不同的嵌入式操作系统上,应用程序在DRAM上的展开方式存在一定差异,例如VxWorks系统可以完成对压缩应用程序的展开,而早期的PSOS操作系统则是直接展开,但其基本过程类似。

基于STM32处理器的存储器IAP编程技术

基于STM32处理器的存储器IAP编程技术

基于STM32处理器的存储器IAP编程技术陈亮【摘要】In order to solve the problem of memory software update, this paper proposed an IAP program update method that based on STM32-access the NOR Flash controller by the FSMC interface of STM32 processor.And the paper illustrated with an example of JFM-F512K32 chip, analyzing configuration way of FSMC interface, realized the function of data of flash memory by run IAP program.This design have successful realized the purpose of automatic update of flash program, easy to use, and also have rapid speed and high validity.%本文针对存储器程序更新的问题,提出一种基于STM32的IAP程序更新方法-通过STM32的FSMC接口实现NOR Flash访问,并以JFM-F512K32芯片为例,说明FSMC接口的配置方法,通过IAP程序运行实现Flash存储器数据的更新.该设计成功实现Flash程序的自动更新功能,操作简单、速度快、正确率高.【期刊名称】《电子测试》【年(卷),期】2017(000)010【总页数】2页(P77-78)【关键词】STM32;FSMC;NORFlash;IAP【作者】陈亮【作者单位】中航工业计算所,陕西西安,710068【正文语种】中文对于嵌入式系统,产品发布后更新升级是一个重要的需求。

STM32IAP使用说明

STM32IAP使用说明

STM32 IAP 调试经验一、基本方法描述:将flash划分成3个扇区(可以单存用单片机内部flash,对于中大型容量MCU,且用户较小的案例,可以外挂片外flash应用于程序较大的工程),引导区、用户app区和程序存储备份区。

程序启动时先从引导区启动,查询备份区是否有升级程序标志,如果有,则将备份区的程序填充到用户app区,覆盖掉原先的程序,然后跳转到app区执行应用程序;如果没有升级标志,则直接跳转到用户app区地址,执行应用程序。

二、从引导区跳转到app区的函数定义需要添加以下两个函数1、void JumpToSpecifiedAddress(u32 EntranceAddress){u32 JumpAddress;pFunction Jump_To_Application;JumpAddress = *(vu32*) (EntranceAddress + 4);Jump_To_Application = (pFunction) JumpAddress;__set_MSP(*(vu32*) EntranceAddress); //Initialize Stack PointerJump_To_Application();}入口参数即是用户划分的app区地址,调用该函数后便可跳转执行app程序,例如分配app 区地址从0x8002000(引导区从0x8000000开始,8k空间)则,入口参数即0x8002000 2、void NVIC_Configuration(void){#ifdef VECT_TAB_RAMNVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);#elseNVIC_SetVectorTable(NVIC_VectTab_FLASH,0x2000);#endif}此处使用NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x2000);重新定义程序的中断向量链表,因为引导区8k,所以长度0x2000,从起始地址开始外呼0x2000地址的就是用户app 的中断向量链表,这里需根据实际分配的引导区长度填充,本例用用8k,填入0x2000. 注:#define NVIC_VectTab_FLASH ((uint32_t)0x08000000)三、引导区-用户应用区启动跳转简易实例引导区程序:int main(void){RCC_Configuration(); //系统时钟配置NVIC_Configuration(); //中断向量映射配置JumpToSpecifiedAddress(0x8002000)//跳转至用户app区}用户应用程序:int main(){//根据用户需要编写自己的程序}编译器设置:1、引导区程序工程设置其实地址0x8000000 长度8k(0x2000)2、用户应用程序其实地址0x8002000 长度60K(0x1E000)程序下载过程:需要烧写两个程序,才能运行,下载时先烧写引导程序,然后烧写应用程序。

STR912--IAP问题

STR912--IAP问题

STR912--IAP问题默认情况下,bank0 是映射到地址0x00.考虑到,IAP 程序需存储在bank1,而用户程序需存储在bank0.因此须使用CAPS 工具,将bank1 映射到地址0x00.另外,在IAP 程序运行期间,必须在执行用户程序跳转之前,通过程序将bank0 重映射到地址0x00(注:IAP 程序已经实现了bank0 重映射到地址0x00,用户不需要自己来编写代码).ARM 处理器产生的地址叫虚拟地址,把这个地址按照某种规则转换到另一个物理地址去的方法称为地址映射。

banko,bank1 就是物理地址,而ARM 处理器(例如KEIL 下就是虚拟地址),通过CAP 可以将bank1 物理地址映射到虚拟地址0x00, 然后通过软件设置将bank0 物理地址映射到虚拟地址0x00,bank1 映射到虚拟地址0x80000//RAM_exevoid Execute_STR9Application(void)void Execute_STR9Application(void){ pFunction Jump_To_Application;/* -------------------------------------------------------------------------- */ /* Configurebank 0 as 512KB and bank 1 as 32KB */ /* Remap bank 0 at address 0x0 and bank 1at address 0x80000 */ /* -------------------------------------------------------------------------- */ FMI->BBSR = 0x0;//之前相同FMI->NBBSR = 0x6;//之前相同FMI->BBADR = 0x80000 >> 2;//FMI->BBADR=0(之前) FMI->NBBADR = 0x0 ;//FMI->NBBADR = 0x8000>>2 (之前) /* Jump to the user application and execute it */ Jump_To_Application = (pFunction) 0x00; Jump_To_Application();}引导块(跳转之前)----地址:0x00000 大小32K非引导块(跳转之前)--地址:0x80000 大小512K。

IAP烧录指导及说明文件

IAP烧录指导及说明文件

J-LINK烧IAP烧录文件指导一、安装Setup_JLinkARM_V408h二、打开J-Flash三、在软件里选择Options-Project settings四、在Target Interface栏中选择如下五、在CPU栏选择如下:Device ST STM32F103VC六、设置OK点击确定七、在File->Open选择要烧录程序,是以.hex或.bin后缀八、选择烧录目标文件后打开文件九、连接设备:红线段对应J1的圈十、点击F7,进行烧录,当提示如下即为烧录成功十一、如果遇到烧录失败,首先确定软件配置,然后是看JLINK是否插好,重新插好后再上电,基本上都能烧录成功IAP烧录应用软件指导文件一、IAP简介IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

实现IAP功能,需要将设备程序做成两个项目程序,第一个项目程序仅提供IAP引导和接收数据和程序。

其不提供正常功能操作。

第二个项目程序即为用户程序。

其可提供正常的功能操作。

二、IAP优点采用IAP方式烧录程序可以远程烧录程序,不需要拆壳,不需要编程器,仅需要网线就可以更新程序。

无需守护。

三、进入IAP方式:设备有两种模式进入IAP程序流程1 开机启动按3键2 网络远程控制进入IAP程序流程进入IAP流程状态提示:液晶会提示进入IAP流程绿灯会不停闪烁(ME20可参考)四、烧录步骤:1 若当前设备正在应用程序,可以通过烧录软件点击Upload Program进入IAP程序2 检测设备是否在线点击Test Online按钮,检测设备是否在线,若不在线则请检测是否网络是否连通或者设备是否在IAP程序中3 打开程序点击,选择要烧录的文件4 点击进行下载程序,当设备下载好应用程序后会自动进入应用程序流程。

LPC2000系列ARM Flash存储器系统和编程

LPC2000系列ARM Flash存储器系统和编程
读存储器 写 RAM 运行 将 RAM 内容复制到 Flash 上述 ISP 命令终止时返回 CODE_READ_PROTECTION_ENABLED。 代码读保护使能时,ISP 擦除命令只允许擦除用户扇区的内容。这种限制是代码读保护 不使能时所没有的。IAP 命令不受代码读保护的影响。 这一特性对 LPC2210 是无效的,因为它没有片内 FLASH。
8
17
0x0003 E000 – FFFF*
8
* : Boot Block 一般位于片内 Flash 存储器顶端。在 128kB Flash 中,它是第 16 个扇区(对应的扇区号是 15),
在 256kB Flash 中,它是第 18 个扇区(对应的扇区号是 17)。Boot Block 占有的 Flash 存储器扇区不能用来 存放代码。
引脚 P0.14 作为 ISP 硬件请求时要特别注意。由于 P0.14 在复位后处于高阻模式,用户 需要提供外部硬件(上拉电阻或其它器件)使引脚处于一个确定的状态。否则可能导致非 预期的进入 ISP 模式。
2. FLASH BOOT 装载程序 Boot 装载程序控制复位后的初始化操作,并提供实现 Flash 编程的方法(代码)。BOOT 装载器可启动对空片的编程、已编程器件的擦除和再编程以及在运行的系统中由应用程序对 Flash 存储器进行编程。 特性
非化台擞儒耙沫结个惕火兹掩影研榴尾调恐忿枯亿讲概应暂衔掷鲤极费霜化卫着架庭哭酌侈肯魂顷不轨挠骇埋砧疾荔客魏枣唇劲娃题滚难惩床蚤哭茄痰出剐稠笨依拂廖腺介龋弘代未讫庸敦钱震赖热硬淑徊颓祖柬俞只匣汪攻蕾纷冀霹董冻掸得首掳艾至琐愤碑娩凤桅沏沂窑缺赦鹏瞪莎括苯娠忧大裕仕敖缉嚣挞稽年恕窘内目猾纤梨兴浸底牟硕铅舌疗惜向刁表炯目鄂鸟甩垂私痒盒疆烫诛郁煎试蛆酪绅渤伴体控票涛贵芹契初监梁顷番卤询数咬迷例衬讳讹藐拯垦铃钠午幅鸥蹬秸懈耙怠芦轩夸寸磺肺峡往滤兼就令刽口案稳雅笨宰哎墒尸侈渠洋现钙绳数绦嘉亭疏善磺棒梁出锌呜黄袭虏甘庭束倚筋控壬纳父愉辨凌夷岩淮疮疼臃渴补醒漾铬纬咎种朋俭蹄售拯楷潭隐藕茶汾友韵披容额褂瑞弧泥纤今点哈辫湿赖亏阻侄夺缀兄影龋擞团皱护砍赫镇爪愧碘蚁奔莫楼闭楔傀铂荆惯生篱仲维荤刁磅冻盟因悍钻堪而序膛挝馋彻仅嚼渭励参羊弱睹科重快令既辫匆押捶蝶霹勉捞翅殆鬼蛊尺治右靡袄恨言烧湍铣咽愿拂嚏棠抖赔帘架举谩债妈稍痹夫保妻豌贱绣雄叮船赐公氨田拈先化贪方沸甸磊记翔方浊尚林哗疡间谍怎蔬避硫奄桌曹馅窥纱下侮汰要吕啡墒松瞳驼耀趣抹倪欢旅躇吩呆蒸瘟老乐腾彰雍辅结五狠却系翼结寒拣讹涎双鳃决跳境怠刃掀山徽挪少工倦玻磁活踪唇汇抿疫死崇锦蛤贫盅芒炭气lpc2000系列armflash存储器系统和编程铱崇剃寞焕爸册见挣召怜卸薛淹胆曲嫡籽器冉共闰瑶都芬愁葵勉尿辙榨按围姥岁俊惠靖批匡诱慧卒遣郴扁作颈菲搓妻惹旦沛嵌对茅蚊闻浮梅燎歪熬撼伯奄悍煮悯革邱次铬浮离藩焕赋适撤缕盯腆蜒栗钥限勺还芦春匣宙鉴辫袱悬境霜狭册切玉架溯郧贮党闰阐契棉蓑念皇硬矛比嘶阔玲古异拆驯秋鳖媳幅孝酵礁武震珍目满尿诗象线转谣掇津告履嘻浸拳业袁屎京槛末爹贯梅夸坪摩瞄舀氛胚眠爸万磷甩厩经且定茅泅瀑舔婶阑枣筐任辙折项毙元搪防斋成仓辞殷拐杜囤把努窍雕婚姚粟逗台倦墅危垦惜慷瘦浇巢笑蜕状导胎透厅舀泵乍托通抬莽炊棠劈凛进惺型嚼显角孔三劲戮歼亡艇肺铰替拇瞳菩构对于在应用编程来说应当通过寄存器r0中的字指针指向存储器ram包含的命令代码和参数来调用iap程序

arm擦除flash

arm擦除flash

1:刚开始研究ARM的时候不知道为知道为什么ARM就仿真不了.从网上找到很多方法最有效的就是isp擦除flash下面就把步骤详细的说明一个.
2:擦除步骤
1)安装lpc 2000 flash utility 没有的话去网上搜,迅雷里面有
2)把ARM的p0.14 拉低,这个很重要,使DSP进入ISP模式
3)使用ARM的串口0,必须得有232转TTL 模块
4)RX 接到arm的TX,TX接到arm的RX,当然如不确定的话到时换一下就可以了
5)做擦除时是不连仿真器的
6)设备加电,启动lpc 2000 flash utility
7)把串口根据自己计算机的串口设置串口号,波特滤为9600
8)选择芯片,外部晶振,然后点击read device id
9)出现此对话框后,重启设备,点
击确定
10)就认出这两个选项了,正确,否则换一下RX,TX试
一下.
11)擦除
12)若成功状态栏会显示
作者:于林勇。

一种单片机IAP方案-STM32F

一种单片机IAP方案-STM32F

一种单片机固件IAP方案导言基于FLASH存储器的微处理器,一个重要的需求是安装到产品中后,仍具有升级固件(firmware)的能力。

这种能力称为“在应用中编程”(In-application-programming,IAP)。

这篇应用笔记以STM32F 32位cortex-M3为例,阐述了构建IAP系统的一些通用概念。

并提出了一种新的技术,有助于单片机开发人员更好的构建IAP系统。

STM32系列微处理器基于FLASH存储器。

在FLASH中运行的固件可以擦写FLASH 本身。

FLASH的头4KB具有写保护,适合存储IAP固件(IAP BootLoader)。

1IAP 概览:1.1 IAP(In-application-programming)、ICP(In-circuit-programming)、ISP(In-system-programming):ICP 是在电路板编程,IAP 是在应用编程。

ISP 大部分时候指ICP ,但少数MCU 厂家将IAP 称为ISP 。

1.2IAP 系统的硬件组成:1.3IAP 系统的固件组成:1.4IAP BootLoader 的流程:1.4.1BootLoader的激活条件,通常在复位后,首先进入BootLoader,并检查某些条件,以选择激活BootLoader还是跳转到Application。

一般有以下几类条件:1.4.1.1检测IAP Port上某个GPIO的状态。

1.4.1.2检测IAP Port上某条输入线的信号序列。

1.4.1.3检测Application Code的有效性、标志。

1.4.2本地存储器的使用:1.4.2.1在远程IAP系统中,经常使用本地存储器来存储升级代码。

便于升级代码的分包传输、完整性校验。

1.5IAP系统的要求:1.5.1Safety(安全性):升级代码需要完整的、正确的写到Application Area。

另外需要考虑到升级过程中断电、强干扰等意外事件。

STM32 IAP 无法运行用户程序的解决方法

STM32 IAP 无法运行用户程序的解决方法

STM32 IAP 无法运行用户程序的解决方法IAP 程序:主要是设置用户程序的起始地址APPLICATION_ADDRESS,如0x08004000,通过外设把用户代码写入FLASH 的用户区。

满足条件后,跳转至用户区起始地址。

解释一下跳转部分代码:/* Test if user code is programmed starting from address “APPLICATION_ADDRESS”*/if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)// 判断栈顶地址是否在0x2000 0000 - 0x2000 2000 之间// 通过判断栈顶地址值是否正确来判断是否已经下载用户应用程序。

因为用户程序的启动文件开始会初始化栈空间,如果栈顶地址正确,说明用户程序已经下载。

{__set_PRIMASK(1);// 关闭全局中断。

注意,在跳转前,必须先关闭全局中断,进入用户程序后,在中断向量表地址设置完成后再开中断。

printf(“Jump to the new program.\r\n”);/* Jump to user application */JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);// 前4 字节为中断向量表Jump_To_Application = (pFunction) JumpAddress;// 指向用户程序复位函数所在的地址/* Initialize user applications Stack Pointer */__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);// 设置用户程序的栈指针Jump_To_Application();// 执行用户程序}需要注意的是,在IAP 程序中,跳转用户程序前,需要先关闭全局中断。

gd32 iap 例子

gd32 iap 例子

gd32 iap 例子
IAP (In-Application Programming) 是GD32系列微控制器中的一个功能,允许在应用程序运行时更新其内部Flash存储器。

以下是一个简单的IAP例子,展示了如何使用IAP来更新Flash中的数据。

假设我们有一个Flash地址0x,其中存储了一个字节的数据,初始值为
0x55(即二进制的。

步骤1:启动Bootloader
当MCU上电或复位时,它会首先运行Bootloader。

Bootloader的主要任务是检查是否有更新请求。

步骤2:发送更新请求
如果需要更新Flash中的数据,可以通过某种通信方式(如UART、SPI等)向MCU发送一个更新请求。

步骤3:擦除Flash块
Bootloader接收到更新请求后,会擦除Flash中需要更新的区域。

在这个
例子中,我们将擦除地址0x处的数据。

步骤4:写入新数据
接着,Bootloader会从外部设备接收新的数据,并写入到Flash中。

在这个例子中,我们将地址0x处的数据更新为0xAA(即二进制的。

步骤5:跳转到应用程序
最后,Bootloader会跳转到应用程序的入口点,并开始执行应用程序。

以上就是一个简单的IAP例子。

需要注意的是,具体的IAP实现细节可能会根据不同的MCU型号和开发环境而有所不同。

在实际使用时,应参考相关的技术手册和文档来了解更多关于IAP的细节和用法。

单片机ISP、IAP和ICP几种烧录方式的区别

单片机ISP、IAP和ICP几种烧录方式的区别

单片机ISP、IAP和ICP几种烧录方式的区别单片机ISP、IAP和ICP几种烧录方式的区别玩单片机的都应该听说过这几个词。

一直搞不太清楚他们之间的区别。

今天查了资料后总结整理如下。

ISP:In System Programing,在系统编程IAP:In applicating Programing,在应用编程ICP:In Circuit Programing,在电路编程ISP是指可以在板级上进行编程,也就是不用拆芯片下来,写的是整个程序,一般是通过ISP接口线来写。

IAP虽然同样也是在板级上进行编程,但是是自已对自已进行编程,在应用中进行编程,也即可以只是更改某一部分而不影响系统的其它部分,另外接口程序是自已写的,这样可以进行远程升级而不影响应用。

打个比喻吧:1、ISP是把房子拆了再重造一间,那么在造好之前当然是不能住人的啦!2、IAP是在造好的房子里边进行一些装修,当然人可以继续住啦!ICP是在电路编程,是LPC芯片的编程方式,相当于ATMEL的ISP,而LPC的ISP就相当于ATMEL的IAP了。

ISP于IAP的区别ISP:in system programming, 在系统编程IAP: in applicatin programming 在应用编程但两者的操作方式,结果和应用场合有什么区别什么是ISP:用写入器将COD e烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;什么是IAP:在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;应用场合:1,ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了;2,IAP 如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去, 这可能是他们的优点或应用吧在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。

什么是IAP?如何实现IAP?

什么是IAP?如何实现IAP?

什么是IAP?如何实现IAP?IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。

这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:1)检查是否需要对第二部分代码进行更新2)如果不需要更新则转到4)3)执行更新操作4)跳转到第二部分代码执行第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。

对于STM32来说,因为它的中断向量表位于程序存储器的最低地址区,为了使第一部分代码能够正确地响应中断,通常会安排第一部分代码处于Flash的开始区域,而第二部分代码紧随其后。

在第二部分代码开始执行时,首先需要把CPU的中断向量表映像到自己的向量表,然后再执行其他的操作。

如果IAP程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。

针对这样的需求,STM32在对Flash区域实行读保护的同时,自动地对用户Flash区的开始4页设置为写保护,这样可以有效地保证IAP程序(第一部分代码)区域不会被意外地破坏。

ST的网站上有使用USART实现IAP的例子,各位可以参考这个例子和相应的手册。

应用笔记 AN2557 - STM32F10xxx in-application programming using the USART例程:AN2557 - STM32F10xxx in-application programming using the USARTSTM32/STM8意法半导体/ST/STM。

讲述IAP功能在实际使用过程中的应用方法以及相关解决方案PPT学习教案

讲述IAP功能在实际使用过程中的应用方法以及相关解决方案PPT学习教案
第11页/共44页
在应用编程(IAP)
由于IAP是Thumb代码,因此,需要在ADS编 译选项中,选中ARM/Thumb Interworking选型, 这样ARM和Thumb指令就可以混合编译。
第12页/共44页
在应用编程(IAP)
IAP程序会使用片内RAM空间的顶部32个字 节,因此,在支持IAP的场合,用户程序应该避免 使用这部分空间。
…… 结果n
参数表最大 数目为5
第10页/共44页
在应用编程(IAP)
#define
IAP_LOCATION
0x7FFFFFF1 IAP程序入口
typedef
void (*IAP) (unsigned int [ ] , unsigned int [ ]);
…… IAP iap_entry;
定义函数类型指针 定义函数指针
8KB Boot Block 重映射
地址重映射
0x7FFF FFFF 0x7FFF E000
1.0GB 0.0GB
片内静态RAM
8KB Boot Block 片内Flash 异常向量表
0x4000 0000 0x0007
0x00F0F7FEF000
0x0000 003F 0x0000 0000
第6页/共44页
CPU运行 Boot代码
控制器
RAM
ARM7 JTAG 处理器核
外设 UART0
FLASH
Boot Block
通过各种途径 获取用户代码
通过IAP对 Flash编程
第8页/共44页
在应用编程(IAP)
IAP状态转换的指令是“BX
CPSR_c, #0xdf SP, =StackUsr – 32 PC, R0

基于IAP的ARM处理器固件升级设计

基于IAP的ARM处理器固件升级设计

基于IAP的ARM处理器固件升级设计作者:方彬浩来源:《现代信息科技》2018年第08期摘要:本文以ARM处理器为平台,以恩智浦公司的LPC2136为例,在In-Application Progamming(IAP)技术原理基础上设计并实现了嵌入式微处理器在线及远程升级技术。

该技术摒弃了传统升级前需要打开设备跳线等繁琐过程,并解决了升级过程意外中断、传输误码等关键难点问题。

关键词:应用编程;ARM;启动装载程序中图分类号:TP368.11;TN06 文献标识码:A 文章编号:2096-4706(2018)08-0050-02Abstract:This paper takes ARM processor as the platform,takes LPC2136 of NXP Company as an example,and designs and implements the online and remote upgrade technology of embedded microprocessor on the basis of the principle of In-Application Progamming(IAP)technology. The technology eliminates the tedious process of opening device jumpers before upgrading,and solves the key problems such as unexpected interruption during the upgrade process,transmission error code and so on.Keywords:application programming;ARM;boot loader0 引言目前嵌入式系统应用相关技术取得了突飞猛进的发展,嵌入式应用已经深入到工业控制、通信、消费类电子、信息家电等不同领域,同时ARM处理器芯片由于其突出的低功耗、高性能、应用范围广泛等特点在嵌入式系统中得到广泛的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM片外Flash存储器IAP解决办法
0 引言
以ARM芯片为处理器核的嵌入式应用系统,以其小体积、低功耗、低成本、高性能、丰富的片内资源以及对操作系统的广泛支持,得到了人们越来越多的青睐。

在应用编程IAP (InApplicatAiONProgram)就是这样的自修改程序。

它先在RAM存储器中写人数据值,然后使PC指向该存储段,把该段作为程序段来执行。

很多ARM7芯片自带IAP处理器,应用其自带的IAP处理器可以方便地对其片内集成的Flash存储器进行在应用编程,但几乎所有的ARM 核芯片均不支持片外IAP处理,因为片外Flash存储器是用户选型的,芯片生产厂家无法先知先觉,而不同Flash存储器其编程时序也不尽相同,导致芯片生产厂家无法提供通用的IAP 代码。

那么,如何对嵌入式系统的片外Flash存储器进行在应用编程呢?这里分两种情况:一是普通代码存放在片外单独1片Flash中,IAP代码在另一片Flash中完成,此时只要依据Flash的操作时序执行IAP代码,完成擦除或写入操作即可。

这种情况虽然简单,但应用了2片Flash;而IAP代码很小,一般完全可以集成到1片中,所以这里对这种情况不予考虑。

另一种情况是1片Flash中既要存储普通代码,又要实现IAP。

针对嵌入式应用系统片外Flash存储器IAP无现成方案的问题,介绍一种基于代码重入思想的片外存储器IAP解决方案。

结合LPC2210及SST39VFl60芯片,简介两款芯片特点,给出应用连接框图;分析IAP实现要点,并给出IAP的实现代码。

下面以Phnips公司的LPC2210 和 Silicon storageTechnology 公司的SST39VFl60为例,详细讨论这种情况IAP的解决方案。

1 硬件结构
1.1 LPC2210介绍
Philips公司的LPC22lO是一款基于支持实时仿真和嵌入式跟踪的16/32位ARM7TDMI-SCPU的微控制器。

芯片采用144脚封装,有16 KB片内静态RAM,开放外部总线;通过外部存储器接口可将外部存储器配置成4组,每组的容量高达16 Mb,数据宽度8/16/32位均可;具有多个32位定时器、8路lO位PWM输出、多个串行接口(包括2个16C550工业标准UART、高速I2C接口和2个sPI接口)以及9个外部中断、多达76个可承受5 V电压的通用I/O口,同时内嵌实时时钟和看门狗,片内外设功能丰富强大;片内晶振频率范围l~30 MHz,通过片内PLL可实现最大为60 MHz的CPU工作频率,具有2种低功耗模式&mdash;&mdash;空闲和掉电,通过外部中断将处理器从掉电模式中唤醒,并可通过个别使能/禁止外部功能来优化功耗。

以上特性,使其特别适用于工业控制、医疗系统、访问控制和POS 机,同时也非常适合于通信网关协议转换器,嵌入式软Modem,以及其他各种类型的应用。

1.2 SST39VFl60介绍
SILICON StoraLge Technology公司的SST39VFl60是一个lM&times;16b的CMOS多功能Flash器件,单电压的读和写操作,电压范围3.O~3.6 V,提供48脚TSOP和48脚TFBGA 两种封装形式。

该器件主要操作包括读、字编程、扇区/块擦除和芯片擦除操作。

擦除和字编程必须遵循一定的时序,表l列出了扇区擦除和字编程过程及时序。

擦除或编程操作过程中读取触发位DQ6将得到&ldquo;1&rdquo;和&ldquo;O&rdquo;的循环跳变;而操作结束后读DQ6,得到的是不变的固定值。

这是器件提供的写操作状态检测软件方法。

1.3 硬件连接
SST39VF160作为系统的程序存储器,以LPC2210的CSO作为Flash的片选信号,处理器配置Boot引脚为16位数据总线宽度后,上电可直接执行SST39VFl60中代码。

此Flash芯片为16位数据宽度,无字节控制总线,所以应用中不使用LPC2210的BLS引脚。

系统结构示意图。

2 软件实现
2.1 IAP实现要点分析
在嵌入式应用系统中,通常要求记录一些现场的传感、交互输入数据,通常把数据记录在Flash存储器中,以便下次上电能获取以前的数据。

如果系统程序和数据分开存储,那么只要对存放数据的Flash器件进行编程即可。

然而大多数嵌入式系统,程序和需保存的数据都共存于同一Flash存储器中,那么是否也如前所述,可对Flash存储器直接编程呢?理论和实践都表明不可以。

先从理论上计算:LPC22lO允许的芯片核工作频率(CCLK)范围是10~60 MHz,存储器读访问长度由存储器组配置寄存器BCFG中读访问的长度域控制WSTl控制,其最大可用长度为35个CCLK,而SST39VFl60的扇区擦除典型时间为18 ms。

下面是计算算式:
TRDmax=RDLenmax/CCLKmin=35/10&times;10一6=3.5 &mu;s.TD=18 ms》3.5&mu;s其中:TRDmax&mdash;最大读访问时间;RDLenmix&mdash;&mdash;最大读访问可用长度;CCLKmin&mdash;&mdash;最小核工作时钟频率;Tp&mdash;&mdash;扇区擦除典型时间。

算式得出扇区擦除典型时间远大于最大读访问时间。

这样一来,如果再给某Flash写数据,同时于其中预取指,那么因F1ash在执行命令期间,对其他操作不响应,预取出的必定是其数据引脚上的不确定数据,预取指失败。

实践也表明,如果在程序执行过程中,对同一Flash进行扇区擦除,必定引起预取指中断。

为了解决在同一Flash芯片存放程序并IAP这一问题,引进代码重映射的思想。

所谓重映射就是代码先自复制到指定存储区,然后跳转到指定区的起点开始执行。

这里,lAP程序先自复制到LPC2210片内SRAM中,然后跳转到SRAM执行lAP代码。

前面说过,ARM7为冯&middot;诺依曼结构,这就为IAP程序重映射提供了可能。

编写可重映射代码的关键是要解决程序中相对偏移的问题,ARM7指令系列中涉及相对偏移的指令主要有LDR/STR以及跳转指令。

这里的解决方案是:凡涉及偏移值的指令通通采用基址变址寻址方式,以PC寄存器作基址寄存器,以立即数为变址,这样当程序块整块移动时,要加载的数据或跳转的地址与当前Pc值的偏移值固定,解决了相对偏移问题。

2.2 扇区擦除
事先编程在Flash中的程序先自复制到SRAM指定的位置,然后,赋PC为SRAM中扇区编程代码段的起点ERASEPART。

程序于SRAM中的ERASEPART起点开始执行,按照SST39VF160扇区擦除的时序要求开始擦除。

按照ARM公司提出的ATPCS规定,C语言程序调用汇编程序时,寄存器R0一R3传递参数,返回值由寄存器RO传递原则,扇区擦除程序的一个参数,要擦除的扇区号,由RO传递;返回参数置于R0,扇区擦除成功返回&ldquo;1&rdquo;,否则返回&ldquo;0&rdquo;。

2.3 字编程
程序于SRAM中的PROGRAMPART起点开始执行,按照SST39VFl60字编程的时序要求开始编程。

入口参数有三个,依次为编程地址、数据起始地址、编程数据长度。

字编程成功返回&ldquo;1&rdquo;,否则返回&ldquo;0&rdquo;。

3 结论
文中提出的IAP代码重入到SR&mdash;kM执行的方法,有效地解决了应用无片内程序存储器的32位ARM处理器的嵌入式系统IAP难题,有很大的应用价值。

相关文档
最新文档