在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。在ARM的开发过程中,一种最简单和原始的开发流程是:编写程序,然后烧写到芯片上验证功能,这种方法对于简单的小系统是可以对付的,但在大系统中使用这种方法则是完全不可能的。所以很多时候我们需要在不烧写代码的情况下调试程序,这就是仿真调试技术。
现代调试技术可以分为软件仿真调试和硬件仿真调试两种:
一.软件仿真(指令集仿真):
概念:
用数据结构描述目标机CPU中各个寄存器和其他资源(内存等),通过软件模拟,可以逐条指令解释执行目标机可执行映象中的程序。
应用场合:
● 当嵌入式软件开发在目标硬件平台不存在的情况下进行,就要使用这种软件来模拟目标CPU,以验证代码逻辑。
● 是学习嵌入式开发有效地工具,可以让学习者从底层具体硬件细节中解脱出来,专注于软件,尤其是与具体硬件无关的系统软件(TCP/IP协议栈)。
几个不错的硬件模拟平台:
● Skyeye:清华大学计算机系博士后陈渝发起,开源项目,主要模拟ARM内核CPU。
● ARMulator:ARM公司推出,ARM指令集模拟器(ADS,Realview MDK上就用这个)。
● ZIX:一个快捷高效、功能强大、易于配置的嵌入式Linux开发环境。
软件仿真的缺点:
无法完全仿真与硬件相关的部分,最终还要通过硬件仿真来完成最终的设计。
二.硬件仿真调试:
以前的芯片没有JTAG调试逻辑,要向仿真它就必须要有专门的仿真器,这种仿真器成本较高,而且每种芯片都不一样,现在这种仿真器已经不存在了。
现在的芯片一般都内置了JTAG调试逻辑,并不需要CPU仿真器,需要的只是一个JTAG协议转接器(现在还称其为仿真器,其实叫做调试器比较合适)。所以下面主要介绍JTAG及其仿真技术。
JTAG简介
JTAG是Joint Test Action Group的简称,该组织致力于统一芯片的测试标准,它们最初向IEEE提出了IEEE1149.1标准,后来经过IEEE批准并且标准化,所以IEEE1149.1标准又叫JTAG标准,它是一套芯片测试接口和标准,现在几乎所有的CPU核里面都会实现JTAG逻辑单元。JTAG原本是用来测试芯片设计是否正确,其基本原理就是在芯片的各个管脚上放置锁存器,然后串联起来构成移位寄存器,可以监控芯片管脚的输入和输出。后来大家发现用JTAG在线调试芯片非常方便(其实就是利用JTAG控制CPU内核),还不需要设计专门的仿真芯片,因此就出现了用JTAG调试风行的局面。
边界扫描技术(Boundary-Scan):
JTAG调试主要就是基于这种边界扫描技术。
边界扫描技术的基本思想是在靠近芯片的输入输出管脚上增加一个移位寄存器单元。因为这些移位寄存器单元都分布在芯片的边界上,所以被称为边界扫描寄存器 (Boundary-Scan Register Cell) 。当芯片处于调试状态的时候,这些边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。
JTAG的主要作用:
● 检测芯片是否良好
■这是JTAG最初设计的目标
● 镜像文件的烧写功能
■可以烧写编译出来的二进制或者十六进制可执行文件到目标板的Flahs芯片上
■当开发板为裸板(没有固化任何程序)的时候,通常需要通过JTAG接口下载bootloader
■调试功能
■JTAG接口为宿主机和目标系统之间的通信、控制提供了方便的途径
ARM7TDMI调试架构:
一个调试系统通常包含三个部分:
● 调试主机
■是一台运行调试软件(ADS,Keil等)的计算机
■可以发出一些高层的调试命令,设置断点,访问内存等
● 协议转换器
■将调试主机发出的高层调试命令转换为底层的ARM JTAG调试命令
■调试目标
■基于目标芯片的开发板
ARM7TDMI典型的调试架构如下图所示:
经过协议转换器进行命令解释,主机上运行的调试软件就可以通过JTAG接口直接和目标芯片对话了。
为了支持底层的调试,ARM7TDMI提供了硬件上的调试扩展,包括:
● 停止程序的运行
● 检查和修改ARM7TDMI的内核状态
● 观察和修改内存
● 恢复程序的运行
常见ARM调试工具:
● BDI1000/2000/3000
■非常好的调试工具,可以调试ARM、MIPS、PowerPC、Xscale等多种架构处理器
■JTAG下载速度可以上兆,以太网接口
■性能优越但是价格不菲,可以调试Linux内核这种复杂的代码
● U-Link
■U-Link是Keil公司做的用于ARM和某些增强型8051单片机调试的工具
■由于Keil公司做的时候没有加密,导致现在盗版满天飞
■U-link仅仅支持Keil,JTAG下载速度20K~30K
U-Link下载程序不是简单通过JTAG,而是先用JTAG下载一段固件程序到目标板,然后再用这个固件程序和JTAG把用户代码写入Flash以提高速度
● J-Link
■J-Link是IAR公司为ARM芯片开发的调试工具
■支持RDI协议的调试工具,如Keil、ADS、IAR等
■J-Link不支持ARM10以上的内核
■JTAG下载速度400K~500K
● Multi-ICE
■ARM公司原创调试工具,支持全系列ARM芯片
■JTAG下载速度130K左右
● Wiggler电缆
■Wiggler是世界上最泛滥的一种调试工具
■结构非常简单:一片74HC244 + 一个9013 + 几个电阻
■性能一般,但是价格非常便宜
■后人又在Wiggler的硬件基础上开发了很多的调试工具,例如大名鼎鼎的H-Jtag |