jtag相关

http://www.cnblogs.com/TaigaCon/archive/2012/12/20/2826941.html


JTAG(Joint Test Action Group)联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、 TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线

 
  JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(Test Access Port 测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现在,JTAG接口还 常用于实现ISP (In-System Programmable 在线编程),对FLASH等器件进行编程。
 

  JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程实现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。JTAG接口可对PSD芯片内部的所有部件进行编程。

上面的信息是从度娘百科引用过来的,对于jtag没有了解过的人来说,上面的大部分内容都不知道说什么,当然,我是一开始看的时候也看不懂。

不过从上面得出来的信息知道,jtag是一个协议,标准有4个引脚,用于芯片的测试与编程调试。

 

jtag是有硬件实现的。

在cpu(注意:这里的cpu是指运算处理单元,只包含了内部寄存器以及运算单元等基本部件)外围,处理器(即cpu扩展芯片,不是soc)内部包含了jtag的硬件实现,并且向外界提供接口,也就是上面所说的TMS,TCK,TDI,TDO,四个引脚。

如图:

 

边界扫描链

jtag如何用于芯片测试呢? 其中用到的最主要部件就是边界扫描链。

命名为边界扫描链,是由于它位置处于处理器的边界上。

我们知道cpu是通过引脚与外围交流的,所有的数据都会通过引脚输入或者输出,而jtag就是通过监控引脚的信号达到芯片测试的目的。

而边界扫描链就是在引脚上的一个部件。如下图:

 

通过边界扫描链,当有信号输入的时候,边界扫描链就能获取信号,当cpu要输出信号的时候,边界扫描链也能获取要输出的信号。

另外也可以通过边界扫描链来直接向外部输出信号。

无论是信号的抓取还是输出,都需要有接口来保存这些信号,TDI跟TDO就是做这样一些工作的。

如图:

本来边界扫描链保存着引脚上的信号,当通过TDI引脚输入我们自己的信号的时候,会发生沿上面红线方向的移位操作,

        TDI ——〉 边界扫描链 —— 〉 TDO

就能从TDO获取边界扫描链上的信号,我们从TDI输入的信号也会到边界扫描链上去。

在cpu跟外界通信的引脚上的数据无非就是 指令 跟 数据信号(包括地址跟数据) 两种。但是这两者的结合形成了一个完整的程序,能对它们进行监控就表明我们能进行程序的调试。

 

上面的只是jtag最基本的原理,要对程序更好的调试还需要控制部件,还有更多寄存器的结合等等。

下面是一个完整的jtag调试部件:

更详细的jtag信息可以看看http://www.micetek.com.cn/technic/jtag.pdf

 

 


下面来讲讲arm上的jtag调试,openocd就是一个jtag的调试工具

以下基于s3c2440,openocd

 

我们在调试程序的时候,通常需要设置断点,断点也就是指令所在的位置,

断点分为两种:硬件断点跟软件断点

  硬件断点:指令的地址。当cpu要去某个地址取指令的时候,就暂停cpu的运行。在s3c2440上只支持两个硬件断点

  软件断点:软件断点不限制断点的个数,因此硬件断点的方法是不可用的。当我们需要在某个指令上打断点的时候,openocd会先去取得断点的地址,然后把每个断点处的值替换成某个特定的值(如deeedeee),当cpu取数据的时候得到该特定的值,就知道到达了断点地址,暂停cpu的运行,去除断点的时候再把原本的值换回去。如果没指定硬件断点的话,一般都默认是软件断点。

 

另外openocd对于软件断点有特定的要求:

  1.程序必须位于它的链接地址上,即如果指定了. = 0x30000000,那么程序必须实际上是位于0x30000000这个地方,也就是说程序必须已经重定位好,位于它的链接地址。

  2.程序必须按照某种特定的顺序排放:

复制代码
SECTIONS{. = 0x30000000;
.text    :{
head.o(.text)
init.o(.text)
nand.o
*(.text)
}
.rodata ALIGN(4)    :    {*(.rodata)}
.data ALIGN(4)    :    {*(.data)}
.bss ALIGN(4)    :    {*(.bss)    *(COMMON)}
}
复制代码

 

gdb调试就是基于软件断点的调试,我们可以用gdb对程序代码的某一行进行断点设置,那么它是如何定位到某个指令的地址的?

这就需要有调试信息,也就是在编译的时候加上 -g 给程序添加调试信息。

 

eclipse对gdb进行了进一步的封装(GUI),我们可以通过对eclipse进行某些设置达到调试arm程序的目的。

1.首先把文件加入工程

2.设置调试配置:

  点工具栏上的小虫子

  Debug Configurations...

  新建一个调试配置

  选择选项卡Main,在C/C++ Application:  选项上选择要调试的elf文件

  选择选项卡Debugger,GDB debugger: 选择为arm-elf-gdb

  选择选项卡Commands, 'Initialize'conmmands 下输入命令:

 

    target remote 127.0.0.1:3333    //连接openocd

    load                //加载程序到内存

    break _start            //设置断点到_start

    c        //continue继续执行

 

  然后Apply ,最后Debug开始调试

3.当然,上述程序是在内存执行的,但是开发板一开始的时候内存还没初始化,是不可用的,因此我们需要先设置内存

  在openocd的命令控制台上(telnet 127.0.0.1 4444进入openocd控制台)

 

    halt    //暂停cpu

    load_image  init.bin  0   //加载内存初始化程序 init.bin 到 0 地址

    resume  0    //在0地址开始运行

    halt  //暂停cpu

 

 

  然后就可以Debug了

 

Debug时,当运行到断点处的时候,我们可以看到某些寄存器或者变量的值,这些值在eclipse上显示:

 


点击打开链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为中国游牧蒙古人造像

第一次见到阿音,近距离地观看他的摄影,让我有一种愧疚感。作为蒙古人,在北京生活了30多年,我与自己民族的根和那片正在消逝的草原故地越来越疏远了。曾有人问我对故乡的理解,我说:我的故乡不过是记忆&#…

基于sobel算法的边缘检测设计与实现

基于sobel算法的边缘检测设计与实现 边缘是图像的基本特征。边缘检测针对的是灰度图像,目的是标识数字图像中灰度变化明显的点。 边缘检测的方法大致可以分为两类:基于查找的一类,通过寻找图像一阶导数中最大值和最小值来检测边界。 基于零穿越的一类,通过寻找图像二阶导数…

基于SPI协议的Flash全擦除

基于SPI协议的Flash全擦除 `timescale 1ns / 1ps module flash_be_ctrl(input wire sys_clk,//系统时钟频率50MHZ input wire sys_rst_n,//复位信号,低电平有效 input wire key,//按键输入信号 output reg cs_n,//片选信号 output reg sck,//串行时钟 output reg mosi //主输出…

单片机运行相关

1. 类似51,AVR这类的单片机,程序只能在ROM或FLASH里运行。STC的芯片一般是标准51或增强51,用的是FLASH,程序只能在FLASH中运行。2. ARM的程序即可以在FLASH里运行也可以在RAM里运行,不过能运行程序的FLASH只能使NorFla…

《心欢喜,灵快乐》出版

深圳女作家、画家崔文僮的散文绘画集出版。该书是她观察生活、体验人生、感悟艺术的真实记录。著名女作家徐小斌看了她的文章和绘画,写道:“‘生活家’这个概念令人非常感兴趣。文僮决定做一个‘有追求’的‘生活家’,这本身就十分有趣&#…

Sublime Text快捷命令

到页面底部:Ctrl End 这个快捷键可以将光标移动到当前页面的底部。 到页面顶部:Ctrl Home 这个快捷键可以将光标移动到当前页面的顶部。 批量注释:Ctrl / (Windows/Linux) 或 Cmd / (Mac) 这个快捷键可以在选中的行上添加或删除注释…

SPI-Flash页写实验

SPI-Flash页写实验 `timescale 1ns / 1ps module flash_pp_ctrl(input wire sys_clk,//系统时钟,频率50MHZ input wire sys_rst_n,//复位信号,低电平有效 input wire key,//按键输入信号 output reg cs_n,//片选信号 output reg sck,//串行时钟 output reg mosi //主输出从输…

散文绘画集《心欢喜,灵快乐》研讨会在京举行

中国作家网2009年07月28日15:53消息:7月28日,深圳女作家崔文僮创作的散文绘画集《心欢喜,灵快乐》研讨会在京举行。与会的评论家、画家和编辑们就崔文僮的散文和绘画进行了深入的分析和热烈讨论,专家们认为:作为一个非…

spi flash驱动

移植需要更改sendrcv函数里面内容,宏定义内容 #define DRV_SPI_FLASH_WRITE_ENABLE (0x06) //Write Enable #define DRV_SPI_FLASH_WRITE_DISABLE (0x04) //Write Disable #define DRV_SPI_FLASH_READ_STATUS_REG …

C++的int初始化

&#xfeff;int MyInt(56);std::cout<<"MyInt"<<MyInt<<std::endl;int MySecondInt int(); //int变量可以这样初始化std::cout<<MySecondInt<<std::endl;//那么可不可以这样初始化呢? int MyThirdInt(int());//error!!! now…

基于I2C协议的EEPROM驱动控制

基于I2C协议的EEPROM驱动控制 `timescale 1ns / 1ps module i2c_ctrl #(parameter DEVICE_ADDR = 7b1010_000,//i2c设备地址 parameter SYS_CLK_FREQ = 26d50_000_000,//输入系统时钟频率 parameter SCL_FREQ = 18d250_000 //i2c设备scl时钟频率 ) (input wire sys_clk,/…

做一个幸福的“生活家”:谈《心欢喜,灵快乐》

蝴蝶 工笔 放慢时间&#xff0c;静下心情&#xff0c;感受平常的生活&#xff0c;学习和体会生活带给我们的小小幸福&#xff0c;这或许是现代人很难做到的一种状态。正如我非常欣赏的法国女钢琴家埃莱娜格瑞莫所说&#xff1a;“谁能让我们幸福&#xff1f;如果不是我们自身&…

main函数相关

在历史上&#xff0c;大多数UNIX系统对main函数提供了三个参数&#xff0c;原型如下&#xff1a; int main(int argc, char *argv[], char *env[] ); 其中第三个参数是环境表地址。 ANSI C规定main函数只有两个参数&#xff0c;而且第三个参数与全局变量environ相比也没有带来更…

导演李大为婚礼全过程(一)

新锐导演李大为于昨日&#xff08;8月1日&#xff09;在北京北郊的拉斐特城堡举行隆重婚礼。新娘是赵怡然。李大为曾执导过电视剧《金粉世家》《红粉世家》和电影《走着瞧》&#xff0c;其中《走着瞧》入围了去年的东京电影节&#xff0c;在今年的上海国际电影节上获得了包括最…

对以前的改进MFC略缩图控件改进

以前写了一篇日记&#xff0c; 显示略缩图&#xff0c;见 《自绘列表框控件显示略缩图----再稍微改进点点。。》 http://blog.csdn.net/hemmingway/article/details/7483619 这次给他加点改进&#xff0c;就是增加删除被勾选的图片。。。 增加两个函数&#xff1a; CString …

VHDL程序结构

VHDL程序结构 --设计库和程序包调用 library IEEE; use IEEE.STD_LOGIC_1164.ALL; --电路端口说明和定义-VHDL实体描述部分 entity MUX41A is -- Port ( );PORT(a,b,c,d : IN STD_LOGIC;s0,s1 : IN STD_LOGIC;y : OUT STD_LOGIC ); end MUX41A; --结构体说明部分 arch…

导演李大为婚礼全过程(二)

新郎和新娘一起在垒成金字塔的酒杯里倒香槟酒。由此喜宴真正开始。 老巫启贤前晚刚品了“快女”&#xff0c;一早又风尘仆仆飞至北京。 偶与西门。 喜宴大厅前制作精美的指示牌 台湾导演丁仰国刚执导完《一起去看流星雨》&#xff0c;与其酷似徐若萱的二女儿。我们去年曾在台北…

stm32内存分配

https://www.cnblogs.com/yanghong-hnu/p/4705755.html http://blog.csdn.net/c12345423/article/details/53004747 http://blog.csdn.net/spdian/article/details/52963829 bss段&#xff1a; bss段&#xff08;bss segment&#xff09;通常是指用来存放程序中未初始化的全…

同步/异步移动文件列表框选中的文件

&#xfeff;//PlayBackDlg.hCStringArray m_ArrayFiles;HANDLEm_hThreadMoveFiles;//异步移动文件句柄unsigned int ThreadID;void OnRefresh();void OnMoveTo(); //这个同步移动文件void OnMoveToAsync(); //使用线程, 异步//PlayBackDlg.cpp//m_listVideo…

小女人的建筑大梦

去年在台北&#xff0c;好友台湾恒兆出版公司的总编辑郑花束女士以及一家旅游杂志的女主编请我与深圳作家千夫长一起吃饭。两个台湾女人领着两个蒙古男人来到了一家奇特的餐厅——“伍角船板”。黄昏里&#xff0c;餐厅怪异夸张的外形让我惊奇。餐厅主体结构是两个狂舞的女孩的…