论文作者:曹琼 蔡淮 程焱 林敏
摘要:文章简要介绍了EPP并行口及CAN独立控制器s3^1000。并深入研究PC对SJAl000的读写。根据读写时序的产生,设计了两套硬件方案。同时。结合在实践中遇到的问题,指出了一些在CAN总线协议使用上需要注意的地方。
关键词:EPP并行口 CAN总线 SJAl000 网络适配卡
利用EPP并行口实坝PC机之间通信的CAN总线设计
西南交通大学计算机与通信工程学院曹琼 蔡淮 程焱 林敏
摘要文章简要介绍了EPP并行口及CAN独立控制器s3^1000。并深入研究PC对SJAl000的读写。根据读写时序的产生,设计了两套硬件方案。同时。结合在实践中遇到的问题,指出了一些在CAN总线协议使用上需要注意的地方。
关键词
l引言
CAN(ControUer Area Network)总线作为现场总线的一种,与其他总线相比可靠性高性价比合理。其主要特点有:
(1)多主方式工作,非破坏性的基于优先权的总线仲裁技术;
(2)借助接收滤波实现多地址的帧传送;
(3)短帧结构数据,受干扰率低;
(4)发送期间丢失仲裁或由于出错而遭破坏的帧可自动重发;
(5)对于严重错误具有自动关闭总线功能,使总线其他操作不受影响;
(6)不关闭总线即可任意挂接或拆除节点,增强了系统的灵活性和可扩展性;
(7)统一的标准和规范,使各设备之间具有较好的互操作性、互换性和通用性等。
正是由于CAN总线的这些优良性能,目前已应用于船舶制造、工业控制、建筑保安系统中,而且正成为许多领域的发展方向。
2 EPP并行口
为了实现大量数据的快速、准确传输,数据通信已经成为自动化系统的关键技术之一。计算机标准串、并行口是PC机的基本部件之一,利用计算机的标准串、并行口来作为PC机与CAN总线的通信接口,既方便又经济。但是由于串行通讯口的通讯效率较低,难以完成大量、实时性高的数据传输工作,而传统的SPP并行口只能实现数据的单向传输,但高级并行接口(EPP)则可以进行高速的双向数据传输,是进行大量数据传输的一种理想选择。
2.1 EPP概述
增强型并行口EPP(Enhanced Parallel Port)是一种与标准并行口SPP(Standard Parallel Port)兼容的高性能的并行连接口。在实际应用中,由于EPP并行口具有8位双向数据端口、状态端口和控制端口,因此,EPP可作为8位总线,灵活使用。EPP协议又极大地改善了PC机并行口的数据传输能力,使得并行口的数据传输速率可以很容易达到l一2Mbps。EPP协议定义了各种单/双向信号以满足各自的特殊需要。
2.2 EPP寄存器介绍
EPP协议定义的信号分别对应三个不同的寄存器,在PC机中,并行口l寄存器的基地址一般为378H,该地址包含读入和读出两个寄存器的双缓冲寄存器,对应ADO…AD7双向数据/地址端口;输入操作EPP信号的定义及其描述表l
表l列出了EPP信号的定义及其描述。
并行口引脚号
EPP信号
数据方向
定义
l
/WRITE
输出
低电平写,高电平读
2—9
AD[O…7]
双向
双向数据/地址线
lO
INTR
输入
外设中断
ll
WAIT
输入
握手信号
12
用户定义
输入
按不同的外设自定义
13
用户定义
输入
按不同的外设自定义
14
/DATASTB
输出
低电平有效,表示正在进行数据读写
15
用户定义
输入
按不同的外设自定义
16
RESET
输出
低有效,外设复位
17
/ADDSTB
输出
低电平有效,表示正在进行地址读写
18—25
GND
信号地
注:①输出,表示由计算机发向外设;输入,表示由外设发向计算机。
②加“/”表示信号低电平有效。
EPP寄存器定义表2
378H
AD7
AD6
AD4
AD4
AD3
AD2
ADl
ADO
379H
WAllr
INTR
自定义
自定义
自定义
无定义
无定义
无定义
37AH
无定义
无定义
READ ENABLE
IRQ ENBALE
/ADDSTB
/BESTE
/DATA
/write
时使用输入寄存器,输出操作时使用输出寄存器。单向状态端口和单向控制端口的寄存器地址分别为379H和37AH,其定义见表2。这三个寄存器是与标准并行口SPP兼容的,但实际上除了这三个寄存器之外,EPP还定义了其它几个寄存器。
EPP不需要从主机送来的信号就能执行数据交换。当主机把数据写到数据缓冲区时,总线自动产生数据选通信号。同样,从端口读人数据时也是自动产生数据选通信号来表示系统正准备接收下一批数据。
3 CAN独立控制器SJAl000
sJAl000是一种独立控制器,主要用于移动目标和一般工业环境中的区域网络控制(CAN),是Philips半导体PCA82C200 CAN控制器(BasieCAN)的替代产品。其基本特性有:
(1)引脚与PCA82C200独立CAN控制器兼容。
(2)有扩展的接收缓冲器64字节,先进先出(FIFO);
(3)支持CAN2.0A和CAN2.0B协议;
(4)通信位速率可达IMbps。而且它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特性的CAN2.0B协议。
4CAN总线收发器PCA82C250
PCA82C250是CAN控制器和物理总线间的接口。器件可以提供对总线差动发送、接收的能力。采用双线差分驱动,有助于抑制汽车等恶劣电气环境下的瞬间干扰。其主要特性有:
(1)与ISO/DIS 11898标准全兼容;
(2)高速性,最高可达IMbps;
(3)具有抗汽车环境下的瞬间干扰能力,保护总线能力;
(4)降低射频干扰的斜率控制;
(5)热保护;
(6)总线与电源及地之间的短路保护;
(7)低电流待机方式;
(8)掉电自动关闭输出;
(9)可支持多达110个节点相连接等。
5 适配卡设计
CAN总线的卓越性能为工业控制提供了一种可靠的数据通信,为了扩展CAN总线的监控和管理功能,应设计一块适配卡,连接PC机的并行口,该卡上具备CAN接口和PC接口特性,它完成的任务主要是PC机与总线之间的通信。
为此,适配卡的主要组成有:CAN总线控制器(sJAl000)、CAN总线驱动器(PCA82C250)、EPP并行端口。sJAl000是集成的独立CAN控制器,它负责完成CAN总线通信协议的物理层和数据链路层的功能。sJAl000片含有控制寄存器、命令寄存器、状态寄存器、中断寄存器和收发寄存器。PC机通过读写这些寄存器来实现对sJAl000的控制;芯片的TX0、TXl、RX0、RXl引脚用于与CAN总线的接口。PCA82C250是专门用于CAN总线收发驱动的9脚芯片,TXD、RXD引脚分别接收和发送驱动后的信号;CANH、CANL引脚接至双绞线或同轴电缆等传输介质。使用PCA82C250可以扩大通信距离,能提高系统的抗干扰能力,保护总线,降低射频干扰,实现热防护等。sJAl000的中断输出信号/INT接到EPP的INTR中断后,通过中断方式实现PC机与CAN控制器的通信。由于SJAl000的中断输出信号是低电平有效,而EPP的中断信号是高电平有效,所以在他们的连线之间必须加一个反向器。根据通信读写时序的产生,设计了一种由软件产生读写时序的电路和一种由硬件产生读写时序的电路。
5.1软件产生读写时序电路
连线说明:sJAl000的ADO~AD7直接与EPP并行口的ADO~AD7相连;ALE直接与nWrite相连;/RD,/WR分别与nAddStrobe和nDataStrobe相连;/INT的引线反向后与EPP的INTR相连(如图l所示)。
此种电路设计需要软件产生访问外设芯片所需的读写时序。在我们的应用程序中,对sJAl000的读写函数分别为ReadReg和SetReg,用汇编语言实现如下(如表3所示):
5.2硬件产生读写时序
连线说明:nWAIT信号为外设发送给PC的握手信号,以便PC在访问慢速外设时插入等待周期。
读写函数表表3
void SetReg(im port,int Value)
//通过双向口向sJAl000发送数据,port为sJAl000寄存器的地
址,value为要设置的值
im ReadReg(int port)
//读取SJAl000寄存器的值,port为sJAl000寄存器的地址,返回的值为该寄存器的值
{
_sflm
}
mov esx,0
//临时寄存器清零
mov dx,37ah
mov al,0dSh
out dx,al
//WRITE高,ALE低电平,地址选通
mov dx,378h
mov eax,port
out dx,al
//将要访问的sIAl000寄存器地址放上数据线
mov dx,37ah
mov a1,0d4h
out dx,al
//WRITE高。ALE高,将地址信号锁存
mov a1,0d5h
out dx,al
//WRITE高,ALE为低电平,地址选通
mov dx,378h
mDv eax,value
out dx,al
//把要写的数据送上数据总线
mov dx.37a}I
mov a1.0ddh
out山.且J
//WRITE低,可写,ALE低,地址选通,将数据写入sJAl000
mov aI,0d5h
out(1x,al
//复位,WRITE为低,ALE低
}
}
}
int retumcode=0:
asm
}
mo~e,sx,0
mov dx,37alI
mov a1,0d5h
out dx,al
//READ为低电平,ALE低,地址选通
lnov dx,378h
mov e.sx,port
out dx,al
//将要访问的sJAl000寄存器地址放上数据线
mov(b,37ah
mov a1,0d4h
out dx,al
//READ低,ALE高,将地址锁存
mov a1.0d5h
out dx.al
//READ低,ALE低,地址选通
mov dx.37aIl
mov a1.0d7h
//READ为低,ALE低,数据被送上数据线
out cb,al
mov a1.0f7h
out dx.al
/,lREADENABLE为1.允许数据读入
mov eax.0
mov dx,378h
.m al,dx,//从效据总线读人寄存器
mov returneode。eax
[nov dx,37ah
mov a1,0f5h
out dx,aL//READ高,ALE低
mov a1,0d5h
out dx,al//恢复,关掉READENBLE
}
ieturn retumcode;
}