AVR单片机的编程方式解析

  (1)串行编程(即ISP编程)
  ISP是In System Program的缩写,意思是在系统编程。目前的AVR芯片基本上都具备ISP接口,可通过ISP接口进行编程。它一共使用了两条电源线:VCC、GND,三条信号线:SCK、MOSI、MISO,以及复位线:RESET。由于仅仅使用了几条数据线,所以我们亦常将其称为串行编程。值得注意的是,虽然下载器端使用的信号线名为SCK、MOSI、MISO,但AVR MCU的信号端不一定是名为SCK、MOSI、MISO。
  AVR的串行编程方式有很多种,如:
  (1)STK200/STK300:并口下载器多采用该烧写方式,最早期的一种烧写方式,支持型号少,烧写速度低,不支持AVR Studio。
  (2)STK500:ATMEL最推荐的编程方式,由于采用ATMEL官方的STK500固件,使得它可烧写全系列AVR(若对固件进行升级亦可支持未来的AVR型号),烧写速度非常快,支持AVR Studio。
  (3)AVRISP(准STK500):由于采用ATMEL官方的STK500固件,使得它可烧写大部分AVR(若对固件进行升级亦可支持未来的AVR型号),烧写速度非常快,支持AVR Studio。
  (4)AVRISPmkII:由于采用ATMEL官方的AVRISPmkII固件,使得它可烧写大部分AVR(若对固件进行升级亦可支持未来的AVR型号),烧写速度非常快,支持AVR Studio。
  (5)当然还有其它的ISP方式,但已经那些均不是最为常见的串行编程方式,在此不在作一一介绍。
  (2)高压/并行编程
  AVR的高压编程/并行编程,实际上是更早出现的编程方法,它功能强大,但需要:
  1)连接较多的引脚(故称“并行编程”)
  2)使用12V电压(故称“高压编程”)
  联合起来一般叫高压/并行编程。实际上,有些编程是高压/串行编程,如Attiny13。(Attiny13端口非常少)高压/并行编程(理论上)能修复任何熔丝位,例如:
  1)Attiny13/24/2313、Atmega8/48/88/168等AVR的RESET端口与IO端口是共用的,由于这类AVR的引脚一般较少,(如Attiny13仅有6个IO口),经常出现IO不够用的情况,需要将RESET端口设置为IO端口使用,然而,一旦将RESET设置为IO,便无法再进行ISP编程了,更无法使用ISP恢复RESET功能,因为ISP编程需要RESET功能。然而,这种情况下,使用高压/并行编程,可以恢复RESET功能,(注意:RESET端口与IO端口是共用的AVR,具备debugWIRE功能,“dW”熔丝位必须为启动状态)因为高压/并行编程不需要RESET功能。
  2)当设置错了熔丝位导致芯片锁死,这种情况下,使用高压/并行编程,可恢复熔丝位。
  (3)JTAG编程
  JTAG烧写方式仅适用于带JTAG
  接口的AVR,另外,JTAG对比ISP烧写方式主要有个缺点:必须占用JTAG对应的IO端口。例如,ATMEGA16必须占用PC2-PC5这几个端口。然而,有时候,缺点也是优点,因为对于IO够用的AVR来说,在产品开发过程,可以用JTAG接口来仿真调试,产品量产后,产品板预留的JTAG接口还可以用来烧写程序。
  (4)IAP编程
  AVR MCU的ISP功能和debugWIRE功能是互斥的,也就是说,使能了AVR MCU的 debugWIRE 功能后ISP功能就无法使用,使能了ISP功能后debugWIRE功能就无法使用。
  那么,怎样确定AVR的RESET引脚为ISP功能使用还是debugWIRE功能使用呢?
  在具备debugWIRE 的AVR 器件中,有一个可编程的熔丝位DWEN,如果该熔丝被编程(且lockbits未被编程),则debugWIRE 功能被启用,AVR的RESET 引脚将被作为debugWIRE 功能使用,可与调试器进行debugWIRE仿真通信(此时,ISP 功能被禁用)。AVR芯片出厂时,DWEN熔丝位是未编程的,也即是说ISP 功能是使能的,debugWIRE 被禁用。使用ISP 功能时,通过调试器对debugWIRE熔丝进行编程使能,可启用debugWIRE功能;使用debugWIRE功能时,对通过调试器对debugWIRE熔丝禁止,可使能ISP 功能。
 

微信扫描二维码咨询