一种基于MCU内部Flash的在线仿真器设计方法

发布者:清新天空最新更新时间:2012-03-01 来源: 21IC关键字:微控制器  在线仿真  开发系统  Flash  SRAM 手机看文章 扫描二维码
随时随地手机看文章

由于市场对MCU功能的要求总是不断变化和升级,MCU应用的领域也不断扩展,因此往往需要对最初的设计进行修改。Flash MCU与以往OTP/MASK MCU相比,最大的优点就在于可进行高达上万次的擦写操作,顺应了MCU功能不断修改的需求;另一方面,Flash MCU市场价格也在不断下降。因此,许多OEM已将Flash MCU用于产品的批量生产。对于Flash MCU,基于内部Flash的在线仿真器更接近于程序真实的运行特性,程序调试的效果更好,效率更高。实际上,Flash MCU工作时Flash的延时、读写时充等特性是非常,程序存储在MCU外部仿真板上的SRAM中,由额外的硬件逻辑来模拟Flash的这些特性是费时低效的;同时将Flash和MCU内嵌的其他类型存储器如SRAM、ROM等区分开来也是十分重要的。如果在程序的调试阶段就可以反映出这特性,有且于实现程序从仿真器到商用MCU芯片的无缝转移。

1 关于Flash MCU

Flash MCU的构成如图1所示,主要由CPU核、Flash IP及其控制模块、SRAM IP及基控制模块、WatchDog、PMU(Power Manage Unit,功耗管理单元)、I/O端口以及ISP在线编程接口等组成。不同功能的Flash MCU还包含一些各自独特的应用模块单元,如用于寻呼的Flash MCU所包含的解码模块。对于用来构成在线仿真器的Flash MCU还可能包括仿真接口单元。本文在讨论Flash MCU的在线仿真时,指的都是包含仿真接口的Flash MCU。

Flash存储器几乎拥有现今追求个性化的用户所需要的所有优点:掉电数据不丢失、快速的数据存取时间、电可擦除、容量大、在线(系统)可编程、价格低廉以及足够多的擦写次数的高可靠性等,已成为新一代嵌入式应用的首选存储器。与Flash MCU相比,MASK(掩膜)MCU尽管在大指生产时仍具备一定价格优势,但其升级不便的缺点,随着今后Flash成本的进步降低和MCU功能需求的逐渐增多,将表现得更为显著。

2 基于外部SRAM的MCU在线仿真器

MCU 仿真器的一种常见做法是,将用户的待调试程序(以下简称用户程序)存储在MCU外部仿真板的SRAM(以下简称外部SRAM)中,在bond-out MCU的外部结构仿真监控硬件(以下简称外部仿真逻辑),通过监视和控制仿真接口信号即bond-out的信号,来获取MCU的状态,是指将MCU内部的某种信号连接到封装的管脚上,使得外部仿真逻辑可以监视和控制MCU内部的状态。这种非商用芯片专用于构成在线仿真器,当用户程序在仿真器中调试完成后,编程到商用MCU芯片中,应用到用户系统。在商用MCU中,这些仿真接口信号不会出现在芯片封装的管脚上。

在Flash MCU没有被广泛应用之前,仿真器设计公司通常将用户程序和监控程序都存储在外部SRAM中,这种做法基本上可以反映SRAM MCU真实的运行情况,对用户程序的调度效果影响不大。但是对于Flash MCU而言,则存在一定的问题。毕竞SRAM和Flash在工艺和读写时序上相去甚远,CPU运行存储在SRAM和Flash中的程序,情况是完全不同的。有可能出现程序存储的仿真器的外部SRAM中运行良好,但是编程到商用MCU中工作起来却不正常。随着Flash MCU在 MCU市场中的比重越来越大,这一问题显得越来越突出,有必要加以重视。

本文介绍的Flash MCU仿真器的设计方法,几乎不增加MCU的仿真接口信号和芯片设计的复杂程度,就可以接近程序在商用MCU中的运行情况,实现用户程序从仿真器到商用MCU的良好转移。

3 基于MCU内部Flash的在线仿真器的一种设计方法

图2是Flash MCU仿真器系统构成示意图,其中的虚线接口信号是MCU的仿真接口,通常包括仿真使能信号,bond-out MCU中的CPU的地址、数据、读/写和取指等信号,以及少数几个用于仿真的控制信号。仿真接口是Flash MCU与外部仿真逻辑之间的桥梁,使得外部仿真逻辑能够监控MCU的内部状态。
[page]
3.1 仿真器的工作原理

仿真器复位后,CPU开始运行存储在MCU内部Flash(以下简称内部Flash)中的用户程序,外部仿真逻辑实时监测仿真接口信号,取得当前CPU运行指令的地址,判断是否断点。一旦遇到断点,外部仿真逻辑停止用户程序的运行,切换程序运行的地址空间,开始运行存储在外部SRA模块的监控程序。监控程序取得MCU的当前状态,并根据软件的调试要求,改变MCU内部的一个或多个寄存器的值,控制MCU 的下一步运行。当监控程序完成使命,需要将程序的运行空间切换回用户程序空间,CPU取指从外部回到内部,继续运行用户程序。在用户程序运行过程中,软件通过并口发送的调试指令可以控制外部仿真逻辑,随时打断程序运行,或者单步调试,工作的过程与断点相心。断点、单步及软件中断在下文中断称为程序中断事件。

仿真器工作时,CPU的取指空间需要在内外存储器之间反复切换。CPU地址空间划分示意图如图3所示。总体上,仿真器的工作受图4所示的状态机控制。该状态机共有四个状态:

·用户程序运行态(简称用户态)

仿真器复位后,处在运行用户程序的状态。在该状态下,CPU运行存储在内部Flash中的用户程序;外部仿真逻辑实时监测仿真接口,等待程序中断事件的发生,进入下一状态-跳转态。

用户程序通过MCU的ISP(在线编程接口)编程到内部Flash中,由Flash MCU的专用编程器完成。在设计bond-out MCU时,应该考虑与非bond-out MCU在编程时管脚的一致性。

外部SRAM用来存储监控程序和监时数据。

·跳转态

一旦程序中断事件发生,需要切换CPU的取指空间,跳转到监控程序窗口。

由于在程序中何处中断是不可预知的,因此不可能在用户程序中预先安插好用于空间切换的跳转指令。所以需要一个专门的状态来插入跳转指令码和跳转的目的地址,即监控程序的入口地址,强制CPU运行监控程序。监控程序窗口是划分CPU地址空间时,为仿真功能预留的地址空间,空间大小视所需的监控程序的大小而定,监控程序的大小在一定程序上取决于仿真功能的强弱。

CPU从仿真接口读跳转指令码和跳转地址。MCU外部仿真逻辑同时使能程序空间切换信号,屏蔽MCU的所外部中断,停止MCU中CPU外围模块的时钟,也就相当于屏蔽了MCU的所有内部中断。当程序空间的切换完成后,仿真器进入监控态,运行存储在外部SRAM中的监程序。

·监控态

在监控状态下,CPU运行存储在外部SRAM中的监控程序;继续禁止MCU的所有外部中断,停止MCU中CPU外围硬件模块的时钟。

监控程序的任务是获取MCU当前的状态,接受软件的调试命令,控制MCU的下一步运行。监控程序可以写得很简单,仅仅获取CPU特殊寄存器和外围硬件寄存器的值,实现监视功能。也可以有比较完备的功能,例如接收用户的调试指令,修改其中一些寄存器的值,命使得MCU再次运行时,按照用户的调试要求往下运行。这需要在MCU设计时,保证在CPU外围模块的时钟停止时,也可以读写外部硬件寄存器。至于CPU 的5个特殊寄存器;PC、ACC、IDX、CCR和 SP,可以通过进入监控程序执行特定的程序段得到。如MOTOROLA的HC6808就可以通过在监控程序开始处加入以下程序段得到这些寄存器的值。对于 CPU指令集不支持读取全部特殊寄存器的MCU,可以通过在MCU内部增加测试逻辑得到。PC值即为程序中断处CPU的取指地址。

PSHA ;将ACC的值压入堆栈

TPA ;将CCR的值传送给ACC

STA $2FEB ;将CCR的值存入存储器,地址为$2FEB

PULA ;将ACC弹出堆栈

STA $2FEA ;将ACC有值存入存储器,地址为$2FEA

STHX $5F ;将IDX(H:X)的值存入存储器,地址为$005F

TSX ;将SP的值传送给IDX(H:X)

STHX $5D ;将SP的值存放存储器,地址为$005D

当不再继续调试,给出开始运行的命令,监控程序结束对运行命令的等待,并且将CPU特殊寄存器的值恢复。继续运行监控程序,直到最后一条指令即跳转指令进行返回态。

·返回态

CPU 执行监控程序的最后一条指令-跳转指令。外部仿真逻辑在指令码后紧接着插入本次中断事件的中断点地址(进入监控程序之前的用户程序指令地址),CPU的取指空间需要跳回到用户程序空间。取消对外部中断的屏蔽,恢复CPU外围模块的工作时钟,监控程序完成使命,回到用户态,继续运行内部Flash中的用户程序。

3.2 内部仿真逻辑

为了构造合适的MCU的仿真接口,必须在MCU设计时,在MCU内部增加一个仿真接口模块,称为内部仿真接口模块。负责对仿真接口所需的CPU端口信号进行处理(如出于减少bond-out信号线的考虑,将地址和数据总线复用),并产生外部仿真逻辑所需的控制信号如地址锁存信号,接收来自外部仿真逻辑的控制信号如程序文凭间切换使能信号等。

3.3 外部仿真逻辑

外部仿真逻辑如图2左部所示,负责接收计算机通过并口发送的仿真命令,监视MCU的仿真接口,控制仿真器的工作状态。外部仿真逻辑由外部仿真接口模块、断点判断模块、轨迹纪录模块、并口接口模块和外部SRAM读写控制模块等部分组成。各个模块的作用简单介绍如下:

·外部仿真接口模块

该模块是外部仿真逻辑中仿真状态机所在的核心模块。功能包括:接收业自MCU的地址、数据、读/写、取指、地址锁存等信号;根据并口接口模块给出的来自软件的仿真命令,给出仿真控制信号;在程序空间切换时插入跳转指令和地址;将来自MCU的地址和取指信号送给断点判断模块,并接收来自断点判断模块的断点标志信号;产生送给MCU的程序空间切换使能信号;运行监控程序时,给出读写外部SRAM所需信号,并接收读出的数据,将其送给MCU。

·断点判断模块

根据外部仿真接口模块送来的CPU地址,读取断点标志存储器中的相应值。如果读出的标志为有效值,表示当前地址为断地址。接收来自并口接口模块的设置和清除断点命令,将断点存储器的相应位置1或置0。允许设置任意数目的硬件断点。

·轨迹纪录模块

将外部仿真接口模块送来的CPU取指地址,存储在轨迹纪录的存储器中。轨迹纪录的存储器采用的FIFO的方式,所能纪录的轨迹长度是有限的,存满刷新。软件读取该存储器,可以得到CPU的运行轨迹。

·并口接口模块

提供仿真器和计算机并口之间的通信接口,可以针对不同的并口模式设计,以满足不同模式的通信时序要求。

·外部SRAM读写控制模块

仿真过程中,仿真器的不同部分需要分时读写外部SRAM,包括:并口接口模块下装程序到外部SRAM;MCU在监控态从外部SRAM中读取程序指令,存储临时数据等。

对于Flash MCU而言,这种将用户的待调试程序存储在MCU内部的Flash中,将监控程序存储在MCU外部的SRAM中,并在MCU外部构造仿真逻辑,通过对采用 bond-out技术的MCU的bond-out管脚进行监控,来实现在线仿真的做法,在芯片设计时不需要做太多的工作,而且可以反映程序真实的运行效果。相对于完全在芯片仿真(on-chip debugger),该方法简单,MCU的设计周期短;而相对于用硬件平台如FPGA仿真,则价格低廉许多,是一种种权衡折衷的方法。作者提取了一个简单的Flash MCU模型,用这种方法完成了仿真器的逻辑设计,用Synopsys DC综合,用Quartus布线Altera APEX 20K200 FPGA中,用ModelSim5.4进行了后仿真,完成了仿真验证。结果证明这样的做法是可行的。

关键字:微控制器  在线仿真  开发系统  Flash  SRAM 引用地址:一种基于MCU内部Flash的在线仿真器设计方法

上一篇:CAN智能节点的设计
下一篇:具有DSP功能的16位微控制器80296SA

推荐阅读最新更新时间:2024-03-16 12:54

单片机与CPCI总线的脉冲信号检测系统的工作方法简述
引言 在工业控制领域,通常有大量的脉冲信号用于控制其他设备或部件的开关或者工作状态切换。这些脉冲信号除了常规计算机系统采用的+5 V接口电平外,还有+12 V、+30 V,乃至更高幅度的接口电平,通常为功率型电流驱动信号。本文提出了一种两级测试系统的设计思路,给出了在较宽的范围内兼容不同接口电平的脉冲信号检测系统的设计方案,采用标准CPCI总线接口设计,具有良好的兼容性和扩展性,适用于产品功能测试或系统集成测试。 1 测试系统架构 如图1所示,测试系统采用二级(主控机、下位机)结构设计,由主控计算机(即主控机)、测试客户机(即下位机)、局域网、电缆及运行于各设备中的测试软件共同构成。主控计算机属主控机一级,控制测试客户机,测
[单片机]
<font color='red'>单片机</font>与CPCI总线的脉冲信号检测<font color='red'>系统</font>的工作方法简述
单片机外部RAM的数据传送
单片机传送数据 将存储器中 0000H--00FFH 中的数据传送到 2000H--20FFH中 悬赏分:30 - 解决时间:2009-10-4 09:42 ======================================= 其他回答: 如果是51单片机,应该这样: MOV DPL, #00H MOV R2, #00H LOOP: MOV DPH, #00H MOVX A, @DPTR MOV DPH, #20H MOVX @DPTR, A INC DPTR DJNZ R2, LOOP RET 回答者: 做而论道 - 六级 2009-9-18 11:08 =============
[单片机]
51单片机8*8点阵显示
显示的是0-9数字显示,还有文字显示,请关注微信公众号“伊斯电子编程”免费获取。 仿真图: 代码:
[单片机]
51<font color='red'>单片机</font>8*8点阵显示
#51单片机#8位数码管(74HC595芯片)的使用方法
数码管基本属性: 1.采用2片595驱动数码管,需要单片机3路IO口,根据数码管动态扫描原理进行显示; 2.宽工作电压3.3V到5V; 3.PCB板尺寸:71mm*22mm 4.数码管型号:0.36 4位共阳 商家给的基本资料: 最新八位串行595数码管资料.rar 8位数码管的连接原理图 #include AT89X51.H #include intrins.h // 函数原形定义 #define uchar unsigned char #define uint unsigned int void main (void); // 主函数 void LED_OUT (uchar X); // LED单字节串行移
[单片机]
#51<font color='red'>单片机</font>#8位数码管(74HC595芯片)的使用方法
AT89S系列单片机ISP下载线设计
  1 引言   随着单片机日益广泛的应用,为了降低单片机系统开发的成本和难度,许多单片机生产厂商推出了支持ISP技术的单片机,其中就包括主流厂商ATMEL公司生产的AT89S系列单片机。ISP(InSySTem Programming)即在线系统编程,该技术允许用户对电路板上的单片机擦除、写入最终程序代码,免去了传统开发过程中所需的仿真器、编程器等开发工具,且使用户能在线对单片机进行软件升级。   ISP技术需要通过ISP下载线及相应的程序下载软件来实现,目前多数的下载线为并口下载线,而并口已经逐渐被市场淘汰,现在的许多笔记本电脑和台式机都取消了并口配置,因此,USB接口的ISP下载线已成为主流。本文提出了一种基于USB接口
[单片机]
AT89S系列<font color='red'>单片机</font>ISP下载线设计
基于51单片机的红外电子密码锁的设计
本设计包含两个51单片机和一个proteus自带的红外组件IRLINK来模拟实现红外通信:1)一个单片机模拟发送密码信号; 2)一个单片机接收密码信号并通过电磁线圈控制锁的开或者关; 3)使用proteus自带的红外组件IRLINK的发射端模拟第一个单片机发射红外信号; 4)使用proteus自带的红外组件IRLINK的接收端模拟接红外信号并经过光电转换成电信号送入第二个单片机(红外电子密码锁的控制器) 以下是电路图的设计: 电路图设计 以下是红外通信的部分程序 #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16
[单片机]
基于51<font color='red'>单片机</font>的红外电子密码锁的设计
[单片机框架] [drivers] [hc4051] 8路模拟分流器
1、概述 74HC4051是- -款八选一模拟开关电路,内置3个地址选择端(A0~ A2), 低有效的使能输入端(E),8路独立的输入/输出端(Y0~Y7) 及公共输入/输出端(Z)。 电路内部有8个双向模拟开关,每个开关的一-端连接到独立的输入输出(Y0~Y7)端,另一端连 接到公共的输入/输出(Z) 端。 当E为低电平时,通过A0 ~ A2选择- - 个通路的开关处于低阻导通状态。当E为高电平时,A0 ~ A2设置无效,所有开关处于高阻关断状态。如果需要切换开关状态,就必须使用使能输入端( E), VpD和Vss是连接到数字控制输入端(A0 ~ A2和E)的电源电压。(Vpp-Vs)的范围是3~9V。 模拟输入
[单片机]
[<font color='red'>单片机</font>框架] [drivers] [hc4051] 8路模拟分流器
STMCU应用过程中与电源相关的案例分享
我们在从事STM32单片机的应用开发及调试过程中,往往会碰到各类异常。其中有不少比例的问题跟电源有关。对于一个电子产品而言,电源部分很关键、很重要,但在实际开发调试中,我们偶尔会有意无意的忽视它。这里分享几个实际案例,以加强刺激,加深印象。 毕竟因为电源问题可能导致的异常很多很多,这里分享几个案例算是抛砖引玉,希望大家在调试中对电源方面加以重视。个人认为,往往电源出问题时导致的异常时并不太好分析。多数时候异常表现得更为诡异或没章法。 注:下面提到的案例中异常原因都与电源有关,但并不是说出现类似异常时一定是电源的原因。 下面主要分享五个基于STM32应用的案例。 案例1:STM32芯片的PLL无法正常工作。 有人使用STM3
[单片机]
STMCU应用过程中与电源相关的案例分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved