在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。在ARM的开发过程中,一种最简单和原始的开发流程是:编撰程序,之后烧讲到芯片上验证功能,这些方式对于简单的小系统是可以对付的,但在大系统中使用这些方式则是完全不可能的。所以好多时侯我们须要在不烧录代码的情况下调试程序,这就是仿真调试技术。
现代调试技术可以分为软件仿真调试和硬件仿真调试两种:
一.软件仿真(指令集仿真):
概念:
用数据结构描述目标机CPU中各个寄存器和其他资源(显存等),通过软件模拟,可以逐字指令解释执行目标机可执行映象中的程序。
应用场合:
●当嵌入式软件开发在目标硬件平台不存在的情况下进行,就要使用这些软件来模拟目标CPU,以验证代码逻辑。
●是学习嵌入式开发有效地工具,可以让学习者从底层具体硬件细节中解脱下来,专注于软件,尤其是与具体硬件无关的系统软件(TCP/IP合同栈)。
几个不错的硬件模拟平台:
●Skyeye:复旦学院计算机系博士后陈渝发起,开源项目,主要模拟ARM内核CPU。
●ARMulator:ARM公司推出,ARM指令集模拟器(ADS,RealviewMDK上就用这个)。
●ZIX:一个快捷高效、功能强悍、易于配置的嵌入式Linux开发环境。
软件仿真的缺点:
未能完全仿真与硬件相关的部份,最终还要通过硬件仿真来完成最终的设计。
二.硬件仿真调试:
原先的芯片没有JTAG调试逻辑,要向仿真它就必需要有专门的仿真器,此类仿真器成本较高,并且每种芯片都不一样,如今这些仿真器早已不存在了。
现今的芯片通常都外置了JTAG调试逻辑,并不须要CPU仿真器linux软件工程师培训,须要的只是一个JTAG合同转接器(现今还称其为仿真器linux软件,虽然称作调试器比较合适)。所以下边主要介绍JTAG及其仿真技术。
JTAG简介
JTAG是JointTestActionGroup的简称,该组织旨在于统一芯片的测试标准,它们最初向IEEE提出了IEEE1149.1标准,后来经过IEEE批准而且标准化arm linux 内核调试,所以IEEE1149.1标准又叫JTAG标准,它是一套芯片测试插口和标准,如今几乎所有的CPU核上面还会实现JTAG逻辑单元。JTAG起初是拿来测试芯片设计是否正确,其基本原理就是在芯片的各个管脚上放置锁存器,之后串联上去构成移位寄存器,可以监控芯片管脚的输入和输出。后来你们发觉用JTAG在线调试芯片十分便捷(或许就是借助JTAG控制CPU内核),还不须要设计专门的仿真芯片,因而就出现了用JTAG调试风行的局面。
边界扫描技术(Boundary-Scan):
JTAG调试主要就是基于这些边界扫描技术。
边界扫描技术的基本思想是在紧靠芯片的输入输出管脚上降低一个移位寄存器单元。由于这种移位寄存器单元都分布在芯片的边界上,所以被称为边界扫描寄存器(Boundary-ScanRegisterCell)。当芯片处于调试状态的时侯,这种边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过这种边界扫描寄存器单元,可以实现对芯片输入输出讯号的观察和控制。
JTAG的主要作用:
●检测芯片是否良好
■这是JTAG最初设计的目标
●镜像文件的烧录功能
■可以烧录编译下来的二补码或则十六补码可执行文件到目标板的Flahs芯片上
■当开发板为裸板(没有固化任何程序)的时侯,一般须要通过JTAG插口下载bootloader
■调试功能
■JTAG插口为宿主机和目标系统之间的通讯、控制提供了便捷的途径
ARM7TDMI调试构架:
一个调试系统一般包含三个部份:
●调试主机
■是一台运行调试软件(ADS,Keil等)的计算机
■可以发出一些高层的调试命令,设置断点,访问显存等
●协议转换器
■将调试主机发出的高层调试命令转换为底层的ARMJTAG调试命令
■调试目标
■基于目标芯片的开发板
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合同的调试工具arm linux 内核调试,如Keil、ADS、IAR等
■J-Link不支持ARM10以上的内核
■JTAG下载速率400K~500K
●Multi-ICE
■ARM公司原创调试工具,支持全系列ARM芯片
■JTAG下载速率130K左右
●Wiggler线缆
■Wiggler是世界上最猖獗的一种调试工具
■结构十分简单:一片74HC244+一个9013+几个阻值
■性能通常,而且价钱十分实惠
■后人又在Wiggler的硬件基础上开发了好多的调试工具,比如大名鼎鼎的H-Jtag
更多技术文章敬请关注:北京华嵌-嵌入式培训专家,国外领先的嵌入式服务机构,