EPP接口协议的原理及实现PC与单片机系统间高速传输的电路设计

时间:2020-04-08

  前言

  单片机系统中常常需要具备与PC机通信的功能,便于将单片机中的数据传送到PC机中用于统计分析处理;有时又需要将PC机中的数据装入单片机系统中,对单片机程序进行验证和调试。目前常用的通信方式是串行通信,但传输速率太低,以9600bps计算,传输1MB至少需要10min(分钟)以上。并行通信克服了串行通信传输速率低的缺点。标准并行口SPP(Standard Parallel Port)方式实现了由PC机向外设的单向传输,但实现PC机接收外设发送的数据则非常麻烦;而增强型并行口EPP(Enhanced Parallel Port)协议却很好地解决了这一问题,能够实现稳定的高速数据通信。

  一、EPP接口协议介绍

  EPP协议初是由Intel、Xircom、Zenith三家公司联合提出的,于1994年在IEEE1284标准中发布。EPP协议有两个标准:EPP1.7和EPP1.9。与传统并行口Centronics标准利用软件实现握手不同,EPP接口协议通过硬件自动握手,能达到500KB/s~2MB/s的通信速率。

  1.EPP引脚定义EPP引脚定义如表1所列。

 

  2.EPP接口时序

  EPP利用硬件自动握手实现主机与外设之间的高速双向数据传输,软件只须对相应端口寄存器进行读/写操作。

  (1)EPP写操作时序如图1所示。

  CPU实现向外设写数据的操作步骤如下:

  ①程序对EPP数据寄存器执行写操作;

  ②nWrite置低;

  ③CPU将有效数据送到数据总线上;

  ④nDStrb(nAStrb)变低(只要nWait为低);

  ⑤主机等待nWait变高,确认数据发送成功;

  ⑥主机等待nWait变高,确认数据发送成功;

  ⑦EPP写周期结束。

  (2)EPP读操作时序如图2所示。

  CPU实现从外设读数据的操作步骤如下:

  ①程序对相应EPP端口寄存器执行读操作;

  ②nDStrb(nAStrb)置低(如果nWait为低);

  ③主机等待nWait为高,确认数据发送成功;

  ④主机从并行口引脚读取数据;

  ⑤nDStrb(nAStrb)置高;

  ⑥EPP读操作周期结束。

  3.EPP端口寄存器EPP接口除了保留SPP的3个端口寄存器以外,还新增了5个端口寄存器,如表2所列。

  WAIT:Wait状态位(1有效);

  INTR:中断请求状态位(1有效);

  USER1~USER3:用户自定义;

  TMOUT:保留(EPP1.7)超时标志位(EPP1.9)。EPP控制端口寄存器。

  EPP接口有EPP1.7标准定义,由于硬件厂商的原因,EPP现有两个标准:EPP1.7和EPP1.9,可以在BIOS/外围设备/并行口(BIOS/Peripheral Setup/Parallel Port Mode)方式中进行设置。两者有如下不同点:

  (1)EPP状态端口寄存器的位bit0,在EPP1.9中定义为TMOUT。在EPP操作时序中,如果PC机数据(地址)选通信号变低后,且在10μs时间内,外设未能将nWait置为低,则TMOUT置为1,表示延时。

  (2)EPP1.9标准中,只有当nWait为低时,才能开始一个操作周期;但在EPP1.7中,无论nWait状态如何,nAstrb(nDstrb)都会被置低,从而开始一个新的数据(地址)操作周期。

  二、EPP接口传输数据的一个实例

  在某单片机系统中,须要将单片机系统中数据存储器的大量数据传输到PC机中进行分析处理。EPP接口(采用EPP1.7标准)硬件电路及软件流程图如图3~图5所示。

  GAL译码电路方程式为/O1=/I1*/I2*/I3*I4*/I5,EPP接口选通地址为2000H。当单片机执行如下指令:

  MOV DPTR,#2000H

  MOVX @DPTR,A

  就将寄存器A中的数据锁存到数据总线上,便于PC机利用EPP接口进行读操作。

  C语言例程:

  #define SPPDATA 0x0378 //定义各寄存器地址

  #define SPPSTAT 0x0379

  #define SPPCNTL 0x037A

  #define EPPADDR 0x037B

  #define EPPDATA 0x037C

  #include

  FILE *fp;

  Int data;

  Long i;

  int k;[page]

  fp=fopen(filename,“wb”); //打开要存储数据的文件

  outportb(SPPCNTL,0x24);

  //向控制端口发00100100代码,初始化为读操作模式for(i=0;i《524288;i++)

  {

  while(!((inportb(SPPSTAT))&0x80))

  //查询是否发送完毕

  {}

  data=inportb(EPPDATA); //读数据

  fputc(data,fp); //将数据存入文件

  }

  fclose(fp); //关闭文件

  单片机汇编语言程序为:

  FLAG1 BIT P1.7 ;标志位

  FLAG2 BIT P3.4

  STADD EQU 0000H ;要传输数据段的起始地址

  NUM EQU FFFFH ;要传输数据端的字节个数

  COMMUN:MOV DPTR,#STADD

  COMM1:MOVX A,@DPTR

  PUSH DPH

  PUSH DPL

  MOV DPTR,#EPP_CE

  MOVX @DPTR,A

  POP DPL

  POP DPH

  SETB FLAG1 ;将P1.7置高

  CLR FLAG2 ;将P3.4置低

  JB FLAG1,$;查询P1.7为低,即nDStrb为低,表示PC读操作已完成

  SETB FLAG2 ;将P3.4置高

  SETB FLAG1 ;将P1.7置高

  INC DPTR

  CJNE NUM,COMM1 ;循环NUM次

  RET

  实际应用该接口电路,能实现1MB/s的传输速率,并且性能稳定可靠。

  如果应用EPP1.9标准,硬件电路不用变动,软件中可以省略对nWait进行判断的环节,速率能接近2MB/s。

  结束语

  本文系统介绍了EPP接口的原理,并且给出了一个利用EPP接口实现PC与单片机系统间高速传输的实例。EPP接口协议解决双向高速数据传输的难题,在智能测量、自动控制、数据传输等领域必将得到广泛的应用。

上一篇:破解MOSFET数据表(五)——开关参数
下一篇:利用硬件监听总线状态的方法实现CSMA/CD的多主式RS485总线设计

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料