用下载电缆实现AT89S5X的ISP编程
用下载电缆实现AT89S5X的ISP编程 引言 并口简介:计算机的并行端口工作在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为并行端口定义。对应原理图有:
TCK、TDI、TMS、TDO分别对应D0、D6、D1、*S7;
Atmel的电缆 TCK、TDI、TMS、TDO分别对应*C0、D0、*C3、S6。
表1 并行端口定义表 程序段1 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串行编程指令集 注:①串行编程要在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;addr3;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 小结