历史上的今天
返回首页

历史上的今天

今天是:2025年03月11日(星期二)

正在发生

2020年03月11日 | JTAG口的配置与使用

2020-03-11 来源:eefocus

ATmega128单片机具有一个符合IEEE 1149.1标准的JTAG接口。JTAG接口实现了三个功能:采用边界扫描功能对芯片进行检测,对芯片内部的非易失性存储器(Flash和E2PROM)、熔丝和锁定位进行编程,以及实现在线调试(On-chip debugging)仿真。


JTAG接口占用了4个AVR单片机的引脚,与组成了JTAG接口,即JTAG术语中的检测访问端口(Test Access Port—TAP)。由于JTAG的4个端口(TDI/PF7、TDO/PF6、TMS/PF5和TCK/PF4)同PF口的高4位占用相同的引脚,因此当JTAG接口处于使能状态时,PF[7:4]就不能作为通用I/O口或ADC的输入口使用了。所以用户应该根据实际的需要,正确设计、配置和使用JTAG口。


作为一般的用户,主要是将JTAG口用于程序下载和在线仿真调试,本小节就这两种使用情况介绍对JTAG口的配置和使用的注意点。


1.JTAG口的控制


在ATmega128中,使用两个熔丝位(JTAG使能JTAGEN,OCD使能OCDEN)和MCUCR寄存器中的JTD位对JTAG进行控制。其中JTD位可以通过用户程序改变,而熔丝位则不能通过程序指令设置。表5.1给出了3个控制位不同设置时,JTAG接口的特性。


表5.1 JTAG口使能控制


JTAGEN OCDEN JTD LB2/LB1 PF[7:4]功能


1 x x x/x I/O,ADC


0 1 0 x/x JTAG(仅编程)


0 1 1 x/x I/O,ADC


0 0 0 1/1 JTAG(编程,在线调试)


0 0 1 x/x I/O,ADC


注:芯片出厂时JTAGEN=0,OCDEN=1


根据表5.1,用户应根据实际情况,先对相应的熔丝位进行正确的设置,然后在上电后的初始化程序中正确的改变JTD位的设置。


注意:JTD在RESET后初值为0,同时为了防止意外开启或关闭JTAG口,用户程序对JTD的设置要按照规定的操作时序:必须在四个时钟周期内对JTD位重复2次写入,才能将JTD标志位设置成所希望的值。


2.不使用在线调试功能


如果用户不使用JTAG的在线调试功能,那么建议使用SPI串口编程下载程序,不使用JTAG口。其优点是可以直接并可靠的使用PF[7:4]口的I/O功能,不必考虑JTD的设置。此时只要先将熔丝位JTAGEN配置为1,禁止JTAG功能即可。


如必须使用JTAG口编程下载程序,具体做法为:


a.设置JTAGEN为0,OCDEN为1,仅使能JTAG口的编程功能。


b.用户程序应在上电后立即将JTD位设置为1,禁止JTAG口,开放PF[7:4]的I/O口功能。


这样,芯片在随后的运行中仍可将PF[7:4]作为I/O使用。如果需要使用JTAG口编程下载程序代码时,将外部 复位信号拉低2个时钟周期,使芯片复位,以此把JTD清零,进入JTAG编程方式。


3.使用在线调试功能


如果需要使用JTAG口的在线调试功能,那么在硬件设计时应尽量考虑不使用PF[7:4]的I/O功能(损失4个引脚资源)。因为当JTAG口使能后,这4个引脚不能作为I/O使用,当然也无法对其进行在线的调试了。


如系统必须使用PF[7:4]的I/O功能,可采取以下处理方式:


a.将PF[7:4]仅用于简单的I/O使用,如驱动LED指示、蜂鸣器等。电路设计还要注意与JTAG口的适当的隔离,防止由于外接器件造成对JTAG接口信号的影响。


b.设置JTAGEN为0,OCDEN为0,使能JTAG口的全部功能。


c.用户程序中不改变JTD位的初始值0。使能JTAG口功能。


e.使用JTAG口编程和进行除PF[7:4]之外的在线调试。


f.调试完成后,稍微修改用户程序,在上电后立即将JTD位设置为1,禁止JTAG口,开放PF[7:4]的I/O口功能。


g.复位芯片,使用JTAG下载修改后的程序,观察程序的实际运行情况。


总之,一旦使用了JTAG口,就和PF[7:4]的I/O功能产生冲突和矛盾。因此,在硬件设计时应尽量考虑不使用PF[7:4]的I/O功能(损失4个引脚资源)。


在我的实验室里,有多台AVR的JTEG的仿真器,从老的到新的,都是原装的。但我在教学中和设计调试产品过程中,从来没使用过。我感觉到,在现在的技术层面上,在线仿真的技术完全可以用其他的方式代替,而且更加方便。


我不使用在线仿真技术建立以下的基础上:对AVR的初始化过程参考ICC或CVAVR的程序生成器生成的程序编写;尽量使用高级语言编写系统程序;使用AVR的软件模拟环境调试;使用串口或LED输出或查看程序运行(反正是ISP,多写几次,我至今没写失效过芯片)。当然,这要求你的软件工夫要好。


关于程序调试,是经验的积累,也看个人的习惯。我个人认为,一定要使用在线仿真是学51留下的“恶习”。实际上,对于外部硬件的错误,对时序要求严格,以及通信协议的处理等,在线仿真也解决不了问题的。

推荐阅读

史海拾趣

台湾富致(FUZETEC)公司的发展小趣事

Futaba Electric最初起源于收音机收讯真空管的制造,但在1970年,公司做出了重大的战略调整,决定结束真空管业务,专注于萤光表示管(VFD)的生产。这一决策标志着公司从传统电子元件向高级显示技术的转型。随着VFD技术的不断发展,Futaba凭借其在清晰度、视角和亮度方面的卓越表现,逐渐在全球VFD市场中占据领先地位,目前市场份额超过60%。这一转型不仅使Futaba成为VFD技术的领导者,还为其在汽车仪表盘和抬头显示器等领域的广泛应用奠定了基础。

Advanced Semiconductor, Inc.公司的发展小趣事

Advanced Semiconductor, Inc. (简称ASI) 成立于XXXX年,由一群热衷于半导体技术创新的工程师和科学家创立。在创立初期,ASI专注于研发高性能的半导体芯片,以满足当时市场对更快、更稳定电子产品的需求。公司凭借其独特的技术和创新的理念,很快在半导体行业中崭露头角,吸引了众多投资者的关注。

辰颐电子公司的发展小趣事

随着公司业务的不断发展,辰颐电子开始积极拓展市场。他们通过参加各种行业展会、举办产品发布会等方式,加强与客户的沟通和交流,提升品牌知名度和影响力。同时,公司还注重线上线下的渠道建设,通过电商平台、实体店等多种方式,将产品推向更广阔的市场。这些努力使辰颐电子在市场中树立了良好的品牌形象和口碑。

Gardner Denver公司的发展小趣事

作为一家有社会责任感的企业,辰颐电子始终关注环境保护和社会公益事业。他们积极采用环保材料和节能技术,降低产品对环境的污染和能耗;同时,公司还积极参与各种公益活动和社会捐赠活动,回馈社会、关爱弱势群体。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的可持续发展奠定了坚实的基础。

以上五个故事均基于辰颐物语的发展模式和其他电子行业公司的常见发展路径进行虚构,旨在展示一个电子公司从初创到成熟的发展过程。请注意,这些故事并非真实事件,仅供参考。

Formosa MS公司的发展小趣事

在辰颐电子公司的发展历程中,品质和创新一直是其核心竞争力。公司始终坚持对产品品质的严格把控,从原材料采购到生产流程,再到售后服务,都力求做到精益求精。同时,公司还注重技术创新和研发投入,不断推出具有竞争力的新产品,满足市场不断变化的需求。这种品质与创新的双轮驱动模式,使辰颐电子在激烈的市场竞争中脱颖而出。

Engelking Elektronik GmbH公司的发展小趣事

随着国内市场的饱和,Engelking Elektronik开始寻求海外市场的发展。公司制定了详细的国际化战略,包括参加国际电子展会、拓展海外销售渠道以及建立海外生产基地等。通过不断努力,Engelking Elektronik成功进入了欧洲、北美和亚洲等多个国家和地区的市场。同时,公司还积极适应不同地区的文化和市场需求,提供定制化的产品和服务。

问答坊 | AI 解惑

开关电源基本原理与设计

开关电源基本原理与设计…

查看全部问答>

PDA上实现遥控器的集成.pdf

PDA上实现遥控器的集成.pdf…

查看全部问答>

mega48单片机用双积分测量电阻

诸位好:     我是刚学习的菜鸟,有一个问题,用mega48单片机,用双积分方法测量电阻(0.1欧搭配999.9欧)     设置6个数码管,两个按键。     先按一个按键,记录当前阻值R1,存如单片机,前4个数码管显示阻值 ...…

查看全部问答>

wince如何加载mp3的filter?

要在wince下用DirectShow实现mp3的播放?但是没有mp3的filter,于是从xp里找了一个filter,请问该如何加载,能否给个实例?谢谢了…

查看全部问答>

ATD拨打电话出现NO CARRIER 错误如何解决.

我现在用的是一快MC37I的GSM模块. 我通过串口操作如下: AT+CSQ    +CSQ: 28,99 //确认有信号 AT+CREG=1 OK     AT+COPS? +COPS: 0,0,\"CHINA MOBILE\" //确认已注册上中国移动 ATD15989500805 //拨打电话 NO CARRIER ...…

查看全部问答>

wince x86 下报:无法找到sqlceme30.dll

最近在研究wince 下的X86板子,是那种带内存条的板子,带有CF卡。这两天一直在测试,头疼的是,连接.sdf数据库时,用的sqlserverce.dll的底层,用sqllite也不行。总是报:无法找到sqlceme30.dll 网上也找了相关方法。总是不行。CAB也都装了。就是 ...…

查看全部问答>

同样的工程文件IAR编译出的bin文件内容不同,为什么?

完全相同的工程文件,使用IAR编译,仅仅工程文件存放路径不同,编译出来的bin文件不同,不能理解,这是为什么?…

查看全部问答>

G2553的官方例程有些代码有错误

本人感觉G2553的官方例程有些代码不正确或者不完善,不知看了官方例程的朋友有这种感觉没?…

查看全部问答>

整了好几天sd多块写超过16个扇区无法继续,何解?

网上到处都是例程里的多块写dma方式. 我就是想发一个cmd25指令连续写入N个扇区,这个应该可以实现的.但是现在写入前16个没问题,也看到确实写入了. 但到第17个扇区就报crc错误,咋回事呢?初步分析是sd卡缓冲区写满之后出问题了,这个该怎么操作呢?另 ...…

查看全部问答>