0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用高速微控制器作为自举加载程序

星星科技指导员 来源:ADI 作者:ADI 2023-03-01 13:57 次阅读

概述

高速微控制器系列的一些成员集成了内部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 开始执行。

pYYBAGP-6UqAVx_kAAAlAHJSTeU696.gif

图1.引导加载程序流程图。

Maxim提供高速微控制器系列的引导加载程序示例。本应用笔记中引用的所有软件均可下载(ZIP)。程序集语言源文件HSM_LOAD。ASM 包含可选的包含文件,以支持多种不同的内存类型,包括闪存和 NV RAM。以下是支持的一些命令的列表:

英特尔十六进制文件加载到内存®

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

擦除芯片(仅限闪存)

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

计算CRC

修改和读取端口值

转储英特尔十六进制格式的内存内容

出口装载机

硬件

图 2 说明了在引导加载程序设计中使用 29F010 5.0V 闪存。尽管此配置旨在与文件HSM_LOAD中显示的软件兼容。ASM,它可以很容易地适应其他闪存或NV RAM设备。某些闪存设备(如 28Fxxx 系列)需要外部 12V V聚丙烯用于编程。包含这些器件的设计需要包括电压源。

poYBAGP-6UuAXXXgAAAWJHj5iTo754.gif

图2.引导加载程序硬件。

尽管 29F010 是 128kB 设备,但此示例仅通过将 A64 地址线设置为低电平来使用 16kB。这不会影响闪存命令功能,因为大多数设备在其编程算法期间设计为忽略A16。要使用 A16,请将其连接到未使用的通用端口引脚。请注意,端口引脚将默认为逻辑高电平状态,选择闪存的上限 64kB。可以在闪存器件的端口引脚和A16之间使用逆变器,使其在上电时选择较低的64kB。这将简化代码放置。“P”;引导加载程序的命令可用于在加载过程中操纵闪存的 A16 引脚,以加载器件的上部和下部 64kB 组。有关组切换的更多信息,请参见应用笔记81:“高速微控制器系列的存储器扩展”。

DS87C520和DS87C530器件版本A4及更早版本包含与/PSEN信号有关的勘误表,需要对上述硬件进行细微更改。在这些器件上,无论器件是使用内部还是外部程序存储器工作,/PSEN信号都会切换。这将在写入闪存设备期间导致冲突。图 3 说明了一种临时解决方法。此配置限制在从外部存储器开始操作之前必须删除 P1.7 上的负载信号。这是一个小问题,因为大多数应用程序将在单独的步骤中对闪存进行编程,重置设备,然后开始操作。此错误将在设备的后续修订版中得到纠正。

pYYBAGP-6UyAEOvNAAAZ-tzUp-g994.gif

图3.DS87C520/DS87C530 修订版 A4 的引导加载程序硬件。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6813

    浏览量

    147672
  • 存储器
    +关注

    关注

    38

    文章

    7154

    浏览量

    162022
  • EPROM
    +关注

    关注

    3

    文章

    119

    浏览量

    54129
收藏 人收藏

    评论

    相关推荐

    电梯的基础原理:微控制器

    微控制器
    jf_10480160
    发布于 :2022年12月14日 07:20:15

    什么是微控制器

    就执行自动波特率功能,并与主机的波特率同步。如图1所示是在系统编程的物理连接.简单的引导加载程序接口允许使用几种方法来实现PC机与目标微控制  间的通信。最简单的方法是使用Dalla
    发表于 11-14 14:30

    利用高速微控制器实现引导装载

    本应用指南为设计者提供了一个设计实例,阐述了如何利用外部Flash或 NVRAM为基于高速微控制器的设计添加系统内重编程性。
    发表于 09-23 10:49

    如何在I2C上从外部微控制器运行引导加载程序

    编程部分。我还没有找到任何关于如何使用外部微控制器作为引导加载程序的文档。我只能在HSSP编程接口上找到文档,如果它坏了,可能会擦除引导加载
    发表于 07-12 09:09

    【应用笔记】CW32 自举程序中使用的 ISP 协议

    CW32 自举程序中使用的 ISP 协议CW32 微控制器片上 FLASH 存储有一部分区域用于存储 BootLoader 启动程序,在芯
    发表于 06-06 13:26

    如何计算微控制器加载数据的速度?

    我如何计算微控制器的速度,它可以使用 SDIO 1 位和 SPI 加载数据的速度是多少?我可以使用 SPI 将数据加载到存储卡中吗?如果是,我是否必须使用 FATFS 库来加载?我有使
    发表于 12-28 13:12

    HCS12微控制器是否有预- 编程的引导加载程序

    我一直在看有关 LRAE 引导加载程序的 freescale AN 数据表很长时间,我收集了很多信息,我想知道一些我无法理解的元素,每个 HCS12 微控制器是否有预- 编程的引导加载
    发表于 04-18 07:44

    高速8位微控制器的用武之地

    本文主要介绍的是高速8位微控制器的用武之地。
    发表于 04-23 14:05 13次下载

    高速微控制器系列向超高速闪存微控制器的升级

    高速微控制器系列向超高速闪存微控制器的升级 Porting Applications from the High-Speed Micro Family to
    发表于 07-27 23:26 860次阅读

    高速微控制器系列向超高速闪存微控制器的升级

    高速微控制器系列向超高速闪存微控制器的升级 摘要:多种原
    发表于 08-13 13:29 646次阅读

    实现MAXQ2000微控制器的JTAG加载主机

    摘要:MAXQ®微控制器提供的JTAG启动加载程序使外部JTAG主机能够利用一组标准命令,轻松地识别MAXQ微控制器,并对其进行编程。本应用笔记中的代码可以用作构建全功能JTA
    发表于 04-23 16:22 1368次阅读
    实现MAXQ2000<b class='flag-5'>微控制器</b>的JTAG<b class='flag-5'>加载</b>主机

    什么是微控制器?如何编程微控制器

    微控制器进行编程或刻录意味着“将程序从编译器传输到微控制器的存储器”。微控制器程序通常是用C或汇编语言编写的,最后编译器会生成一个十六进
    的头像 发表于 08-21 15:40 9371次阅读

    AN5405_STM32H7和STM32L5系列微控制器加载程序时使用的FDCAN协议

    AN5405_STM32H7和STM32L5系列微控制器加载程序时使用的FDCAN协议
    发表于 11-21 17:06 1次下载
    AN5405_STM32H7和STM32L5系列<b class='flag-5'>微控制器</b><b class='flag-5'>加载</b><b class='flag-5'>程序</b>时使用的FDCAN协议

    为MAXQ2000微控制器实现JTAG自举加载程序主控

    通过使用一组标准化命令,MAXQ微控制器提供的JTAG引导加载程序允许外部JTAG主机轻松识别和编程任何MAXQ微控制器
    的头像 发表于 02-21 11:22 776次阅读
    为MAXQ2000<b class='flag-5'>微控制器</b>实现JTAG<b class='flag-5'>自举</b><b class='flag-5'>加载</b><b class='flag-5'>程序</b>主控

    使用微控制器上的引导加载程序使您的嵌入式设计面向未来

    引导加载程序是一个程序,允许您通过许多方便的接口加载应用程序固件,如UART,CAN/CAN FD,LIN,I 2C等。当您打开或重置
    的头像 发表于 05-06 10:55 962次阅读