一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

使用高速微控制器作为引导加载程序

来源:analog 发布时间:2023-11-13

摘要: 使用Maxim高速微控制器作为引导加载程序。本应用笔记重点介绍DS87C520和DS87C530与29F010闪存器件的组合。

一些高速微控制器家族的成员将内部EPROM或ROM用于程序存储。然而,有些应用程序需要程序存储器的系统内可重编程性。这样的系统可以很容易地实现使用Maxim高速微控制器与内部程序存储器重新加载外部非易失性存储器,如闪存或NV RAM。使用内部程序存储器作为引导加载程序,比使用带有内部NV RAM程序存储器或昂贵的引导块闪存的设备可以获得更低成本的解决方案。

最常见的引导加载程序配置包含两个元素:一个用引导加载程序编程的微控制器,或引导加载程序,以及一个外部存储设备,如NV RAM或闪存,用于保存用户应用程序软件。当系统在上电或外部复位后复位时,它将开始执行微控制器内部程序存储器中的指令。微控制器内部的引导加载程序代码首先检查“加载程序/无加载程序”;刺激,如特定端口引脚上的逻辑低电平,串行端口字符等。这允许系统决定是否应该加载一个新的用户程序,或者是否应该使用现有的用户程序开始执行。如果没有收到刺激,表明不需要负载,设备将通过ROMSIZE功能禁用内部程序内存,并开始从外部内存执行。如果刺激存在,设备将执行引导加载程序并开始对外部存储器进行重新编程。

本应用笔记将提供设计人员如何使用外部闪存或NV RAM为基于高速微控制器的设计增加系统内可编程性的示例。给出了一般的硬件和软件设计准则。支持本文所述技术的软件示例可以通过我们的匿名FTP站点(Internet)或BBS以电子格式从Maxim获得。

调用引导加载程序

有几种方法可以调用加载器。最简单的方法是将通用I/O引脚作为高速微控制器内部复位例程的一部分进行采样。本应用笔记中的示例使用P1.7, INT5,因为它最不可能干扰现有的8051代码设计。复位后,设备将开始执行来自内部EPROM的代码。内部程序将对引脚执行快速测试,以确定是否应该调用加载程序。由于复位后该引脚默认为高状态,因此建议使用该引脚上的低条件作为调用加载程序的信号。使用中断引脚也允许设备调用加载程序,而不是通过中断服务程序重置。用于断言逻辑低的方法可以像专用开关一样简单,或者通过主机的RS-232电缆进行更复杂的连接,在连接时将引脚拉低。

另一种方法是使用串行端口来调用引导加载程序。复位后,设备可以连续轮询串行端口的字符。如果在指定的时间内没有接收到字符,程序将退出加载程序并从外部存储器开始执行。这种方法的优点是不需要通用端口引脚。它的主要缺点是每次在运行用户应用程序之前重置设备时都会经历固定的延迟。

退出引导加载程序

在将新软件保存到外部存储器之后,或者如果不需要加载程序操作,系统将需要退出加载程序并开始从外部程序存储器执行。ROMSIZE特性提供了一种快速方便的方法来完成此操作。ROMSIZE寄存器允许软件“关闭”;并强制所有程序在外部执行,类似于将active-low的EA引脚拉低。然后,软件应该在0000h对复位向量执行LJMP。

必须从内部存储器的内存范围之外的外部存储器位置修改ROMSIZE寄存器。例如,DS87C520包含16kB的EPROM。修改ROMSIZE寄存器的指令应该位于4000h或更大地址的外部存储器中。如果在指令的中间切换内存映射,不这样做可能会导致代码执行失败。

最简单的方法是在内存的高端映射一个短例程(~16字节)。如果使用64kB内存空间,则可能是FFF0h。这提供了干扰用户应用程序代码的最小可能性。加载程序完成后,软件将跳转到外部内存(在本例中为位置FFF0h),修改ROMSIZE寄存器以禁用内部程序内存,然后跳转到位置0000h。这模拟了用户应用程序代码的重置。在修改ROMSIZE寄存器之后包括一个NOP或其他虚拟指令是很重要的,以允许内存选择电路在一个机器周期内禁用内部程序内存。建议使用以下例程:

CSEG在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包含可选的include文件来支持几种不同的内存类型,包括闪存和NV RAM。以下是支持的一些命令的列表:

  • 加载Intel 十六进制文件到内存

  • 根据内存验证十六进制文件

  • 擦除芯片(仅限闪存)

  • 用数据填充内存范围(仅限NV RAM)

  • 计算CRC

  • 修改和读取端口值

  • 以Intel十六进制格式转储内存内容

  • 出口装载机

硬件

图2演示了使用29F010 5.0 v闪存作为引导加载程序设计的一部分。尽管该配置被设计为与文件HSM_LOAD中提供的软件兼容。ASM,它可以很容易地适应其他闪存或NV RAM设备。一些闪存设备,如28Fxxx系列需要一个外部12V V(PP)进行编程。包含这些器件的设计将需要包括电压源。


图2 引导装载程序硬件

虽然29F010是一个128kB的设备,但本例通过将A16地址线设置为低,只使用64kB。这不会影响闪存命令功能,因为大多数设备在其编程算法中被设计为忽略A16。要使用A16,请将其连接到未使用的通用端口引脚。请注意,端口引脚将默认为逻辑高状态,选择闪存的上部64kB。可以在闪存设备的端口引脚和A16之间使用逆变器,使其在上电时选择较低的64kB。这将简化代码放置。“P”;在漫长的过程中,可以使用引导加载程序的命令来操纵闪存的A16引脚,以加载设备的上、下64kB银行。有关银行转换的更多信息,请参阅申请说明81“。”

修订A4设备附录

DS87C520和DS87C530设备A4版和更早版本包含了与低激活PSEN信号相关的勘误表,需要对上述硬件进行轻微更改。在这些设备上,无论设备是从内部还是外部程序存储器操作,active-low PSEN信号都会切换。这将导致在写入闪存设备时发生冲突。图3展示了一个临时的解决方案。这个配置设置了一个限制,即在从外部存储器开始操作之前必须删除P1.7上的负载信号。这是一个小问题,因为大多数应用程序将在单独的步骤中对闪存进行编程,重置设备,然后开始操作。这一勘误将在以后的设备修订中予以更正。


图3 引导程序硬件DS87C520/DS87C530修订A4



声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: