首先申明,百度文库中已经有这篇文章,只不过它的题目不是很全面,可能让很多人找不到这篇文章。所以,我修改了一下题目和里面比较晃眼的字体。JTAG与ISP下载区别2010-06-2510:26:03|分类:单片机阅读45评论0字号:大中小订阅JTAG是JointTestActionGroup(联合测试行动小组)的缩写,是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。JTAG用来对芯片进行测试的基本原理是在器件内部定义一个TAP(TestAccessPort;测试访问口)通过专用的JTAG测试工具对内部节点进行测试。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。TMS:测试模式选择。此引脚用来实现TAP控制器各个状态之间的切换。TCK:测试时钟。JTAG操作是与TCK同步的。TDI:测试数据输入--需要移位到指令寄存器或数据寄存器(扫描链)的串行输入数据。TDO:测试数据输出--自指令寄存器或数据寄存器串行移出的数据。现在,JTAG接口还常用于实现ISP(In-SystemProgrammable;在线编程),对EEPROM、FLASH等器件进行编程和在线调试。JTAG编程方式是在线编程,传统开发流程中先对芯片进行预编程再装到板上的模式因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。AVR的JTAG功能(只有部分型号才有)使得AVR的调试工作非常简单,可以通过JTAG接口对Flash、EEPROM、熔丝位和锁定位进行编程。使用AVRstudio软件和JTAG硬件(AVRJTAG编程器,AVRJTAG仿真器)可以进行程序下载(亦即编程)和程序在线调试。通过JTAG功能,工程师可以方便的观察各个寄存器的变化和程序的运行情况,十分适合单片机的学习与系统开发。什么是ISP?ISP是一种通用的程序下载方式,所有AVR单片机都有ISP下载接口。可以通过ISP下载线或者STK500把程序下载到单片机中。ISP下载线成本低廉,制作简单,一个并口ISP下载线只需几十元即可得到。但是通过ISP的方式下载程序速度慢并且不能实现在线的仿真调试,所以这种编程方式并不适合于单片机的学习与系统开发。什么是Debugwire?为了降低成本和调试引脚的开销,ATMEL公司在AVR器件上使用的新的调试接口——Debugwire。通过Debugwire的方式,用户可以实现程序的在线调试,调试方面Debugwire与JTAG相比其主要区别在于仅使用一根信号线(RESET),即可完成调试信息的交互,达到控制程序流向,执行指令以及编程熔丝位的功能,但是在使用中尚需接电源信号:VTref(VCC)、GND。要注意的是,Debugwire不同于JTAG,它只是一种调试接口,而不是编程接口,也就是说不能通过Debugwire下载程序。JTAG,ISP,Debugwire的区别。JTAG:可以进行程序的下载和在线仿真调试,程序下载速度快。只有部分器件支持。在JTAG使能的前提下程序的下载和仿真无需进行其他设定即可。ISP:只能进行程序的下载,程序下载速度慢。所有AVR单片机均支持ISP程序下载。Debugwire:只能进行程序的在线仿真调试不能进行程序的下载。只有比较少的器件支持Debugwire方式仿真。目标MCU的ISP功能和debugWIRE功能是互斥的,使能了目标MCU的debugWIRE功能后ISP功能就无法使用,使能了ISP功能后debugWIRE功能就无法使用。根据网上的资料整理制作的基于M8的USB接口的ASPISP下载线。做了30几块,有30几位使用,除个别由于焊接问题,没有发现大的问题。现提供全部资料。点击此处下载全部资料(文件大小:581K)(原文件名:usb-avrisp.rar)(资料中,已经增加了VISTA下的USBISP驱动程序。现在在XP和VISTA下都可以使用)sch图pcb图实物图最终实物图(外面用透明热塑管封装)首先声明,我没有编写一句代码,仅对硬件做了调整。1。AVRISP的固件采用网上德国人的07.3.28的最新版固件,各位可以跟踪该网站,获得最新的信息。他提供2种模式的固件,我使用的是兼容AVRASP的。该网站还提供了固件的源代码。2。windows驱动也是该网上提供的,我仅改了一句:将;Modem3=CommunicationsPort改为Modem3=USBASP-ISP这样在windows中看到的设备为“USBASP-ISP”3。下载软件采用最新版的AVRSTUDIO。该3月28日的固件就是配合最新版的AVRSTUDIO使用的,老版的AVRSTUDIO也能用,可能要跳出更新固件代码的窗口,直接关闭即可。在AVRSTUDIO外的其它开发环境中使用不正常,或不支持,或支持的不好。制作1。硬件......2。将固件写入AVRISP的M8中。a/在USB口接入5V电源,将JP短路,选择其它的一个AVR编程器如并口的ISP编程器,将其编程口接在AVRISP的编程口上。b/配置AVRISP上M8的熔丝位:电源检测电压为2.7v,检测有效;系统使用高频外部晶体;满幅震荡!!c/写固件3。将AVRISP上的JP开路,插到本本的USB口上,安装wondows驱动(分别支持XP和VISTA)。驱动安装成功后,可以在windows的设备管理中看到一个串口设备USBASP-ISP。该驱动将AVRISP作为串口设备,占用一个COM口。请查看该COM口的号码。4。如果你的本本中有很多的串口设备,需要进行调整,将USBASP-ISP对应的COM口号降到9以下,即在COM0-COM9。原因是AVRSTUDIO中的串口仅能连接COM9以下的串口设备。(这个对计算机不熟悉的用户就不方便了)使用1。以上完成后,打开AVRSTUDIO。在Tools-ProgramAVR-Connect中选择STK500orAVRISP可以使用aoto让STUDIO自己找,也可直接选择AVRISP对应的COM口。2。出现以下窗口STK500withtopmodule'0x00'说明AVRISP正常,可以工作。注意选择要编程的AVR芯片型号,和编程方式为ISPmode!!3。在这里可以设置AVRISP的编程速度(AVRISP有记忆的)。选择速度后按WRITE按钮。4。对于编程工作在1M以下的AVR芯片,要降低AVRISP的编程速度,否则回出现错误提示:5。当被编程的AVR芯片工作在2M以上时,可以使用最高的速度,下载程序还是比较快的。速度的选择比较重要,如果采用低速,下载程序的时间不太容易忍受了。6。在使用中可能会由于目标板的上电、断电等,会造成USBISP连接不上,此时将AVRIAP从本本的USB口拔下,然后从新插上,在AVRSTUDIO中需要重新连接一下(从1开始)既可。总结:不如并口的ISP方便,因为在ICC、CVAVR、BASCOM中可以直接使用STK200/STK300的并口ISP。AVRISP只能在AVRSTUDIO中使用,并且速度不能自动调节。但对没有并口的本本来说,还是一个比较好的方案。另外,对于这个AVRISP的制作,可以在它的基础上深入学习,提高水平,因为是全部公开的。其它的方案只能作为工具使用,不方便深入的学习和研究。这也是我推荐AVRISP的原因。本方案全部采用免费资源,应该无版权的官司之争。如果有侵权的部分,请告之。ISP和IAP区别2011-02-1917:30:13|分类:基本概念理解|标签:ispiap编程单片机代码字号:大中小订阅ISP与IAP的区别ISP:insystemprogramming,在系统编程IAP:inapplicatinprogramming在应用编程但两者的操作方式,结果和应用场合有什么区别什么是ISP:用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫在系统编程,即不用脱离系统;什么是IAP:在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将newcode内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;应用场合:1,ISP程序升级需要到现场解决,不过好一点的是不必拆机器了;2,IAP如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去;这可能是他们的优点或应用吧在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。ISP和IAP很相似,都是不需要把芯片从板子上拔出来,就达到了用PC-MCU的编程接口(JTAG、串口、双绞线、SPI等)搞定新版本的升级的目的。MCU内部都是首先执行一段独立的Boot代码(这段Boot代码一般是出厂预置,或使用编程器烧录的,通常只有1k或4k,SST通常是占用一块独立的Block,Philips通常是让BootROM地址与其他Flash重叠,以达到隐藏的效果),Boot负责控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式(如,ether网口),将用户指定的某个在PC上编译完成的MCU可运行的二进制代码文件编程入MCU内的程序存储器。ISP和IAP最大的不同是:由谁来触发。ISP有4种触发方式:1.由外部硬件电路:如VDD保持高电平,给RST连续3个脉冲;2.检测状态位:如ISPEN,为0时PC指针从0000H开始执行;为1时,通过“引导向量”计算出“ISP代码”的位置。每次复位后都会检测该状态位;3.中止控制符信号触发芯片复位:中止控制符信号就是指在异步串行口的接收脚上出现长达一帧长度的低电平,这里一帧的长度与异步串行口的工作模式有关。4.直接调用ISP:用户程序也可以调用,但是很危险。4种方式的目的是相同的——进入ISP子程序,比如Philips出厂的ISP子程序在1E00H-1FFFH,只要能引导PC指针指向1E00H就可以了。而进入ISP代码的目的是:进入BootROM。IAP的触发比较简单一些,没有外部触发。通过一些指示位(SST为SC0/SC1、SFCF[1,0];Philips为一段IAP子程序,保存在FF00H~FFFFH地址空间中),达到引导到BootROM的目的。殊途同归,ISP、IAP所进入的BootROM里面驻留的Boot代码,才是最终目标。最后一种:并行编程模式。不需要BootROM,直接设置芯片的多个引脚来让芯片识别命令(如:擦除、写入、验证等),从P口传地址、数据,就可以写入Flash。用LPC2000的IAP,你自己分配好FLASH空间,指定一个BLOCK用来存放你的数据,然后通过IAP进行写操作。每次开机后,从这个BLOCK读你的数据。IAP的实现通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在UserFlash中,当芯片上电后,首先是第一个项目代码开始