基于PCI总线的HDLC通信卡的设计与实现
PCI9054工作于C模式从设备方式,采用分散/聚合(Scatter—Gather)DMA方式进行数据快速传输,以发挥其速度快的优势。根据PCI9054读写时序图可知,在C模式从设备方式下,FPGA读取PCI9054本地端ads_n和hlast_n的引脚状态,判断是单周期读写状态还是猝发读写状态,实现地址获取和数据读写,其状态机如图2所示。同时,在上位机读数据完毕后,如果读FI.FO为空则将EOT#引脚拉低,将数据传输结束信号上传,强行停止主机数据读操作。这就需要在DMA初始化过程中,设置DMAMODE寄存器的第14位为EOT#有效模式。 3.2 HDLC通信模块实现 HDLC的标准帧格式如表1所示,但HDLC也有由用户定义的非标准帧格式,常用于点对点的通信中。在非标准格式中,地址段、控制段、CRC段是可选的。本通信卡主要用于点对点通信,且采用简化的HDLC协议,即省略地址段、控制段、CRC段。其中CRC校验功能由上位机软件实现。 HDLC是面向位的,在待传数据中出现与标志字一样的数据时,如果不进行处理,就会被误认为是帧边界。为了避免此错误,HDLC规定采用“零比特填充法”使一帧中两个字段之间不会出现6个连续1。具体做法是:发送数据时,先进行帧数据扫描,只要发现有连续的5个1,则立即插入一个0,以此保证数据中不会出现连续6个1;接收数据时,先找到3E字段以确定帧的边界,接着对其后的比特流进行扫描,每发现5个连续1就将其后的0删除,以此保证所传比特流中不出现帧标志,直到帧尾标志出现,从而实现HDLC在链路层的“透明传输”,保证发送端可以发送任意组合的比特流信息,而接收端都能准确无误地接收到。 FPGA中实现的简化HDLC模块总体框图如图3所示。读写FIFO采用Ahera公司的LPM功能模块实现,大。小可根据需要设置,本通信卡设为512x32 bit。发送数据舅时,写FIFO接收Pc数据(总线宽度为32 bit),首先进行曼并串转换,再进行插“O”操作,最后插入标志字按位发送出去,输出数据Tx和输出时钟Tx_Clk保持同步,整个过程由发送控制状态机进行控制。接收数据与发送数据过程相反,由接收控制状态机进行控制。其中输入、输出时钟可以设置为68 kHz或者768 kHz。 发送控制状态机和接收控制状态机分别如图4、图5所示。发送数据时,发送状态机首先判断写FIFO是否有数据,若有数据,则插入帧头,依次读取FIFO数据,完成插“0”操作和插帧尾操作,并按照从低到高的顺序发送数据,直至写FIFO为空。接收数据时,首先搜索帧头,为了防止接收到连续两个标志字而把后一个标志字误认为是数据,设置搜索数据状态(Data_find),若不是标志字,则作为数据进行去“0”操作,完成串并转换和帧尾检测,并将接收到的数据以32 bit为单位,逐次写入读FIFO中。当一帧传输结束,采用中断信号通知上位机及时读取数据。一旦检测到丢弃序列(0x7F),则结束对此帧数据的处理,并清空读FIFO里的数据,同时上报PC机错误信息,请求发送方重新发送数据。 3.3 功能时序图 图6、图7分别给出了利用Quartus II的在线逻辑分析仪SignalTap II获取的PCI写数据、HDLC数据发送和HDLC接收、PCI读数据的时序波形图。从图中可以看到,HDLC模块正确实现了插“O”和去“0”操作,并能与PCI9054进行正确的数据收发。 本文采用PCI总线控制器PCI9054和FPGA技术设计实现了一款符合简化HDLC协议的通信卡,并已成功应用于实际工作中。实际应用表明收发数据正确,可以满足高速数据通信要求。同时,该通信卡设计中预留了一定的扩展空间,能够根据需要进行功能拓展。本通信卡可应用于信号处理、数据通信等场合,对PCI总线应用设计有一定的参考价值。 实验结果表明,基于ARM9和CPLD硬件平台,在嵌入式Linux操作系统下,系统能够实现等速跟踪、位置定点和正弦跟踪等功能,满足控制实时性要求,可实现伺服控制。系统体积小、成本低、功耗小、接口丰富、便于开发,且Linux系统具有很好的文件管理功能,有助于实验数据的存储和导出,便于实验结果分析。系统进一步完善后可将控制程序设计成图形界面,利用触摸屏输入和显示伺服控制结果,则可实现控制结果实时显示,可视化效果好,整个系统可脱离计算机工作,具有广泛的应用价值。
PCI总线HDLC通信卡PCI905 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)