ARM嵌入式系统的ISP设计._第1页
ARM嵌入式系统的ISP设计._第2页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、YfDD有道工控 ARM 嵌入式系统的 ISP 设计 应用程序的固化是 嵌入式产品开发和生产过程中一个重要环节。基于 ARM 的嵌入式系统常用的程序固化方法是,用仿真器通过 JTAG 口将程序烧录到 Flash 里,在产品的开发阶段,使用仿真器几乎是必然的;然而到了产品的生产阶段, 进行应用程序烧录或升级操作的往往是生产线上的工人,他们不易掌握仿真器的 使用方法,而且在生产阶段也需要把 JTAG 调试口封住以防软件被窥视。笔者在 使用意法半导体的STR730 开发产品的过程中,设计了一种通过串口进行 ISP(ln System Programming在系统编程)的方案。该方案成本低,生产线使用

2、起来也很 方便,而且即使升级过程中发生掉电之类的意外也不会影响下一次升级, 安全而 可靠。 1 硬件连接 ISP 方案的硬件连接如图 1 所示 o RS232 转接板用来将 RS232 电平转换为 TTL 电平,并通过 ISP_EN 引脚给 ARM 开发板提供信号,让其进入 ISP 状态。PC 机 上运行用 VC 语言编写的 ISP. exe,该程序把需要烧录到 F1ash 里的.bin 文件 加密后发送到ARM 开发板,同时把烧录的进度提示显示给用户。图 1 中的阴影 部分具有固定的程序。 2 Flash 烧录原理 2. 1 存储器分配 STR730 是意法半导体生产的基于 ARM7TDMI

3、 的微控制器芯片,内置 16 KB RAM(OxaOOOOOOO 0 xa0003fff)和 256 KB Flash(0 x80000000- Ox8003ffff)。内置 256 KB Flash 的分配情况如图 2 所示。按照图 2 中存储器的分配编写 Scatter 文件, 在生成可执行文件时链接器会根据 Scatter 文件的内容把相关代码段定位到特定 的地址上。该例中,程序从 Flash 启动,且没有使用存储器重映射,因此中断向 量必须定图】ISP硬件连接框图 位到 Flash 的起始位置。 OT1D有道工控 扇区 O 的内容需要事先通过 JTAG 口烧入,此后就可以利用扇区 O

4、中的 烧录程序 Programmer, o 通过串口进行 ISP。在整个 ISP 过程中扇区 0 的内容是 保持不变的,这样就可以防止 ISP 过程中出现掉电之类的意外,导致初始化代码 Startup 或烧录程序 Programmer 受到损坏而无法再一次进行 ISP。 无论对嵌入式产品添加新功能还是修改原有的软件 BUG,涉及的都只是用户 应用程序的改动,初始化代码 Startup, s 是无需改动的,所以扇区 O 的内容在 ISP 过程中可否保持不变,关键是能否使首次编译生成的 Vector, 0 始终与以后多次 编译的 App, o 相匹配。 需要特别指出的是,当用户应用程序发生改变时,

5、实际的中断服务函数 (一般 是 C 语言函数)很可能发生了改变,或者是实际的中断服务函数的入口地址发生 了改变,怎么通过固定不变的中断向量 Vector, o 找到变化的中断服务函数的入 口呢?只要这个问题解决了,就可以使首次编译生成的 Vector, o 始终和以后多 次编译的 App, o 相匹配,这是该方案可行性的关键所在。为解决这个问题,笔 者在Flash 的固定位置(0 x800020000 x800020ff)做了一个中断映射表,实际上里 面存放的是一条条跳转指令。由于中断映射表 INTMap ,s 和用户应用程序 App,c 是一同编译、链接的,里面的跳转指令当然可以准确找到实际

6、的中断服务程序入 口;而位于扇区 O 的中断向量 Vector, s 虽然不和用户应用程序一起编译,但中 断向量里的跳转指令是绝对跳转到固定的中断映射表区域。 这样通过 2 次跳转就 可以准确找到中断服务程序的入口。 可以通过图 3 看出快中断的处理流程(其他的中断处理流程类似) 尿区0 (8KB) 中断向hVector tK初始化代码Siartup.o (0 x80000000-0 x80000fm 烧录程序Programmer.o (0 x000l000-0 x000im) 卩 , 扇区1 8KB) 中断映射INTMap.o (0 x50002800020 ff) 用户屁用程序App o

7、(0)i80002100-0 x80003ffin 1廟区2扇区7 (共240KB) 用户熾用程序App o (0 x80004 0OCKO?tg0O3ffiD 0 x80000000 0 x80001m oxaoo020(x) OxEOOOSOT 0 x80004000 0 xii003fflT 图2 STR730内章Flash分配情况 UP有道工控 图3 快中断处理流程 2. 2 ISP 执行的步骤 笔者把起到烧录 Flash 作用的程序单独作为一个工程编译、链接,生成. bin 文件;然后把.bin 文件转化成一个 unsigned char 型的数组,并把该数组放在一 个单独的文件 P

8、rogrammet. c 中;最后利用 Scatter 文件把 Programmer, o 定位 在固定的地址空间(0 x800010000 x80001fff,如图 2 所示)。这样一来,就可以 编写汇编程序,把烧录程序 Pro grammer. o 拷贝到 RAM 中,并让 PC 指针跳 转到 RAM 中执行烧录。由于 STR730 没有外部 Flash,要烧录 Flash 程序必须在 RAM 中运行,所以拷贝 Programmer, o 到 RAM 中是必需的。以下代码摘取自 Startup, s。 CMP r1,#1 BEQ PragramProcess :判断是否满足 ISP 条件(

9、参见图 1 的 flSP.EN),如满足跳过去执行 1SP 代码 B _tnain吓不满足心 P条件,正常执行用户应用程序 斗拷贝烧录程序 Programmer 到 RAM 区并执行 PrograniProcess MOV rOT #128 辛总共拷贝 4 K%每次拷贝 4X8 字节, ;需要拷贝次 LDR rl f =0 x80001000 tProgrammer 的起始地址 LDR r2, =0 xa0000000 ;KAM 的起始地址 TfCD有道工控 www.OWOpfu.uorn rl!、r3-rlO r2! , i3rlO 需要说明的是: 擦除 Flash 并不是完全擦除,而是擦除

10、扇区 0 之外的其他扇区; 数据缓冲区有限,每次只接收指定大小的数据,这样接收和烧录就可以并 行进行,提高了 ISP 的速度; 为了提高软件的安全性,原始的.bin 文件是经过加密的,在烧录前需要将 原始Loop LDMIA STMIA SUB rO, rO, #1 CMP rO,井 0 BNE Loop LDR rO , = ,RAM 的起始地址 ADD BX rO, rO, # 1 rO ;拷贝完毕,跳到 RAM 的起始地址运行烧录程 卡序Prograninier 并切换到 Thumb 状态(为了节省代码 ;空间烧录程序 Programmer 用的是 Thumb 指令集) 烧录程序 Programmet 的软件流程如图 4 所示 图 4 烧录程序的软件流程 数据解密。本文阐述的这种通过串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论