SI-PROG编程器的工作原理及其程序设计
- 格式:doc
- 大小:343.50 KB
- 文档页数:4
A VR 单片机与GCC 编程使用方法WINA VR 是一个ATMEL A VR 系列单片机的开发工具集,它包含GNU C 和C++编译器GCC。
1.1 一个简单的例子为了先有一个感性的认识,我们首先看一下如下一段程序和它的编译、链接过程。
文件demo1.c :#includeint main( void ){ unsigned char i, j, k,led=0; DRB=0xff;while (1) { if(led) PORTB|=0X01; ese RTB&=0XFE; led=!led;for (i=0; i<255; i++) fr(j=0; j<255;j++)k++;}}//延时这是一个使接在PB0 口的LED 发光管闪烁的程序。
有了源程序文件demo1.c,我们就可以编译它了。
通过点击菜单开始->运行在弹出的对话框中输入― command ‖ ,来打开控制台窗口,并在命令行输入:avr-gcc –mmcu=at90s2313 –c demo1.c如图1-1 所示。
必需告诉编译器程序的mcu 类型,这是我们通过命令行选项-mmcu 来指定的,我们指定的器件为at90s2313。
-c 选项告诉编译器编译完成后不链接。
图1-1 控制台窗口编译完成后在工作目录新生成了一个文件:demo1.o ,它是我们的目标文件,我们再使用链接器将它链接成可在器件上执行的二进制代码。
在命令行输入:avr-gcc –mmcu=at90s2313 –O demo1.elf demo1.o之后我们会在工作目录看见链接器生成的demo1.elf。
gcc 的链接后生成的文件为ELF 格式,在命令行我们通常用.elf 指定其扩展名。
ELF 格式文件除了包含不同存储器的二进制格式内容外还包含一些调试信息,所以我们还要借助一个有用工具avr-objcopy 来提取单片机程序存储器内容。
命令行输入:avr-objcopy -j .text -j .data -O ihex demo1.elf demo1.hexgcc 把不同类型的数据分到不同的段落,相关程序存储器的段有.text 和.data ,我们用选项–j 指定了要提取的段。
SI-PROG编程器的工作原理及其程序设计时间:2009-06-16 13:03:06 来源:现代电子技术作者:安郁宽1,李宏2,闫鹏1 1.滨州医学院物理教研室2摘要:介绍SI-PROG编程器的工作原理,利用PC机串口UART芯片实现单片机的ISP下载。
PC机串口8250芯片中SOUT,DTR,RTS,CTS四个引脚的电平可通过其内部的几个寄存器分别进行控制或读取,利用引脚可实现单片机的ISP下栽。
介绍了8250与单片机之间通信信号的逻辑关系以及电平转换,分析了接收器的阈值电压的特点,给出了使用SI-PROG编程器的条件。
最后,以AVR单片机为例介绍了下载程序设计。
结果表明,利用PC机串口UART芯片可以实现对AVR单片机的ISP下载,其硬件电路和软件设计都很简单。
关键词:S1-PROG编程器;程序设计;UART;AVR单片机SI-PROG编程器为PonyProg 2000软件中使用的一种ISP编程器,该编程器利用PC机串口电路的异步通信控制器UART实现AVR,PIC,AT89等单片机的ISP编程。
虽然该编程器不为Atmel的AVRStudio 所支持,但是其硬件电路简单,成本低,便于制作,适于初学者进行学习和简单开发。
下面以AVR单片机为例,介绍SI-PROG编程器的工作原理及其程序设计。
l SI-PROG编程器的工作原理1.1 电路组成图1为SI-PROG串口编程器的工作原理图。
电路分为PC机串口电路、SI-PROG编程器和目标机3部分。
编程器通过9针D型连接器DB9与PC机串口连接,通过10针连接器J1与目标机连接,电路在文献[4]的基础上做了适当的简化。
J1引脚定义与Atmel的STK200下载线相同。
1.1.1 PC机串口电路及SI-PROG编程器PC机串口电路由U1~U4组成。
8250(U1)为异步通信控制器UART,SN75150(U2,U3)为驱动器,SN75154为线接收器。
U2,U3,U4实现8250引脚上TTL电平与串口DB9上RS 232电平转换。
SI-PROG 编程器则完成DB9上RS 232电平与目标机上TTL电平的转换。
1.1.2 串行SPI接口编程器通过目标机的SPI接口对其片内的FLASH程序存储器进行下载编程。
SPI接口由SCK,MOSI 和MISO等几条信号线组成。
下载编程的过程实际上是PC机与AVR的通信过程。
两者的关系是一种主从关系,PC机为主机,AVR为从机。
主机经MOSI引脚将串行数据发给从机,从机经MISO引脚将数据返回给主机。
SCK为串行时钟脉冲,由主机发往从机。
主机通过SCK脉冲控制与从机的数据传输。
图2为串行下载编程时序图。
单片机在SCK上升沿读取MOSI上的数据位,在SCK下降沿输出数据位到MISO。
1.2 信号的逻辑关系由图1可见,8250的11,33,32,36四个引脚分别通过编程器与AVR的RESET,MOSI,SCK,MISO 相连进行通信。
这4个引脚的电平可通过8250内部的3个寄存器进行设置或读取,如图3所示。
3个寄存器依次为线路控制寄存器(LCR)、Modem控制寄存器(MCR)和Modem状态寄存器(MSR)。
对于串口1,3个寄存器的端口地址一般为3FBH,3FCH和3FEH。
LCR的SB位、MCR的DTR位和RTS位分别控制11,33,32三脚的电平。
MSR的CTS位则反映了36脚的电平。
下面分析8250与AVR通信信号间的逻辑关系。
为了避免引起混乱,这里全部采用正逻辑描述。
1.2.1 RESET与SB位的逻辑关系线路控制寄存器LCR的D6位SB决定了8250的11脚的电平。
当SB=1时,11脚被强制拉到低电平,DB9的3脚为高电平。
当SB=O时,DB9的3脚为低电平。
逻辑关系在Q1上又反相一次。
因此,RESET 信号与SB位的逻辑关系为:RESET=SB (1)编程时只要通过OUT指令改变SB位的值,就可以控制RESET端的电平。
当8250复位后,SB=0,RESET=SB=1,RESET引脚为高电平。
1.2.2 MOSI,SCK信号与DTR,RTS位的逻辑关系MODEM控制寄存器MCR的D0位DTR控制着33脚的电平。
置DTR=1,则33脚DTR为低电平,是逻辑非关系。
U3相当于非门,故MOSI信号与DTR位的逻辑关系为:MOSI=DTR (2)类似的,SCK信号与MCR的D1位RTS的逻辑关系为:SCK=RTS (3)1.2.3 CTS位与MISO信号的逻辑关系MODEM状态寄存器(MSR)的D4位CTS反映了8250的36脚的电平,当CTS端为高电平时,CTS=O;反之CTS=1。
CTS位与CTS端是逻辑非关系。
因此,CTS位与MISO信号的的逻辑关系为:CTS=MISO (4)根据式(1)~式(4),下载编程时,设置或读取AVR的RESET,MOSI,SCK,MISO脚的电平问题就变成通过I/O指令设置或读取8250内部寄存器的SB,DTR,RTS,CTS位的问题。
1.3 SI-PROG编程器的电平转换根据RS 232标准,串口DB9上的两种电平分别为5~15 V和-5~-15 V。
编程器电路采用分立元件实现DB9上的RS 232电平与AVR的TTL电平间的转换。
1.3.1 RS 232到TTL电平的转换图1中,用限流电阻R3和4.7 V的稳压二极管Z2完成DB9的4脚上RS 232电平到J1的1脚上TTL 电平的转换。
5~15 V与-5~-15 V高低两种电平通过R3后将分别变成4.7 V和O V(实际为-O.7 V),符合TTL电平的要求。
类似的,限流电阻R4和4.7 V的稳压二极管Z1完成DB9的7脚上RS 232电平到J1的7脚上的TTL 电平的转换。
Q1,R1,R2接成反相器,DB9的3脚上的5~15 V与-5~-15 V两种电平分别使Q1处于饱和导通和截至状态,实现了RESET信号的电平转换。
1.3.2 TTL到RS 232电平的转换TTL到RS 232电平的转换由SN75154线接收器实现。
图4为SN75154的施密特电压传输特性曲线。
当阈值电压控制端T3接Vcc时,它工作在图4中曲线a状态,两个阈值电压分别为VIT-=-1.1 V和VIT+=2.2 V;当T3悬空时,它工作于图中曲线b状态,VIT-=-1.4 V,VIT+=2.2 V。
显然,对于后一状态,MISO引脚上的TTL电平信号可以通过U4到达8250,而前一状态则无法通过U4。
根据文献[2],长城0520 PC-XT机上SN75154的阈值电压控制端T3接到+5 V。
这样,SI-PROG编程器就不能工作。
计算机硬件发展到今天,UART-般均升级为16550,它与打印机并口、键盘控制器等电路一起集成于LPC芯片内,16550仍与8250相兼容。
驱动器和接收器也都集成到一个芯片内,如75232,75185。
这些芯片的接收器不再采用图4中曲线a那样的阈值电压,而改为与曲线b相接近的情况。
表1为3台PC 机阈值电压的实验测量结果。
表中,典型值为芯片数据手册中的数据,实验值为实验测量结果。
显然,3台PC机上,SI-PROG编程器都能正常工作。
2 下载程序设计根据式(1),用输出指令向3FBH端口写入40H,将使RESET端置低电平,写入00H,使RESET端置高电平;根据式(2),式(3)。
向3FCH端口写入数据,改变其D1位的数值,就可改变SCK端的电平,改变D0位的数值,即改变MOSI的电平;根据式(4),用输入指令读取3FEH端口,读取字节的D4位为MISO返回的数据位。
根据AVR单片机的串行下载算法,发送串行编程指令的操作步骤为:进入串行下载模式;发送编程使能指令;执行所需的读、写等操作指令,可执行一条,也可执行多条;退出串行编程模式。
(1)进入串行下载模式。
保持SCK端为低电平,给RESET端发送一个大于两个时钟周期的正脉冲,AVR 单片机便进入串行下载模式。
(2)发送串行编程指令。
根据图2,一个SCK时钟周期可分4个步骤:输出位数据到MOSI线,延时;令SCK由0变1,延时;读取MISO线上的数据位;令SCK由1变0,延时。
前两个步骤写一位数据到AVR,后两个步骤则从AVR读取1位数据。
8个SCK时钟周期写1个字节,同时读一个字节。
AVR单片机每条编程指令均由4个字节组成。
根据上述过程,将4个字节的编程指令依次写入到AVR,同时读取返回的4个字节数据。
(3)退出串行编程模式。
将RESET端置高电平,AVR单片机退出编程模式。
3 结语根据上述分析,采用VC++6.O编程成功地对ATtinyl3和ATmegal6两种芯片的FLASH进行了芯片擦除、读、写以及对熔丝位的读、写等操作。
注意编程时需要解决Windows NT/2000,/XP操作系统下访问I/O端口的技术问题。
使用SI-PROG编程器,必须满足两个条件:(1)串口的UART芯片要与8250兼容;(2)电平转换芯片接收器的阈值电压要介于TTL高、低两种电平之间。
多数PC机所配置的串口都能满足上述两个条件。
某些早期的PC机有可能与PC/XT机类似,不满足条件(1)。
目前,家用笔记本电脑上一般不再配置串口。
这样,SI-PROG编程器在某些PC机上不能使用。
然而,SI-PROG编程器仍有一定的使用空间。
毕竟LISB接口的编程器价格较高,而一些商用笔记本电脑中取消了并口但保留着串口,并口编程器又不能用。
而多数台式机上一般仍配置有串口。