您现在的位置:首页 > 技术资料 | ![]() |
用ATmega8单片机设计串行编程器 通常进行单片机实验和开发,编程器是必不可少的。仿真、调试完的程序要借助编程器写入单片机的存储器中,随着单片机技术的发展出现了MTP(可多次编程)存储器技术和ISP(在系统可编程)技术,这样就可以省去昂贵的仿真器,只要通过计算机接口和一条串行下载线就可直接在目标芯片上编程。ATMEGA8就是一种具有MTP与ISP功能的单片机,他也是AVR单片机中价格性能比最高的单片机,因此研究他的串行编程特性对利用他的上述功能来开发应用单片机有很高的实用价值。 1 ATMEGA8的体系结构与主要性能特点 ATMEGA8是ATMEL公司在2002年推出的一款新型的AVR高档单片机,他的芯片内部集成了较大容量的存储器和丰富强大的硬件接口电路,具备AVR高档单片机MEGE系列的全部性能和特点。但由于采用了小引脚封装(为DIP28和TQFP/MLF32),所以价格仅和低档单片机相当,再加上AVR单片机的系统内在可编程特性,使得无需购买昂贵的仿真器,只需要一条具有编程器功能的串行下载线就可以进行单片机嵌入式系统的设计和开发。 ATMEGA8是一款采用低功耗CMOS工艺生产的基于AVR RISC(精简指令集)结构的8 b单片机。AVR单片机的核心是将32个工作寄存器和丰富的指令集连接在一起,所有的工作寄存器都与ALU(算术逻辑单元)直接相连,实现了在一个时钟周期内执行的一条指令同时访问(读写)2个独立寄存器的操作。这种结构提高了代码效率,使得大部分指令的执行时间仅为一个时钟周期。因此,ATMEGA8可以达到将近1 MIPS/MHz的性能,运行速度比普通的单片机高出10倍。 ATMEGA8的主要性能特点如下: (1)高性能、低功耗的8bAVR微控制器,先进的RISC精简指令集结构,130条功能强大的指令,大多数为单周期指令,32个8b的通用工作寄存器,工作在16MHz时具有16MIPS的性能。 (2)片内集成了较大容量的非易失性程序和数据存储器 8 kB的Flash程序存储器,可擦写次数大于10 000次;512B的E2ZRROM,擦写次数至少100 000次;支持可在线编程(ISP)和可应用自编程(IAP);可编程的程序加密位。 (3)丰富强大的外部接口性能 3个PWM通道,可实现任意16b以内的、相位和频率可调的PWM脉宽调制输出;6通道A/D转换;一个12C的串行接口,一个可编程的USART接口;一个支持主/从、收/发的SPI同步串行接口;2个带预分频的8b定时/计数器,1个带预分频的16b定时/计数器;带片内RC振荡器的可编程看门狗定时器。 (4)特殊的微控制器性能 可控制的上电复位延时电路和可编程的欠电压检测电路;内部和外部共18个中断源;5种休眠模式(空闲,ADC噪声抑制,省电,掉电,待命)。 2 串行编程器的设计 从上面的描述我们就对ATMEGA8有了一个总体的认识,ATMEGA8的在线可编程功能为单片机的设计和开发提供了极大的方便,工程人员可以编译完程序后直接通过编程器将程序写入Flash存储器(而无需昂贵的仿真器)。并且可以自己来设计编程器,下面就以ATMEGA8作为处理芯片来设计一个串行编程器,也通过这个应用的例子来介绍一下ATMEGA8的具体应用。 (1)硬件电路,串行编程器的电路原理图如图1所示。
(2)串行编程器的工作原理 ATMEGA8的同步串行接口SPI允许在几个AVR单片机之间,以与SPI接口协议兼容的方式进行高速的同步数据传输。因此可以把串行编程器的处理芯片设计为主机,目标芯片就作为从机,这样就可以实现2个单片机的数据传输,从而实现程序的烧写过程。数据由主机发送从机接收。向主机的SPI数据寄存器SPDR装入待发送数据的写操作,自动启动SPI时钟发生器,于是该数据便在时钟脉冲的控制下开始逐位左移或右移。若设定最高位MSB先传送,主机的MSB将自MOSI(PB3)引脚输出,经从机的MOSI引脚进入其8b移位寄存器中,占据最低位LSB的位置。同时,从机的MSB由MISO(PB4)引脚移出,通过主机的MISO引脚进人到主机移位寄存器中,作为他的LSB位。这样8个时钟脉冲后,主机SPI移位寄存器中的内容就完全送给了从机。图2为主从机通信流程图。
(3)具体的工作过程 编程器的软件分为两部分,即上层程序和下层程序。上层程序在PC机上运行,用VB编写,来完成HEX文件的发送。下层程序用C语言编写,可通过下载线下载到ATMEGA8(主机)中;完成接收HEX文件和写人、读及擦除功能。 写芯片 下层程序将HEX文件传送给ATMEGA8。HEX文件的文件结构是由汇编程序的指令并用ASCII码表示的文本文件,他由若干数据帧组成,每帧的结构顺序为;数据长度、高位地址、低位地址、数据属性、数据及校验和。因为ASCII码是一个4位的二进制数,每2个ASCII码合起来才能用1B表示,所以要先把HEX文件转换后,再发送。发送过程中对数据的校验和是由每一帧的校验和与该帧的最后两位相比较完成的。下层程序完成接收HEX文件和写目标芯片,其过程为先接收HEX文件存储于数据缓冲区,根据地址将数据写入目标芯片的存储器中,数据存放以高位地址、低位地址和数据为顺序存放,所以在读取时要严格按顺序读取。写程序的流程图如图3所示。
读芯片 读芯片的过程是通过编程器将目标芯片中的数据送PC机,PC机收到数据后保存在一个文件里。下层用C编写控制主机从从机读取数据,上层用VB实现,调用MSCOMM和COMMDIAI。即可完成对数据的接收及存储。读芯片的流程图如图4所示。 在数据的传送过程中,要绝对保证数据不丢失。通常采用2种方法:一种是延时,即写人数据后等待一段时间再写入下一个数据;另一种是采用数据校验技术,就是在写人数据后再读数据然后判断是否正确写人。但是这两种方法都存在缺陷,第1种时间太长并且不能保证写入数据的完全正确,第2种方法当要写入的数据和程序存储器的原始数据相同时就判断失效。可以把这两种方法有机地结合起来,从而保证数据不丢失。具体的过程如下: 当向Flash的某一地址写入数据时,当一个数据写入完毕,允许写下一个数据时,读取这一地址的数据,如果读到的数据不是0xFF(程序被擦除后,存储单元里的数据都为0xFF),就再继续接着向存储器里写数据,如果读到的数据是0xFF,就再重新写数据再校验。但是当要向存储器里写的数据正好是0xFF时,用这种方法就出错,这时可以通过程序控制在检验到读出数据为0xFF时,再连续实行2次这样的操作,如果读出数据还是0xFF,就采取延时的方法处理后,再接着进行对Flash的操作。 擦除芯片 对芯片擦除就是对芯片重新固化。可以通过控制编程引脚高低电平来实现,但是加控制信号时间太短的话,无法擦除干净,如果过长就容易烧坏芯片。其实擦除的结果是所有地址里的数据都为0xFF,这样也就是说可以通过向存储器里写0xFF操作来实现擦除,本设计采取这种方法就避免了因为选择控制信号时间不合适而导致的一些问题。 3 结 语
|