嵌入式开发ARM嵌入式系统的ISP设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式开发ARM嵌入式系统的ISP设计.doc

嵌入式开发ARM嵌入式系统的ISP设计 嵌入式开发 ARM 嵌入式系统的 ISP 设计 前言 91 硬件连接 2 Flash 烧录原理 2 1. 1 存储器分配 2 . 2 ISP 执行的步骤 结 语 ???? 应用程序的固化是嵌入式产品开发和生产过程中一个重要环节。基于 arm 的嵌入式系统常用的程序固化方法是,用仿真器通过 JTAG 口将程序烧录到 Flash 里,在产品的开发阶段,使用仿真器几乎是必然的;然而到了产品的生产阶段,进行应用程序烧录或升级操作的往往是生产线上的工人,他们不易掌握仿真器的使用方法,而且在生产阶段也需要把 JTAG 调试口封住以防软件被窥视。笔者在使用意法半导体的 STR730 开发产品的过程中,设计了一种通过串口进行 ISP(In System Programming ,在系统编程 ) 的方案。该方案成本低,生产线使用起来也很方便,而且即使升级过程中发生掉电之类的意外也不会影响下一次升级,安全而可靠。 前言 ??? ISP 方案的硬件连接如图 1 所示。 RS232 转接板用来将 RS232 电平转换为 TTL 电平,并通过 ISP_EN 引脚给 ARM 开发板提供信号,让其进入 ISP 状态。 PC 机上运行用 VC 语言编写的 ISP . exe ,该程序把需要烧录到 F8#0046991ash 里的. bin 文件加密后发送到 arm 开发板,同时把烧录的进度提示显示给用户。图 1 中的阴影部分具有固定的程序。 1 硬件连接 嵌入式开发 ARM 嵌入式系统 2 . 1 存储器分配 ??? STR730 是意法半导体生产的基于 arm7TDMI 的微控制器芯片,内置 16 KB RAM(0xa0000000 ~ Oxa0003fff) 和 256 KB Flash(O~ Ox8003ffff) 。内置 256 KB Flash 的分配情况如图 2 所示。按照图 2 中存储器的分配编写 Scatter 文件,在生成可执行文件时链接器会根据 Scatter 文件的内容把相关代码段定位到特定的地址上。该例中,程序从 Flash 启动,且没有使用存储器重映射,因此中断向量必须定位到 Flash 的起始位置。 2 Flash 烧录原理 嵌入式开发 ARM 嵌入式系统 ??? 扇区 O 的内容需要事先通过 JTAG 口烧入,此后就可以利用扇区 O 中的烧录程序 Programrher . o 通过串口进行 ISP 。在整个 ISP 过程中扇区 0 的内容是保持不变的,这样就可以防止 ISP 过程中出现掉电之类的意外,导致初始化代码 Startup 或烧录程序 Programmer 受到损坏而无法再一次进行 ISP 。 ??? 无论对嵌入式产品添加新功能还是修改原有的软件 BUG ,涉及的都只是用户应用程序的改动,初始化代码 Startup . s 是无需改动的,所以扇区 O 的内容在 ISP 过程中可否保持不变,关键是能否使首次编译生成的 Vector . 0 始终与以后多次编译的 App . o 相匹配。 ??? 需要特别指出的是,当用户应用程序发生改变时,实际的中断服务函数 ( 一般是 C 语言函数 ) 很可能发生了改变,或者是实际的中断服务函数的入口地址发生了改变,怎么通过固定不变的中断向量 Vector . o 找到变化的中断服务函数的入口呢 ? 只要这个问题解决了,就可以使首次编译生成的 Vector . o 始终和以后多次编译的 App . o 相匹配,这是该方案可行性的关键所在。为解决这个问题,笔者在 Flash 的固定位置 (0~ 0x800020ff) 做了一个中断映射表,实际上里面存放的是一条条跳转指令。由于中断映射表 INTMap . s 和用户应用程序 App . c 是一同编译、链接的,里面的跳转指令当然可以准确找到实际的中断服务程序入口; 而位于扇区 O 的中断向量 Vector . s 虽然不和用户应用程序一起编译,但中断向量里的跳转指令是绝对跳转到固定的中断映射表区域。这样通过 2 次跳转就可以准确找到中断服务程序的入口。 嵌入式开发 ARM 嵌入式系统 可以通过图 3 看出快中断的处理流程 ( 其他的中断处理流程类似 ??? 笔者把起到烧录 Flash 作用的程序单独作为一个工程编译、链接,生成. bin 文件;然后把. bin 文件转化成一个 unsigned char 型的数组,并把该数组放在一个单独的文件 Programmet . c 中;最后利用 Scatter 文件把 Programmer . o 定位在固定的地址空间 (0~ Ox80001fff ,如图 2 所示 ) 。这样一来

文档评论(0)

zhangningclb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档