用下载电缆实现AT89S5X的ISP编程_单片机论文
关键词:下载电缆 串行编程 at89s5x isp
引言
随着电子技术的日益发展,芯片的规模越来越大,封装日趋小型化,相应的对系统板级调试困难也在加大。ieee制定了标准测试端口与边界扫描的标准ieee std 1149.1,这就是jtag接口协议。jtag接口通过tck、tdi、tdo、tms四根信号线,以串行模式为系统提供了对复杂芯片的各引脚连通性测试,进步还能实现对可编程芯片的配置与处理器芯片的调试等等。下载电缆就是一种使用计算机的并行端口通过软件的仿零点实现jtag接口协议,访问可编程芯片的廉价工具。本文使用的下载电缆是altera公司为其可编程逻辑器件开发的byteblastermv电缆。isp(在系统可编程的简称)是最先由lattice公司提出的一种技术,是通过同步串行方式实现对其可编程逻辑器件的重配置。isp与jtag的接口协议很相像,只是后者形成了标准。isp现在已经成为一种概念,它的提出改变了传统硬件系统开发的流程,大大方便了开发者,加快了开发速度。现在大多数的可编程器件(fpga、cpld、dsp、mcu……)都支持isp特性。单片机也不例外,atmel公司推出的at89s系列51单片机也符合isp特性。
1 下载电缆的硬件
要实现jtag接口协议可以使用专用的ic,如74lvt8980、74lvt8990,它与mcu配合可以提供高速的jtag串行访问,成本较高。下载电缆则是实现jtag接口协议的廉价方案。它仅命名用74hc244做线路驱动,由计算机的并行端口引出i/o作为tck、tdi、tdo、tms等信号线。由于并口在spp模式下共有3个端口——数据输出端口、控制输出端口、状态输入端口,各种下载电缆究竟从那个端口引出jtag信号线几乎都不相同,图1、图2是两种下载电缆的原理图。
并口简介:
计算机的并行端口工作在spp模式下,对它的控制是通过数据输出端口、控制输出端口、状态输入端口来实现的。
并行口有25个引脚,其中包括8位数据线、5位状态线、4位控制线。
数据端口(378h):d0~d7用于数据输出。
状态端口(379h):*s7(busy)、s6(nack)、s5(pe)、s4(select)、s3(nerror)。
控制端口(37ah):*c3(nselin)、s2(ninit)、*c(anutofeed)、*c0(nstrobe)。
()(端口地址是缺省的lpt1设置;*表示此引脚有反向器)
表1为并行端口定义。对应原理图有:
altera的下载电缆
tck、tdi、tms、tdo分别对应d0、d6、d1、*s7;
atmel的电缆
tck、tdi、tms、tdo分别对应*c0、d0、*c3、s6。
表1 并行端口定义表
引脚号 | 名 称 | 数据位 |
1 | nstrobe | *c0 |
2 | d0 | d0 |
3 | d1 | d1 |
4 | d2 | d2 |
5 | d3 | d3 |
6 | d4 | d4 |
7 | d5 | d5 |
8 | d6 | d6 |
9 | d7 | d7 |
10 | nack | s6 |
11 | busy | *s7 |
12 | pe | s5 |
13 | select | s4 |
14 | auto feed | *c1 |
15 | nerror | s3 |
16 | ninit | c2 |
17 | nselin | *c3 |
18~25 | gnd | gnd |
2 下载电缆的编程方法
用计算机控制下载电缆实现jtag协议,就是对并口3个i/o端口的读写操作,用0-1的变化来模拟jtag时序。在win98和win2000环境下读写i/o,需要驱动程序。本文使用driverlinx port i/o driver(可以从www.sstnet.com下载)来实现i/o端口访问。安装dlportio以后,通过调用dlportio.dll动态连接库中的
uchar dlport_api d1portread portuchar(in ulong port);
void dlport_api d1portwrite portuchar(in ulong port,in uchar value);两个函数就可以访问位于378h、379h、37ah(这是缺省的lpt1设置)的3个并口i/o端口。程序段1实现了对altera下载电缆的一次电平赋值:
程序段1
altera下载电缆电平赋值函数
void cavrispdlg::setbit(){
unsigned char value=0;
if(!m_tck)value|=0x01;
if(!m_tms)value|=0x02;
if(!m_tdi)value|=0x40;
dlportwriteportuchar(0x378,value);
value=dlportreadportuchar(0x379);
if(value & 0x80)m_tdo=0;
else m_tdo=0;
}
通过以上程序依次改变jtag各接口i/o的电平状态,模拟jtag协议的时序,就可以访问支持jtag标准的各种芯片。
3 isp协议的解析与实现
对at89s5x系列单片机isp编程不使用jtag协议,而使用spi同步串行接口协议,如图3所示。
针针这种8位spi接口协议,我们使用数组来模拟时序:
时钟信号固定为unsigned char sck[19]={0,0,1,0,1,0,1,0,1,0,10,1,0,1,0,1,0,1,0,0};
输出的数据信号由程序实现情况自动生成数组unsigned char mosi[19];
输入的数据根据读入的信号生成数组unsigned char miso[19];
再调用上文的setbit()函数,依次发送19位的jtag接口i/o状态,同时读入返回信号,即完成一次对at89s5x芯片的spi单字节访问。
在单字节访问基础上,参考atmel公司的at89s5x数据手册的串行编程指令表中的指令格式,就可以实现isp了。
表2为at89s51串行编程指令表。
表2 at89s51串行编程指令集
指 令 | 指 令 模 式 | 说 明 | |||
第1字节 | 第2字节 | 第3字节 | 第4字节 | ||
编程使能 | 10101100 | 01010011 | xxxxxxxx | xxxxxxxx | 使能串行编程 |
芯片擦除 | 10101100 | 100xxxxx | xxxxxxxx | xxxxxxxx | 擦除程序存储顺 |
读程序字节 | 00100000 | xxxxa11~a8 | a7~a0 | d7~d0 | 字节模式读程序 |
写程序字节 | 01000000 | xxxxa11~a8 | a7~a0 | d7~d0 | 字节模式写程序 |
写保护位 | 10101100 | 111000b1b2 | xxxxxxxx | xxxxxxxx | 写保护位 |
读保护位 | 00100100 | xxxxxxxx | xxxxxxxx | xxlb3~lb1xx | 读当前保护位 |
读标志字节 | 00101000 | xxxa5~a1 | a0xxxxxx | 标志数据 | 读取标志数据 |
读程序页 | 00110000 | xxxxa11~a8 | 数据0 | 数据1…255 | 页模式读程序 |
写程序写 | 01010000 | xxxxa11~a8 | 数据0 | 数据1…255 | 页模式写程序 |
注:①串行编程要在rst端接高电平情况下实现;②x表示此位关心;③a11~a0是要访问字节地址;④d7~d0是读写的数据;⑤b1、b2是保护位;⑥lb3~lb1表示3种状态。
针对at89s51单片机,其标志字节为:(00h)1eh、(02h)51h、(04)06h.
程序段2将得到at89s51单片机的标志字节。(其中spicomm()为spi单字节访问函数)。
程序段2
获得at89s51单片机标志字节的程序段
cstring str;
for(addr=1;addr<3;addr++){
m_comm=0x28;
spicomm();
m_comm=addr;
spicomm();
m_comm=0;
spicomm();
m_comm=0;
spicomm();
str.format(“0x%02x”,m_dat);
m_out+=str;
}
图4是at89s51进行串行编程时的硬件原理图。
4 小结
下载电缆为我们提供了深入芯片内部的触手。通过jtag标准协议,我们可以用下载电缆检查芯片焊接连通性、重新配置可编程器件、下载程序固件以及调试处理器的运行。
小到8位单片机at89s5x、avr的串行编程,可编程器件max7000的配置;大到32位嵌入式处理器的调试,上万门fpga芯片的配置都可以见到下载电缆的身影。例如,arm使用下载电缆的jtag仿真可以通过embeddedice接口实现对arm的开发调试,或者使用arm的边界扫描特性为嵌入式系统板下载启动程序等等。
目前下载电缆的使用越来越多,各个厂商分别推出了自已的符合jtag标准的芯片或者是使用isp技术的新产品。与此同时,下载电缆的种类也非常多,大多数的区别仅在于并口信号与jtag信号的对应关系不同。往往有时候开发一个产品,要用到很多种不同的电缆。我们希望可以使用一种标准的下载电缆来实现所有jtag应用;或者是通过一个计算机程序可以通过配置文件来使用各种下载电缆。在我们的blmvisp软件中,就支持了现有的两种电缆。
使用isp技术可以大大加快硬件开发速度。下载电缆与计算机软件的配合使用也可以降低开发成本,非常适合个人爱好者与初学者使用。
有兴趣的读者可以下载blmvisp演示版的vc源程序压缩包(demo_blmvisp.zip),以便参考;也可以访问://51kaifa.nease.net或者email:blmv@eyou.com。