用ATmega8单片机设计串行编程器
XTAL1时钟周期)以保证SCK的低电平,这可以通过软件来实现。PB3(MOSI)引脚用于将程序送入从机中。数据在SCK的上升沿被输入,从机的 Reset被拉低后,总是将他的MOSI设为上拉禁止的输入状态,用于从主机接收数据。当从从机中读取数据时,数据在SCK的下降沿输出。设计硬件时要保证从机的Reset,SCK,MOSI,MISO这4根线能被编程器自由地置高置低,否则不可能进行在片编程。具体的命令字格格式可参照ATmega8 manual中所给出的串行编程命令表。
(4)软件设计
编程器的软件分为两部分,即上层程序和下层程序。上层程序在PC机上运行,用VB编写,来完成HEX文件的发送。下层程序用C语言编写,可通过下载线下载到ATmega8(主机)中;完成接收HEX文件和写入、读及擦除功能。
写芯片下层程序将HEX文件传送给ATmega8。HEX文件的文件结构是由汇编程序的指令并用ASCII码表示的文本文件,他由若干数据帧组成,每帧的结构顺序为:数据长度、高位地址、低位地址、数据属性、数据及校验和。因为ASCII码是一个4位的二进制数,每2个ASCII码合起来才能用1 B表示,所以要先把HEX文件转换后,再发送。发送过程中对数据的校验和是由每一帧的校验和与该帧的最后两位相比较完成的。下层程序完成接收HEX文件和写目标芯片,其过程为先接收HEX文件存储于数据缓冲区,根据地址将数据写入目标芯片的存储器中,数据存放以高位地址、低位地址和数据为顺序存放,所以在读取时要严格按顺序读取。写程序的流程图如图3所示。
读芯片 读芯片的过程是通过编程器将目标芯片中的数据送PC机,PC机收到数据后保存在一个文件里。下层用C编写控制主机从从机读取数据,上层用VB实现,调用MSCOMM和COMMDIAL即可完成对数据的接收及存储。读芯片的流程图如图4所示。
在数据的传送过程中,要绝对保证数据不丢失。通常采用2种方法:一种是延时,即写入数据后等待一段时间再写入下一个数据;另一种是采用数据校验技术,就是在写入数据后再读数据然后判断是否正确写入。但是这两种方法都存在缺陷,第1种时间太长并且不能保证写入数据的完全正确,第2种方法当要写入的数据和程序存储器的原始数据相同时就判断失效。可以把这两种方法有机地结合起来,从而保证数据不丢失。具体的过程如下:
当向Flash的某一地址写入数据时,当一个数据写入完毕,允许写下一个数据时,读取这一地址的数据,如果读到的数据不是0xFF(程序被擦除后,存储单元里的数据都为0xFF),就再继续接着向存储器里写数据,如果读到的数据是0xFF,就再重新写数据再校验。但是当要向存储器里写的数据正好是 0xFF时,用这种方法就出错,这时可以通过程序控制在检验到读出数据为0xFF时,再连续实行2次这样的操作,如果读出数据还是0xFF,就采取延时的方法处理后,再接着进行对Flash的操作。
擦除芯片 对芯片擦除就是对芯片重新固化。可以通过控制编程引脚高低电平来实现,但是加控制信号时间太短的话,无法擦除干净,如果过长就容易烧坏芯片。
其实擦除的结果是所有地址里的数据都为0xFF,这样也就是说可以通过向存储器里写0xFF操作来实现擦除,本设计采取这种方法就避免了因为选择控制信号时间不合适而导致的一些问题。
3 结 语
本文介绍了ATmega8这款AVR高档单片机,并论述了他的串行下载特性和串行编程器的工作原理;同时提出了新的串行编程数据校验方法和程序擦除方法。MTP(可多次编程)和ISP(在系统编程)技术给单片机应用系统开发提供了很大的方便和灵活性,利用这两种技术可以直接在电路板上反复进行下载调试,甚至可以实现远程在线升级,因此对单片机编程特性的研究有很高的实用价值。
参考文献
[1] 马潮,詹卫前,耿德根.ATmega8原理及应用手册[M].北京:清华大学出版社,2003.
[2] 李勋,耿德根.AVR单片机应用技术[M].北京:北京航空航天大学出版社,2002.
[3] 石东海.单片机数据通信技术从入门到精通[M].西安:西安电子科技大学出版社,2002.
[4] 张俊涛.具有ISP功能的单片AT89S8252[J].现代电子技术,2001,(8).
[5] 马书雷.AVR单片机编程特性的应用研究[J].微型机与应用,2000,(9).
- MSP430的编程器和仿真器的区别(11-30)
- 把EasyPro51编程器的源代码修改在SDCC上,编译运行通过(11-29)
- 编程器P800的在板编程接口设计技巧(07-28)
- 基于CH340T的STC89C52RC编程器设计(03-06)
- 一种基于ATmega8单片机的串行编程器(12-09)
- 一种基于CH340T 的STC89C52RC 编程器设计(11-04)