APP下载

一种基于FPGA的ISA总线转CAN总线设计与实现

2014-12-07董文华赵倩程志华

中国科技纵横 2014年7期
关键词:基址双口收发器

董文华 赵倩 程志华

(上海大学,上海 200722)

一种基于FPGA的ISA总线转CAN总线设计与实现

董文华 赵倩 程志华

(上海大学,上海 200722)

本设计采用FPGA芯片及其技术实现了智能CAN通讯卡的设计和开发。本设计主要包括:ISA总线、主控制器模块、缓冲区模块、CAN协议控制器模块、以及CAN总线驱动器模块。本设计已在实际工程中得到运用。实践结果表明数据传输稳定,可靠性高。

CAN总线 FPGA VHDL 循环存储

ISA(Industry Standard Architecture,工业标准体系结构)总线是Intel/IEEE/和EISA在62线PC总线基础上经过扩展36根线而开发出的一种系统总线。IS A具有16位数据线,最高工作频率为8MHz,数据传输速率达16Mb/s。24根地址线,可寻址16Mb。使用ISA总线的外部设备不需要具有非常快的吞吐速率。

CAN(Controller Area Network)即控制器局域网络,是一种全数字化、多主和双向的现场总线。CAN总线数据通信具有很高的可靠性、实时性和灵活性,越来越广泛地应用于各种工业现场。

随着计算机应用技术的迅速发展,对高性能/高效率板卡的需求将会越来越大,微机中低性能的ISA总线必将被淘汰。但是在现实应用中仍有数量众多的支持ISA总线的板卡在使用。因此,CAN到ISA总线桥在一定时期内将扮演一种特殊的角色。

1 系统总体设计(图1)

2 工作原理

C A N模块共由四个部分组成:主控制器模块、缓冲区模块、CAN协议控制器模块、以及CAN总线驱动器。见图1。

2.1 主控制器

主控制器是整个模块的控制中心,通过访问CAN协议控制器来实现对CAN总线的访问;同时控制缓冲区,减少数据的丢失率、增加C PU的工作效率。

图1 系统总体设计

2.2 数据缓冲区

为了增加模块的数据吞吐量,减少数据丢失率,同时减少CPU的工作负担,在设计时增加了数据接收和发送缓冲器。该缓冲器应该同时满足CPU对其的读写,及CAN协议控制器对其的读写。

双口R A M有时会发生共享冲突问题。因此,将双口R A M作为缓冲区使用,利用FPGA控制程序,它不仅保证了数据的先后次序,也保证了数据流通的速度。

2.3 CAN协议控制器

CAN协议控制器实现CA N协议的数据链路层和物理层功能,对外具有与主控制器和总线接收器的接口。通过对其编程,主控制器可以设置它的工作方式,控制它的工作状态,进行数据的发送和接收,把应用层建立在它的基础之上。

2.4 CAN总线收发器

CAN控制器SJA1000并不能直接与总线连接,还要通过总线收发器才能接于总线上。CA N总线收发器提供CA N协议控制器与物理总线的接口,总线收发器的性能决定了总线接口、总线终端、总线长度和节点数,是影响整个总线网络通信性能的关键因素之一。

3 程序设计

程序可分为三个部分:(1)控制双口RAM。(2)控制SJA1000。(3)写SJA1000命令寄存器程序流程如图2所示。

图2 程序流程图

由流程图可看出在发送C A N总线数据帧时,必须先从双口RAM中读出数据,所以需使双口RAM的片选信号、读信号有效:同时根据前两个字节中的信息获取数据帧信息;然后将读取的数据依次写入SJA1000发送缓冲区;最后写SJA1000命令寄存器,通知SJA1000可以发送CAN数据。

4 读写CAN数据

4.1 写CAN通道数据

如果模块未向CPU发中断以申明某路8KRAM已满,则CPU可以将数据写入该通道。每次最多只能写10个数据。CPU可以根据数据长度来写数据。当需要发送的数据写完后,CPU必须发写结束命令以终止写操作。这样可以节约CPU的操作时间。写数据过程为(以下以写第一通道为例):(1)查询数据状态寄存器(基址+2),看1通道是否能写。(2)向通道1命令口(基址+00)写入写操作开始命令(0x01)。(3)向通道1数据口(基址+01)连续写入1帧的数据(小于等于10字节)。(4)向通道1命令口(基址+00)写入写操作结束命令(0x00)。(5)其他通道的写操作与此类同。

4.2 读CAN通道数据

CPU可以采用扫描方式查询各个通道的状态,当某个通道内有数据时CPU可读取这些数据。CPU可以根据ID1和ID2的数据长度来读取数据。当读数据结束后,CPU必须发读结束命令以告诉CAN终止读操作。这样CPU可以尽早结束读操作,节约CPU的CAN操作时间。读数据过程为(以下以写第二通道为例):(1)查询数据状态寄存器(基址+10),看2通道是否有数据,如果没有数据结束操作,如果有数据则向通道2命令口(基址+04),写入读操作开始命令(0x02)。(2)从通道2数据口(基址+05),连续的读出1帧的数据(小于等于10字节),读完指定长度的数据后,向通道2命令口(基址+04),写入读操作结束命令(0x00)。

[1]徐伟业.基于FPGA的CPU核及其虚拟平台的设计与实现[D].河海大学,2007年.

[2]贾晓宇.基于ISA总线的嵌入式智能型张力控制系统[D].武汉理工大学,2002年.

[3]安磊,梁尚军,邴洋海.一种基于FPGA的ISA航空总线设计方法[J].飞机设计,2012(4).

董文华,1987年04月,女,上海大学硕士研究生,主要研究方向是FPGA的应用。

猜你喜欢

基址双口收发器
清管球收发器设计细节分析及应用
双口形式的戴维宁定理在电路分析中的应用
河南偃师商城囷仓遗址
双口RAM在机载嵌入式系统中的应用
Virtex5 FPGA GTP_DUAL硬核两个收发器独立使用的实现
江苏盱眙泗州城遗址出土紫砂器
双口RAM读写正确性自动测试的有限状态机控制器设计方法
双口RAM在无人机三余度飞控计算机数据交换中的应用
商代西北方国的文明遗珍 山西吕梁高红商代夯土基址
洛阳瞿家屯战国建筑基址与东周“周赧王居地”