摘要:本文介绍一种通过串口远 程更新ARM 程序的设计思想,并 以美国ATMEL 公司的ARM7 芯片 AT91SAM7S512 为例,给出了其设 计要点及设计方法,并对可靠性 进行了设计。 【关键词】AT91SAM7S512 FLASH bootloader 远程更新 1 引言 在实际工程应用中,ARM 程序通常采用 JTAG 口进行更新,在ARM 电路板单板阶段 通过JTAG 口调试也是ARM 开发的一种理想 选择。但当ARM 电路板装入整机投入真正的 使用环境后,当用户对ARM 软件功能或性能 提出新的要求时,ARM 软件的更新维护如果 仍然通过JTAG 调试口,将较大的提高维护 成本。本文提出一种通过RS232 串口远程实 现ARM 软件的更新机制,通过在ARM 内部 FLASH 中植入一段bootloadr 来更新应用程序 和引导应用程序的运行。现以AT91SAM7S512 为例,对此更新机制的设计思想、设计方法及 可靠性设计进行介绍。 2 设计思想 整个系统由三部分组成,分别为ARM 模 块,串口模块和上位机模块。通过串口建立上 位机和ARM 之间的远程通信,系统框图如图 1: 设计中将ARM 芯片内部FLASH 分为两 块存储区域如图2,一部分存放bootloader 镜 像文件,一部分存放应用程序的镜像文件。 2.1 bootloader bootloader 是ARM 芯片上电或复位后最 先执行的程序代码,利用此段代码可建立与上 位机之间的交互,实现应用程序的存储,并将 远程更新ARM 程序的设计与实现 文/周宁刚 本文介绍一种通过串口远 程更新ARM 程序的设计思想,并 以美国ATMEL 公司的ARM7 芯片 AT91SAM7S512 为例,给出了其设 计要点及设计方法,并对可靠性 进行了设计。 摘 要 应用程序为ARM 实际工作时的目标程 序。 设计的工作流程 为:先将bootloader 镜 像文件利用JTAG 口烧 写到ARM内部FLASH 的第一部分。芯片上电 或复位后,ARM 总会 自动进入bootloader, 通过bootloader 判断是 否有上位机发送的程序 更新请求, 如果有程 序更新请求, 则上位 机将应用程序的镜像 文件发送至ARM,并 利用bootloader 将应用 程序存储至ARM 芯片 内部FLASH 的第二部 分;如果没有更新程序 请求,则bootloader 将 ARM 操作地址跳转到 ARM 内部FLASH 的 第二部分,运行应用程 序。程序设计的流程框 图如图3。 3 设计方法 3.1 bootloader设计 bootloader 的设计 主要分为三部分程序设 计模块:ARM 和上位 机交互模块,存储应用 程序模块和加载应用程 序模块。 3.1.1 ARM 和上位机交 互模块 ARM 和上位机之 ARM 操作地址跳转到应用程序入口。 2.2 应用程序 间的通过RS232 串口通信,主要完成的功能为: 判断是否需要更新ARM 的应用程序;接收上位机发送的应用程序镜像文件。 设计流程:ARM 上电后,bootloader 在 一定的时间内判断是否需要更新应用程序,如 果需要更新则bootloader 和上位机进行握手应 答,握手成功后上位机发送应用程序的镜像文 件发送至bootloader,发送完成后,bootloader 对应用程序镜像文件的所有字节进行校验; 如果不需要更新应用程序,则bootloader 将 ARM 的操作地址跳转到应用程序入口,运行 应用程序。 可靠性设计:ARM 和上位机交互的可靠 性主要体现在ARM 和上位机之间的数据传输 可靠,防止出现 误码、缺码现象, 因此两者必须建 立健全的通信机 制。本设计两者 之间的通信方式 采用应答方式, 即其中一个发出 命令后,另一个 收到命令后必须 给出反馈信息后, 才能进行下一步 操作。除此之外 两者之间传输的 数据应包裹在一 个完整帧内,格 式为: 帧头+ 数 据+ 帧尾+ 校验 和,数据传输过 程中在任何一点 出现错误,应立 即给出错误指示, 中止进行下一步 操作。 3.1.2 存储应用程 序模块 AT 9 1 SAM 7S512 芯片内部 FLASH 总大小 为512Kbytes, 共有两个单 元, 每个单元 为256Kbytes。 第一个存储单 元的地址范围 为: 0 x 1 0 0 0 0 0 - 0 x 1 3 F F F F , 第二个存储单 元的地址范围 为:0x140000 - 0x17FFFF。每个 单元均有独立的 FLASH 控制器, EFC0 和EFC1。利用对FLASH 控制器的操 作,可进行ARM 内部FLASH 的读,写及擦 除操作。现将应用程序的镜像文件存储在第二 个FLASH 单元中,起始地址为0x140000 。 EFC1 的基地址为0xFFFFFF00,EFC1 的寄存 器见表1。 设计流程:bootloader 接收到应用程序镜 像文件后,将数据以一个PAGE(256 字节) 的大小为一组依次写入AT91SAM7S512 内部 FLASH,对AT91SAM7S512 一个PAGE 写操 作的流程如图5 所示。 可靠性设计:存储应用程序的可靠性主要体现在数据应完全正确写入AT91SAM7S512 内部FLASH,因此设计中在对每个PAGE 进 行写操作前和写操作后,均需通过MC_FSR 寄存器检查内部FLASH 是否空闲,除此之外 在每个PAGE 写完成后可增加适当的延时,确 保数据完全写入。 3.1.3 加载应用程序模块 加载应用程序模块的主要功能为将ARM 的操作地址跳转到应用程序入口。 设计流程:ARM 上电或复位后, 在一 定时间内没有接收到更新应用程序请求后, bootloader 将ARM 的操作地址跳转到应用程 序的入口地址0x140000,运行应用程序。将 操作地址跳转到0X140000 地址处,使用的汇 编指令为:ldr pc=0x140000。 可靠性设计:加载应用程序模块的可靠 性设计主要体现在bootloader 能够准确、快速 将操作地址跳转到0X140000 处,并且应用程 序能够可靠运行,不受bootloader 的干扰。因 此在bootloader 设计中应禁止软件看门狗功能, 防止应用程序还未完全启动而系统自动复位; 其次应严格设定bootloader 判断是否有更新应 用程序请求的时间,最好控制在10ms 内。 3.2 应用程序设计 在应用程序设计中,为使bootloader 成 功加载到应用程序,应用程序在使用编译器 生成镜像文件时,必须将编译器的ROM 地 址设置为0X140000。本设计采用的编译器为 ADS1.2,编译器的ROM 设置如图6。 为保证应用程序的高速、可靠运行,在 应用程序设计中,应将应用程序从FLASH 中 完全复制到SDRAM 中,本部分代码需在应用 程序启动代码(.S 文件)中完成。 4 结论 本文浅谈了通过RS232 串口更新ARM 芯 片AT91SAM7S512 程序的基本设计思想及设 计方法。通过对一些关键点进行可靠性设计, 使设计具有较高的实用性,能够直接应用到工 程中。本设计思想具有一定的扩展性,可以应 用到多种微处理器中,如单片机、ARM 等。 其次也可应用于多种接口中,如RS422 接口, CAN 接口、以太网接口等。 参考文献 [1] 杨宗德. 嵌入式ARM 系统原理与实例开发 [M]. 北京: 北京大学出版社,2007. [2] 杜春雷.ARM 体系结构与编程[M]. 北京: 清华大学出版社,2003. [3] 周立功,张华. 深入浅出ARM7[M]. 北京: 北京航空航天大学出版社,2006. 作者单位 北京明航科技发展有限公司 北京市 100096 |