概述
高速微控制器系列的一些成员集成了内部EPROM或ROM用于程序存储。但是,某些应用需要程序存储器的系统内重新编程。使用带有内部程序存储器的Maxim高速微控制器重新加载闪存或NV RAM等外部非易失性存储器,可以轻松实现这种系统。与使用具有内部NV RAM程序存储器或昂贵的引导块闪存的设备相比,使用内部程序存储器作为引导加载程序可以获得的低成本解决方案。
最常见的引导加载程序配置包含两个元素:使用引导加载程序或引导加载程序编程的微控制器,以及用于保存用户应用软件的外部存储设备(如NV RAM或闪存)。当系统在上电或外部复位后复位时,它将开始从微控制器的内部程序存储器中执行指令。微控制器内的引导加载程序代码首先检查“加载器/无加载程序”;激励,例如特定端口引脚上的逻辑低电平、串行端口字符等。这允许系统决定是否应加载新的用户程序,或者是否应使用现有用户程序开始执行。如果未收到激励,表示不需要负载,则器件将通过ROMSIZE功能禁用内部程序存储器,并从外部存储器开始执行。如果存在刺激,器件将执行引导加载程序例程并开始重新编程外部存储器。
本应用笔记将举例说明设计人员如何使用外部闪存或NV RAM为基于高速微控制器的设计增加系统内可重编程性。介绍了一般的硬件和软件设计指南。支持本文所述技术的软件示例可通过Maxim的匿名FTP站点(互联网)或BBS以电子格式提供。
调用引导加载程序
有几种方法可以调用加载程序。最简单的方法是专用于一个通用I/O引脚,作为高速微控制器内部复位例程的一部分进行采样。本应用笔记中的示例使用P1.7和INT5,因为它对现有8051代码设计的干扰最小。复位后,器件将开始从内部 EPROM 执行代码。内部程序将对引脚执行快速测试,以确定是否应调用加载程序。由于此引脚在重置后默认为高状态,因此建议将此引脚上的低条件用作调用加载器的信号。使用中断引脚还允许器件在通过中断服务例程重置以外的时间调用加载程序。用于断位逻辑低电平的方法可以像专用开关一样简单,也可以通过RS-232电缆从主机进行更复杂的连接,在连接时将引脚拉低。
另一种方法是使用串行端口调用引导加载程序。重置后,设备可以连续轮询串行端口以查找字符。如果在指定的时间段内未收到字符,程序将退出加载程序并开始从外部存储器执行。这种方法的优点是不需要通用端口引脚。它的主要缺点是,设备在运行用户应用程序之前每次重置时都会遇到固定的延迟。
退出引导加载程序
将新软件加载到外部存储器后,或者如果不需要加载程序操作,系统将需要退出加载程序并开始从外部程序存储器执行。ROMSIZE 功能提供了一种快速方便的方法。ROMSIZE 寄存器允许软件“关闭”;内部程序存储器并强制所有程序在外部执行,类似于将/EA引脚拉低。然后,软件应在 0000h 对复位矢量执行 LJMP。
必须从内部存储器存储器范围之外的外部存储器位置修改ROMSIZE寄存器。例如,DS87C520包含16kB的EPROM。修改ROMsize寄存器的指令应位于外部存储器中4000h或更大的地址。如果不这样做,如果内存映射在指令中间切换,则可能导致代码执行失败。
最简单的方法是在内存的高端映射一个短例程(~16 字节)。如果使用 64kB 的内存空间,则可能是 FFF0h。这提供了干扰用户应用程序代码的最小机会。完成加载程序例程后,软件将跳转到外部存储器(本例中位置FFF0h),修改ROMsize寄存器以禁用内部程序存储器,然后跳转到位置0000h。这将模拟用户应用程序代码的重置。在修改ROMSIZE寄存器之后,必须包括NOP或其他虚拟指令,以允许存储器选择电路的一个机器周期来禁用内部程序存储器。建议使用以下例程:
CSEG at 0FFF0h MOV TA, #0AAh MOV TA, #55h MOV ROMSIZE, #0h NOP LJMP 0000h
引导加载程序软件
引导加载程序可以包含许多不同的功能,这些功能因使用的特定存储设备而异。通常,这些应包括加载、验证和 CRC 命令。闪存设备将需要芯片擦除命令,NV RAM可能会发现填充命令很有用。
图 1 说明了引导加载程序的基本操作。软件首先检查启动加载器的信号。如果存在,设备将执行用户请求的引导加载程序功能。完成后,或者如果未检测到加载器激励,器件将跳转到位置FFF0h,修改ROMsize寄存器以禁用内部EPROM,然后跳回到重新启动矢量。这模拟设备在重置后在地址 0000h 开始执行。
图1.引导加载程序流程图。
Maxim提供高速微控制器系列的引导加载程序示例。本应用笔记中引用的所有软件均可下载(ZIP)。程序集语言源文件HSM_LOAD。ASM 包含可选的包含文件,以支持多种不同的内存类型,包括闪存和 NV RAM。以下是支持的一些命令的列表:
将英特尔十六进制文件加载到内存®
根据内存验证十六进制文件
擦除芯片(仅限闪存)
用数据填充内存范围(仅限 NV RAM)
计算CRC
修改和读取端口值
转储英特尔十六进制格式的内存内容
出口装载机
硬件
图 2 说明了在引导加载程序设计中使用 29F010 5.0V 闪存。尽管此配置旨在与文件HSM_LOAD中显示的软件兼容。ASM,它可以很容易地适应其他闪存或NV RAM设备。某些闪存设备(如 28Fxxx 系列)需要外部 12V V聚丙烯用于编程。包含这些器件的设计需要包括电压源。
图2.引导加载程序硬件。
尽管 29F010 是 128kB 设备,但此示例仅通过将 A64 地址线设置为低电平来使用 16kB。这不会影响闪存命令功能,因为大多数设备在其编程算法期间设计为忽略A16。要使用 A16,请将其连接到未使用的通用端口引脚。请注意,端口引脚将默认为逻辑高电平状态,选择闪存的上限 64kB。可以在闪存器件的端口引脚和A16之间使用逆变器,使其在上电时选择较低的64kB。这将简化代码放置。“P”;引导加载程序的命令可用于在加载过程中操纵闪存的 A16 引脚,以加载器件的上部和下部 64kB 组。有关组切换的更多信息,请参见应用笔记81:“高速微控制器系列的存储器扩展”。
DS87C520和DS87C530器件版本A4及更早版本包含与/PSEN信号有关的勘误表,需要对上述硬件进行细微更改。在这些器件上,无论器件是使用内部还是外部程序存储器工作,/PSEN信号都会切换。这将在写入闪存设备期间导致冲突。图 3 说明了一种临时解决方法。此配置限制在从外部存储器开始操作之前必须删除 P1.7 上的负载信号。这是一个小问题,因为大多数应用程序将在单独的步骤中对闪存进行编程,重置设备,然后开始操作。此错误将在设备的后续修订版中得到纠正。
图3.DS87C520/DS87C530 修订版 A4 的引导加载程序硬件。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !