1
嵌入式设计应用
单片机开发与应用已渗入我们生活中各个方面,其中一个应用就是对内存较小的芯片大批量烧录,就有了性能稳定的高速编程器诞生以满足各大厂商实现大量芯片烧录的目标。目前市场上运用最广泛的编程器是基于89C51的,但其功能过于单一,不能满足日益发展的市场需求。本文提出一种采用MSP430F149单片机作为CPU控制核心的编程器。与51单片机编程器相比,MSP430单片机编程器增加了I2C存储模块,可无需电脑利用该编程器对芯片进行烧录,使烧录过程更方便、快捷。
基于MSP430的单片机编程器以MSP430F149为核心,主要由键盘、显示、串口、烧写、电平转换、电源和存储模块构成。系统结构框图如图1所示。
图1系统结构框图
编程器核心模块选用超低功耗MSP430F149系列单片机[1]。图2是MSP430F149最小系统原理图。Y1、Y2是晶振模块,RST接入复位模块,P1为数据传输口,P3.0~P3.4为高4位地址输出,P4为低8位地址输出,P5.3、P5.4与键盘连接,P2、P5.0~P5.2与液晶显示器连接,P3.6、P3.7与存储器相连。
图2 MSP430F149最小系统原理图
MSP430F149提供信号电平与上位机工作电平不一致,因此要通过MAX232进行电平转换。MAX232芯片是依照RS-232标准串口设计的接口电路,用+5V单电源供电。MAX232接MSP430F149和上位机之间进行通讯。
如图3基于MSP430编程器的I2C存储模块为EEPROM存储器,选用内存为8KB的AT24C16芯片。MSP430F149和AT24C16之间用一根数据线SDA、一根时钟线SCL连接。存储器中存放将要烧写到51单片机的程序,以满足脱机要求。
图3 存储模块连接图
键盘模块选用PS2键盘,具有通用可靠、使用连线少(仅使用2根信号线)特点得到广泛使用。在烧录中主要起功能选择作用,图4是键盘模块连接图。
图4 键盘模块电路原理图
显示模块选用1602液晶显示,显示被烧写芯片相关参数,如芯片型号、编程电压及读、写、擦除等。图5是显示模块连接图,MSP430F149根据键盘控制命令将编程器当前状态和数据显示出来。
图5 显示模块电路原理图
电源给MSP430F149芯片提供3.3V工作电压,也给烧录的51芯片提供一个12V编程电压。如图6,+5V电源通过ASM1117-3.3V进行电压转换产生3.3V电压提供给MSP430F149单片机,另外+5V电源直接输入到51芯片以及产生12V编程电压。
图6 电源模块连接图
编程模块中89C51是被烧写芯片,P0.0~P0.7为数据输入,P1.0~P1.7为低8位地址输入,P2.0~P2.3为高4位地址输入而P3.6、P3.7作为功能控制端口[2]。如图7在51单片机外围链接4片74LVC8T245实现3.3V向5V电压变换。DIR对信号传输方向控制,当该引脚为高电平时数据总线传输方向由A1~A8到B1~B8,为低电平时则反向传输。对连接地址和控制的3片74LVC8T245而言DIR低电平有效。
图7 89C51单片机编程连线图
基于MSP430单片机编程器具有读、写、校验和擦除的功能。这些功能可以在联机状态下通过命令方式操作,也可以在脱机状态下通过键盘控制完成,编程数据和命令传送通过上下位机通讯实现。
如图8编程器进入中断状态等待接收数据,一旦接收到数据判断是否为“命令”,若是则判断否是“检查”、“擦除”、“读”或“写”命令,若是其中命令之一,编程器就执行相应操作。否则返回串口中断接收状态等待数据到来。若接收的不是“命令”则判断是否为“数据”,若是就将数据储存到E2PROM,否则编程器返回中断接收状态。
图8 下位机串口通讯及联机编程程序流程图
如图9编程器读取键盘输入命令,若输入“Check#”则对51单片机Flash进行检查,全为FFH则LCD会显示“OK”,还显示单片机ID、编程电压等信息,否则显示未擦除单元地址;若输入“Erase#”编程器会擦除51单片机Flash中内容并在LCD上显示“完成”;若输入“Read#”编程器会读51单片机Flash中内容到RAM中并在LCD上显示;若输入“Write#”编程器会把E2PROM存储内容写入51单片机Flash,并在LCD上显示“完成”;若输入是“Verify#”编程器会对写入Flash中的内容进行检查是否与E2PROM内容一致,若是在LCD上显示“OK”,否则显示错误FLASH单元地址;若输入“Auto#”编程器就顺序执行擦除、检查、写和校验操作并返回等待键盘输入命令。
图9 下位机脱机编程软件流程图
编程器的读、写、擦除等功能是由如下主要函数来实现。
#include“common.h”
voidInit_Read(void){…}//读数据初始化
charReadByte(intaddr){…}//read数据
voidEraseByte(intaddr){…}//erase数据
voidCheckByte(intaddr){…}//检查数据是否为空
voidVerifyByte(intaddr,intaddr1){…}//校验数据
voidInit_Write(void){…}//写数据初始化
voidWriteByte(intaddr,chardat){…}//write数据
charReadID(intaddr){。。。}//读芯片ID
voidmain(void)
{charUART1_RX_Temp[10];
nRev_UART1=0;
nSend_TX1=0;
write_Flag=0;
dat_Flag=0;
dat_buf=0;
nDAT_BUF_Valid=0;
_DINT();//关闭中断
Init_CLK();//初始化时钟
Con_Port_Init();//初始化端口
CT_OE_Enable();
Init_UART1();//初始化串口1
_EINT();//打开中断
ResetSM();
for(;;)//进入处理循环
{…//各种编程命令;读键盘及LCD显示等
}
通过基于MSP430单片机的编程器设计原理和思路的研究,实现对89C51等系列芯片编程操作。实际测试,该编程器能够快速、独立进行芯片编程工作,大大提高烧录芯片的速度,使其有更高的工作效率和较好的稳定性。
全部0条评论
快来发表一下你的评论吧 !