《基于EmJTAG的ARM嵌入式系统调试工具.docx》由会员分享,可在线阅读,更多相关《基于EmJTAG的ARM嵌入式系统调试工具.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于EmJTAG的ARM嵌入式系统调试工具与PC机通讯方面,USB接口局部只需要将DP脚上拉一个电阻,使PC机识别到USB设备。DTC模块产生4个时钟信号作为JTAG时钟信号TDI、TDO、TMS和TCK,由I/O口引出,外部再加一个接口驱动芯片74LVC244,将这4个信号连接到标准的JTAG接口上。TAP控制器复位信号nTRST和系统复位信号nSRST通过I/O逻辑直接控制。EmJTAG采用USB供电方式,同时在TCK引脚上连接一个指示灯BUSY,显示系统是否处于忙状态。接口驱动芯片74LVC244由内部集成的电压校准器产生3.3V来提供电压。3软件设计和实现软件局部主要包括:PC机上的调
2、试器软件,EmJTAG协议转换器的PC端驱动程序以及EmJTAG中的固件程序。3.1PC机上的调试器软件采用VC+6.0MFC。其主要功能是与EmJTAG的PC端驱动程序通讯,将调试命令通过USB总线发送至EmJTAG。3.2EmJTAG的PC端驱动程序使用Driverstudio3.1开发Windows下的USB驱动程序,使EmJTAG和PC机的应用程序可以进展数据交互。3.3EmJTAG中的固件程序固件程序使用意法半导体ST开发工具STVD7forInDARTSTX进展开发。这一局部也是调试系统最重要的局部,即怎样产生JTAG时序信号控制ARM核。EmJTAG中的固件分成以下多个模块实现。
3、3.3.1DTC软件插件程序模块DTC功能框图如图3所示。DTC是ST72651内部集成的数据传输协处理器,也是一个通用的串行/并行通讯接口。通过改变其内运行的插件程序,DTC可以方便地完成不同的高速数据传输操纵。插件程序最大为256字节开场时存放在ST72651的Flash中,芯片运行的程序会将插件程序加载到DTCSWRAM中,然后控制DTC运行这段插件程序。ST7核也可以读写DTC的数据传输缓冲区,因此需要有一个仲裁电路用于防止ST7核和DTC访问该缓冲区时发生冲突。DTC有一套简单的指令集。ST7核通过DTC控制存放器DTCCR控制DTC的操纵,通过DTC状态存放器DTCSR查询DTC的
4、状态,通过DTC指针存放器DTCPR改变DTC的操纵指针。DTC有4种操纵状态:空闲状态IDLE,加载插件程序状态RAMLOAD,运行状态RUNNING和改变操纵指针状态POINTERCHANGE。通过改变DTCCR存放器的RUN、INIT和LOAD位可以实现4种状态间的转换。将插件程序加载到DTCSWRAM中的步骤如下:去除DTCCR存放器的RUN位,使DTC进入IDLE状态,停顿DTC;设置DTCCR存放器的LOAD位,使DTC进入RAMLOAD状态,以允许写DTCRAM;将插件程序复制到DTCSWRAM中;去除DTCCR存放器的LOAD位,使DTC返回到IDLE状态,恢复DTCRAM写保
5、护。使DTC运行其RAM即DTCSWRAM中的插件程序的步骤如下:去除DTCCR存放器的RUN位,使DTC进入IDLE状态,停顿DTC;将插件程序的起始地址填入DTCPR存放器中;设置DTCCR存放器的INIT位,使DTC进入POINTERCHANGE状态,将DTCPR存放器中的值复制到DTC中;去除DTCCR存放器的INIT位,使DTC返回到IDLE状态;设置DTCCR存放器的RUN位,使DTC进入RUNNING状态,开场运行。DTC运行的插件程序实现的功能是:将数据传输缓冲区内的数据快速移出I/O口,或从I/O快速移入数据到数据传输缓冲区中。DTC操纵的I/O口作为4个JTAG信号:TCK
6、、TMS、TDI和TDO。TCK作为移入/移出数据的触发时钟;TDI作为移出数据出口;TDO作为移入数据进口;TMS作为输入信号,与TCK一起决定TAP控制器状态的转移经过。插件程序用DTC汇编指令编写,然后通过ST公司提供的一个简单汇编器将汇编源代码转化成DTC机器指令,烧写到ST72651的Flash存储器中。3.3.2扫描链操纵模块扫描链操纵模块调用DTC软件插件程序,完成初始化TAP控制器、扫描链1操纵和扫描链2操纵。1初始化TAP控制器TAP控制器的根本功能是产生时钟信号和控制信号。它包括一个带有16个状态的有限状态机:Test-Logic-Reset状态、Run-Test/Idle
7、状态、Select-DR-Scan状态、Select-IR-Scan状态、Capture-DR状态、Shift-DR状态、Exit1-DR状态、Pause-DR状态、Exit2-DR状态、Update-DR状态、Capture-IR状态、Shift-IR状态、Exit1-IR状态、Pause-IR状态、Exit2-IR状态和Update-IR状态。初始化TAP控制器的目的是使TAP控制器进入Select-DR-Scan状态。无论当前TAP控制器处于什么状态,只要在TMS为1时产生5个TCK信号,TAP控制器就进入Test-Logic-Reset状态。因此,使TAP控制器进入Select-DR-
8、Scan状态的步骤为:首先使TMS为1,产生5个TCK信号,使TAP控制器进入Test-Logic-Reset状态;然后使TMS为0,产生1个TCK信号,使TAP控制器进入Run-Test/Idle状态;最后使TMS为1,产生1个TCK信号,使TAP控制器进入Select-DR-Scan状态。2扫描链1操纵扫描链1是JTAG电路中的一种测试数据存放器,主要用于内核测试和调试经过。扫描链1有33位,按扫描先后顺序依次为:BREAKPT位输入,D31D0输入/输出。扫描链1操纵的目的是移入BREAKPT位,同时向/从数据总线移入/移出32位数据。操纵步骤如下:初始化TAP控制器,使TAP控制器进入
9、Select-D-RScan状态;使TMS为1,产生1个TCK信号,使TAP控制器进入Select-IR-Scan状态;使TMS为0,产生2个TCK信号,使TAP控制器进入Shift-IR状态;往TAP控制器的指令存放器移入JTAG指令SCAN_Nb0010;使TAP控制器退出Shift-IR状态,进入ShiftDR状态;往扫描链选择存放器移入b0001,选择扫描链1;使TAP控制器退出Shift-DR状态,进入Shift-IR状态;往TAP控制器的指令存放器移入JTAG指令INTESTb1100;使TAP控制器退出Shift-IR状态,进入Shift-DR状态;移入BREAKPT位,移入数据
10、D31D0或者移出数据D31D0;使TAP控制器退出Shift-DR状态,进入Select-DR-Scan状态。3扫描链2操纵扫描链2也是一种测试数据存放器,用于访问EmbeddedICE宏单元的存放器。扫描链2有38位,按扫描先后顺序依次为:EmbeddedICE存放器的D0D31,EmbeddedICE存放器的A0A4,读/写位。扫描链2操纵的目的是读写EmbeddedICE宏单元的存放器。操纵步骤如下:初始化TAP控制器,使TAP控制器进入Select-DR-Scan状态;使TMS为1,产生1个TCK信号,使TAP控制器进入Select-IR-Scan状态;使TMS为0,产生2个TCK信
11、号,使TAP控制器进入Shift-IR状态;往TAP控制器的指令存放器移入JTAG指令SCAN_Nb0010;使TAP控制器退出Shift-IR状态,进入Shift-DR状态;往扫描链选择存放器移入b0010,选择扫描链2;使TAP控制器退出Shift-DR状态,进入Shift-IR状态;往TAP控制器的指令存放器移入JTAG指令INTESTb1100;使TAP控制器退出Shift-IR状态,进入Shift-DR状态;移入欲写的数据D0D31;移入欲读写的EmbeddedICE存放器的地址;移入读/写位读为0,写为1;假如为读,那么移出读到的EmbeddedICE存放器的值D0D31;使TAP
12、控制器退出Shift-DR状态,进入Select-DR-Scan状态。3.3.3EmbeddedICE存放器操纵模块EmbeddedICE存放器的读写通过对扫描链2操纵实现。读时,将欲读的EmbeddedICE存放器地址作为参数调用扫描链2操纵函数;写时,将欲写的值和EmbeddedICE存放器地址作为参数调用扫描链2操纵函数。3.3.4高层调试命令模块通过调用扫描链操纵模块和EmbeddedICE存放器操纵模块,实现了读写核存放器、读写存储器、断点及观察点操纵、单步或者全速运行程序等高级调试控制命令。这些命令供主程序状态机模块调用。3.3.5USB接口驱动模块USB接口驱动模块主要包含5个函
13、数:函数InitUSB用于初始化USB模块;函数USB_Polling处理USB主机发来的USB标准设备恳求,实现USB枚举阶段的传输经过,同时根据状态存放器的标志位调用相应的端点处理函数;CTR正确传输中断效劳程序用于处理端点上发生的各种中断;函数USB_RecvDataEP2unsignedchardp,uint8len和USB_SendDataEP2unsignedchardp,uint8len用于从端点2接收和发送USB包。3.3.6主程序状态机模块主程序状态机模块循环调用USB接口驱动模块的USB_RecvDataEP2函数,接收调试器发来的命令报文,根据命令报文的主命令号和次命令号调用高层调试命令模块的相应命令函数,并将命令函数返回的数据通过调用USB_SendDataEP2函数返回给调试器,最终根据命令函数返回的状态通过调用USB_SendDataEP2函数发确认报文给调试器。本文构造了一个支持ARM核的嵌入式系统调试工具。它首先定义了一个轻量级的远程调试协议EmRDI,然后使用ST72651芯片实现了协议转换器EmJTAG。目前该调试工具已经应用于实际嵌入式系统开发中,PC机上的调试器软件可以通过EmJTAG下载程序到基于ARM核的目的机上,并实现设置/去除断点、设置/去除观察点、全速/单步/停顿运行程序等根本的调试功能。0