嵌入式系统设计与开发第9章ARM嵌入式开发工具本章提要9.1ARM下层开发工具9.2ARM开发工具概述9.3ARM的ADS9.4EmbestIDE的介绍9.1ARM下层开发工具•由于程序的编译环境和运行环境不同,所以ARM嵌入式开发采用交叉编译方法进行。•首先,在通用计算机上对源程序进行编写、编译、汇编、连接形成可以在目标系统上运行的目标文件;接着,通过连接/调试装置将目标文件下载到目标系统上运行;源程序在目标系统上运行的情况连接装置在计算机中反映出来,开发人员通过反映出的情况根据开发项目的需要进行相应的修改并重复上述操作直至达到项目开发预期结果。•因此,可以把ARM嵌入式开发工具分为上层装在计算机中的开发工具、中间的连接装置和下层的ARM芯片本身具有的支持嵌入式开发的工具。ARM嵌入式系统实时开发组织结构图JTAGTAP控制器EmbeddedICEETMARM核JTAG端口跟踪端口EmbeddedICE控制器跟踪端口分析器计算机AddressBusControlBus扫描链扫描链扫描链DataBus9.1.1JTAG接口JTAG接口标准是由测试联合行动组(jointtestactiongroup)于1986~1988年推出的基于边界扫描机制的标准化草案。1990年IEEE组织将这些草案标准化,并命名为IEEE1149.1标准,俗称JTAG调试标准。JTAG除了实现通常意义上的调试功能外,还可实现代码下载或单步执行程序等功能。边界扫描机制主要的思想是:通过在内部逻辑之间,即在内部逻辑的边界上增加串行的可读写的边界扫描单元,从而提供芯片级、板级、系统级的标准测试框架。边界扫描机制可以实现下列目标:•测试不同单元之间的连接。•测试单个单元的功能。•应用边界扫描寄存器完成其他测试功能,如伪随机测试、特征分析和静态测试等。JTAG接口的6个主要信号:1)TestClockInput(TCK)。TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。TCK在IEEE1149.1标准里是强制要求的。2)TestModeSelectionInput(TMS)。TMS信号用来控制TAP状态机的转换,通过TMS信号,可以控制TAP在不同的状态间相互转换。TMS信号在TCK的上升沿有效。TMS在IEEE1149.1标准里是强制要求的。3)TestDataInput(TDI)。TDI是数据输入接口。所有要输入到特定寄存器的数据都是通过TDI接口一位一位串行输入的(由TCK驱动)。TDI在IEEE1149.1标准里是强制要求的。4)TestDataOutput(TDO)。TDO是数据输出的接口。所有要从特定边界扫描链采样的保存在寄存器中的数据都是通过TDO接口一位一位串行输出的(由TCK驱动);在芯片串行测试时,将数据传送给下一个芯片。TDO在IEEE1149.1标准里是强制要求的。5)TestResetInput(TRST/nTRST)。TRST可以用来对TAPController进行复位(初始化)即JTAG复位。该信号接口在IEEE1149.1标准里是可选的,因为通过TMS也可以对TAPController进行复位/初始化。为了防止误触发,应在该端加适当上拉电阻。6)SystemReset(nSRST/SRST)。与目标板上的系统复位信号相连。可以直接对目标系统复位,同时可以检测目标系统的复位情况。该信号接口在IEEE1149.1标准里是可选的,并不是强制要求的。20针JTAG接口信号VCCGNDGNDGNDGNDGNDGNDGNDGNDGNDVCCnTRSTTDITMSTCKRTCKTDOnSRSTNCNC135791113151719246810121416182020针JTAG接口连接GNDGNDVDDJTAG20RRRRRRRRRTDOTCKTMSTDInTRSTnRESET13579111315171924681012141618209.1.2JTAGTAP•JTAG测试访问端口JTAGTAP是一个通用端口,是外部JTAG接口连接芯片的通道,由JTAGTAP控制器和扫描链构成。•通过TAP可以访问芯片提供的所有数据寄存器(DR,dataregister)和指令寄存器(IR,instructionregister)。•对整个TAP的控制是通过TAPController完成的。•TAP有5个接口信号:TCK、TMS、TDI、TDO和TRST,提供给JTAG接口。•扫描链是由靠近芯片的输入/输出管脚上各增加一个用于实现对芯片输入/输出信号进行观察和控制的移位寄存器单元,相互连接构成。即在芯片/内部逻辑的周围形成一个边界扫描链(boundary-scanchain)。•如果需要捕获芯片某个管脚上的输出,首先需要把该管脚上的输出装载到边界扫描链的寄存器单元里,然后通过TDO输出,得到相应管脚的输出信号。•如果要在芯片的某个管脚上加载一个特定的信号,则首先通过TDI把期望的信号移位到与相应管脚相连的边界扫描链的寄存器单元里,然后把该寄存器单元的值加载到相应的芯片管脚。•在IEEE1149.1标准里面,寄存器分为两大类:数据寄存器DR和指令寄存器IR。•边界扫描链属于数据寄存器的一种,用来实现对芯片的输入/输出的观察和控制,而指令寄存器用来实现对数据寄存器的控制。•如在芯片提供的所有边界扫描链中选择一条指定的边界扫描链作为当前的目标扫描链,并作为访问对象就是由相应指令寄存器完成的。通过TAP接口,对数据寄存器进行访问的一般过程是:1)通过指令寄存器,选定一个需要访问的数据寄存器。2)把选定的数据寄存器连接到TDI和TDO之间。3)由TCK驱动,通过TDI,把需要的数据输入到选定的数据寄存器中,同时把选定的数据寄存器中的数据通过TDO读出来。JTAGTAP控制器状态转换图Test-LogicResetOxFtms=1tms=0tms=0tms=1tms=1tms=0tms=1tms=0tms=1tms=1tms=0tms=0tms=0tms=1tms=0tms=1tms=1tms=0tms=0tms=1tms=1tms=1tms=0tms=0tms=0tms=1tms=1tms=0tms=0tms=1tms=1Run-Test/IdleOxCSelect-DR-Scan0x7Capture-DR0x6Shift-DR0x2Exit1-DR0x1tms=0Pause-DR0x3Update-DR0x5Update-IR0xDExit2-DR0x0Exit2-IR0x8Pause-IR0xBExit1-IR0x9Shift-IR0xACapture-IR0xESelect-IR-Scan0x4指令寄存器和数据寄存器工作过程:1)系统上电后在TMS信号驱动下,TAPController进入Test-LogicReset状态,然后可依次进入Run-Test/Idle→Select-DR-Scan→Select-IR-Scan→Capture-IR→Shift-IR→Exit1-IR→Pause-IR→Exit2-IR→Update-IR,最后回到Run-Test/Idle状态。在Capture-IR状态中,一个特定的指令加载到指令寄存器中,进入到Shift-IR状态。在Shift-IR状态下,通过TCK的驱动,可以将该指令送到指令寄存器中。每条指令都将确定一个相应的数据寄存器。然后可以沿着Shift-IR→Exit1-IR→Pause-IR→Exit2-IR→Update-IR路径进行,也可以沿着其他的路径到达Update-IR状态。在Update-IR状态,刚才输入到指令寄存器中的指令将更新指令寄存器成为当前指令。最后,进入到Run-Test/Idle状态,指令生效,完成对指令寄存器的访问。2)对当前数据寄存器的访问由指令寄存器中的当前指令决定。要访问由指令选定的数据寄存器,需要以Run-Test/Idle为起点在TMS信号驱动下,依次进入Select-DR-Scan→Capture-DR→Shift-DR→Exit1-DR→Pause-DR→Exit2-DR→Update-DR,最后回到Run-Test/Idle状态。在这个过程中,被当前指令选定的数据寄存器会被连接在TDI和TDO之间。通过TDI和TDO,就可以将新的数据加载到数据寄存器中,同时,也可以捕获数据寄存器中的数据。现在常用的ARM7和ARM9的微内核ARM7TDMI与ARM9TDMI都提供了4条扫描链:1)ScanChain0测试链2)ScanChain1调试链3)ScanChain2编程链4)ScanChain3外围测试链ARM9TDMI边界扫描链1的另外两个信号DDEN和SYSSPEED的作用是:•DDEN在ARM9TDMI内部测试模式下,是可获取、可测试的。在ARM9TDMI外部测试模式下低电平表示将获取数据总线上输入的数据,高电平表示将要输出扫描链上存储的数据。•在ARM9TDMI进入调试状态时,SYSSPEED将输出。低电平表示微内核现在进入断点调试,高电平表示微内核进入观察点调试状态。9.1.3EmbeddedICE嵌入式在线仿真器系统中内核调试功能,主要由4部分组成:ARM核内的一组调试扩展。EmbeddedICE宏。EmbeddedICE宏接口。基于JTAG接口的在主机和内核之间的调试通信通道。EmbeddedICE寄存器地址宽度功能地址宽度功能000006调试控制寄存器011009观察点0控制值寄存器000015调试状态寄存器011018观察点0控制屏蔽寄存器000101中止状态寄存器1000032观察点1地址值寄存器001006调试通信控制寄存器1000132观察点1地址屏蔽寄存器0010132调试通信数据寄存器1001032观察点1数据值寄存器0100032观察点0地址值寄存器1001132观察点1数据屏蔽寄存器0100132观察点0地址屏蔽寄存器101009观察点1控制值寄存器0101032观察点0数据值寄存器101018观察点1控制屏蔽寄存器0101132观察点0数据屏蔽寄存器调试控制寄存器(debugcontrolregister)用来控制EmbeddedICE,6位分别对应6种控制信号,从低到高依次是DBGACK、DBGRQ、INTDIS、SBZ/RAZ、MonitorModeEnable和EmbeddedICE。DBGRQ调试请求信号,通过将该信号置1,可以强制ARM7TDMI/ARM9TDMI暂停当前的指令,进入调试状态;INTDIS用来控制中断;SBZ/RAZ任何时候都必须被置0;MonitorModeEnable用来控制是否进入Monitor模式;EmbeddedICE-RTDisable用来控制整个EmbeddedICE-RT,是启用还是禁用,如果禁用的话,ARM7TDMI/ARM9TDMI将一直保持在正常的运行状态。通过调试状态寄存器(debugstatusregister)可以查询当前系统的状态。调试状态寄存器是可读可写的,但一般只进行读操作。5位信号从低位到高位分别是:DBGACK、DBGRQ、IFEN、CGENL和TBIT,其中DBGACK标识当前系统是否处于调试状态,置1表示处于调试状态;DBGRQ标识DBGRQ信号的当前状态;IFEN标识系统的中断状态是启用还是禁用;CGENL标识调试状态下对存储器的访问是否完成;TBIT用来判断是从ARM还是Thumb模式进入调试状态。中止状态寄存器(abortstatusregister)用来确定异常的产生原因:断点、观察点还是真的异常。调试通信控制寄存器(debugcommscontrolregister)和调试通信数据寄存器(debugcommsdataregister)是用来控制和操作调试通信通道。其他的寄存器都是关于观察点WATCHPOINT的寄存器,用于设置断点和观察点。剩下的12个寄存器可以表示成如下形式:观察点