这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 用下载电缆实现单片机的ISP编程

共1条 1/1 1 跳转至

用下载电缆实现单片机的ISP编程

助工
2014-10-20 21:11:53     打赏
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 小结


下载电缆为我们提供了深入芯片内部的触手。通过JTAG标准协议,我们可以用下载电缆检查芯片焊接连通性、重新配置可编程器件、下载程序固件以及调试处理器的运行。


小到8位单片机AT89S5X、AVR的串行编程,可编程器件MAX7000的配置;大到32位嵌入式处理器的调试,上万门FPGA芯片的配置都可以见到下载电缆的身影。例如,ARM使用下载电缆的JTAG仿真可以通过EmbeddedICE接口实现对ARM的开发调试,或者使用ARM的边界扫描特性为嵌入式系统板下载启动程序等等。


目前下载电缆的使用越来越多,各个厂商分别推出了自已的符合JTAG标准的芯片或者是使用ISP技术的新产品。与此同时,下载电缆的种类也非常多,大多数的区别仅在于并口信号与JTAG信号的对应关系不同。往往有时候开发一个产品,要用到很多种不同的电缆。我们希望可以使用一种标准的下载电缆来实现所有JTAG应用;或者是通过一个计算机程序可以通过配置文件来使用各种下载电缆。在我们的BLMVISP软件中,就支持了现有的两种电缆。


使用ISP技术可以大大加快硬件开发速度。下载电缆与计算机软件的配合使用也可以降低开发成本,非常适合个人爱好者与初学者使用。


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]