微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于IAP和Keil MDK的远程升级设计

基于IAP和Keil MDK的远程升级设计

时间:12-19 来源:互联网 点击:

; *************************************************************

LR_IROM1 0x00000400 0x00001C00 { ; load region size_region

ER_IROM1 0x00000400 0x00001C00 { ; load address = execution address

*.o (RESET, +First)

*(InRoot$$Sections)

.ANY (+RO)

}

RW_IRAM1 0x40000040 0x00003FA0 { ; RW data

.ANY (+RW +ZI)

}

}

代码3-8 分散加载代码

这段代码显示出Bootloader程序从0x00000400处开始执行,最多占用0x1C00字节的Flash空间。另外,该程序的RAM从0x40000040开始,长度为0x3FA0个字节。这样RAM的低64字节保留给中断向量映射使用,高32字节保留给IAP编程使用。

3.3.4 中断向量的重映射

Bootloader的起始地址位于0x00000400,中断向量也从这一地址开始存储。但默认情况下ARM发生异常时,会跳转到0x00000000处的64字节中断向量区域执行相应操作,所以为了使Bootloader能相应中断,必须将位于0x00000400开始的64字节中断向量表重映射到RAM的低区。LPC2114使用向寄存器MEMMAP写入0x02来完成这一过程。

代码3-9 描述了中断向量重映射的过程。

; Copy Exception Vectors to Internal RAM ---------------------------------------

ADR R8, Vectors ; 源地址

LDR R9, =RAM_BASE ; 目标地址,这里是0x40000000

LDMIA R8!, {R0-R7} ; 装载向量表

STMIA R9!, {R0-R7} ; 存储向量表

LDMIA R8!, {R0-R7} ; 装载处理程序地址

STMIA R9!, {R0-R7} ; 存储处理程序地址

; Memory Mapping (when Interrupt Vectors are in RAM)

MEMMAP EQU 0xE01FC040 ; Memory Mapping Control

IF :DEF:REMAP

LDR R0, =MEMMAP

IF :DEF:EXTMEM_MODE

MOV R1, #3

ELIF :DEF:RAM_MODE

MOV R1, #2

ELSE

MOV R1, #1

ENDIF

STR R1, [R0]

ENDIF

代码3-9 中断向量重映射

由于Keil MDK提供的启动代码中使用条件编译指令,所以,要想正确的执行中断向量重映射,还需要在Keil MDK编译器工程设置Options for target“你的工程目标名”下的Asm标签中找到Define编辑框,在编辑框中键入“REMAP RAM_MODE”。如图3-2所示

图3-2

注意:在擦除/编程Flash的时候还应该禁止PLL、存储器加速模块。

3.4 用户程序的设计

用户程序运行在高区(扇区8~13)或者低区(扇区1~7),用于实现数据的采集、处理和上传等等,用户程序除本身功能的要求外,还需要注意:

? 使用分散加载机制,将程序入口精确定位到0x00010000(高区)或0x00008000(低区)。

? 进行中断向量重映射,映射到RAM最底处。

  

4 通讯协议与上位机软件  

4.1 Intel的hex格式

Intel hex文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。一个数据记录以一个回车和一个换行结束。

一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式.

: LL AAAA TT [DD...] CC

每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述.

:冒号 是每一条Intel HEX记录的开始

LL 是这条记录的长度域,他表示数据(dd)的字节数目.

AAAA 是地址域,他

表示数据的起始地址

TT 这个域表示这条HEX记录的类型,他有可能是下面这几种类型

00 ----数据记录

01 ----文件结束记录

02 ----扩展段地址记录

04 ----扩展线性地址记录

DD 是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以查看LL域的说明。

CC 是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母(包括校验字节)相加之后等于0x00。

一个Intel HEX文件必须有一个文件结束记录,这个记录的类型域必须是01,

一个EOF记录总是这样:

:00000001FF

00是记录中数据字节的数目

0000这个地址对于EOF记录来说无任何意义

01记录类型是01(文件结束记录标示)

4.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top