基于PCI Express的双路IEEE 1394b接口卡的设计与实现

2015-06-15 22:27冯源等
现代电子技术 2015年12期
关键词:链路层物理层寄存器

冯源等

摘 要: 在此选用PLX公司的桥芯片PEX8114,设计并实现基于PCIe架构的双路1394b总线接口卡的硬件平台。在该平台上进行基于VxWorks操作系统的1349b驱动开发和主机PCIe接口驱动开发。经过与1394总线测试设备的验证测试,两路1394b总线接口可以实现400 Mb/s的高速数据实时传输,证明了该模块系统应用的可行性和可靠性,对其他通信系统的设计具有参考价值。

关键词: IEEE 1394b; OHCI; PCI Express; 高速串行总线; PowerPC处理器

中图分类号: TN915.04?34; TP336 文献标识码: A 文章编号: 1004?373X(2015)12?0033?06

0 引 言

随着嵌入式控制领域对大容量、高速、实时数据传输需求的不断增长,以IEEE 1349b总线为代表的新一代串行总线应运而生,在工业控制、汽车和航空航天等领域应用越来越广。同时由于总线速率和处理器主频的不断增强,要实现外部高速总线数据的传输和处理,还必须选择与之匹配的主机接口来实现外部总线协议逻辑与处理器的高速互联。采用传统的PCI总线的并行数据传输接口已经无法满足芯片级互连对带宽、成本、灵活性及可靠性的要求。串行点对点的PCI Express(简称PCIe)总线克服了PCI总线在系统带宽、可靠性和可扩展性等方面的固有缺陷。

本文针对PCIe的技术优势,采用PCIe?PCI桥芯片(PEX8114),实现了双路IEEE 1394b总线接口卡。1394链路层接口以高速DMA方式将数据传输到主机,以满足高速实时采集的应用需求。

1 IEEE 1394b总线网络简介

IEEE 1394b通信系统的层次结构见图1。1394节点由主机和1394接口两部分组成。其中驱动和应用软件驻留在主机上,驱动软件以一组标准API函数形式提供给应用程序,应用程序通过调用驱动软件完成对1394b模块功能的使用、管理与控制。1394b接口模块主要实现了3个协议层:事务层(Transaction layer)、链路层(LLC)和物理层(PHY)。

1394b通信可以同时支持等时和异步传输模型和服务,可以满足不同应用的要求。异步传输是一种确认的传输方式,用于对数据传输的可靠性要求较高的场合。等时传输是一种无应答的传输方式,强调数据的实时性,特别适合大容量图像和视频数据的传输。

由于IEEE 1394b总线高带宽、低延迟、支持独立于主机的点对点传输、良好的可扩展性和升级能力等特点,使其可以作为航空航天领域设备的互联总线。特别是随着航空电子设备智能化、自动化功能的增强,使基于图像识别、跟踪和测量变得日益重要,大容量高速传输图像数据成为航空电子系统的一个重要特点。所以充分利用IEEE 1394b总线的这些优越性能,适时地将其应用到航空电子统一网络中,可视为解决通信问题的明智选择。

2 系统硬件设计

PCIe?1394b接口卡实现基于IEEE 1394b协议的总线收发功能。主机通过PCIe总线接口来访问1394b的链路层寄存器和数据缓冲区,从而实现主机对1394b接口卡的配置和数据收发功能。1394b的物理层芯片的一端与链路层芯片的物理层和链路层接口相连,另一端为收发传输、仲裁提供电气接口。1394b的物理层端口和模块连接器之间采用有源变压器进行隔离耦合,以保证总线的信号品质和有效通信距离。其功能架构图如图2所示。

在本文中,主机作为1394b节点的控制器,系统加电后,主机通过PCIe接口对1394b链路层芯片进行初始化,包括初始化寄存器、设置各个FIFO的大小、使能中断、设置工作方式等。主机在本地SRAM中分别开辟了发送和接收缓冲区,1394链路层芯片TSB82AA2工作于异步DMA传输方式。主机将需要发送的数据写入发送缓冲区后,然后启动链路层芯片发送通道DMA控制器,链路层芯片从主机的发送缓冲区中将数据搬移到链路层芯片内的FIFO中,最后由链路层芯片完成FIFO数据的发送。数据接收时,当接收节点的物理层芯片TSB41BA3D检测到数据包到达时,物理层芯片根据接收的上下文配置,将匹配成功的数据包上传链路层接收FIFO中,链路层启动接收通道DMA控制器将接收FIFO中的数据直接搬移到主机的接收缓冲区中,完成数据的接收。

2.1 PCIe主机接口的实现

实现通用PCIe总线接口主要有以下两种方式:

(1) 专用桥接口芯片。专用桥接口芯片可以实现完整的PCIe主控模块和目标模块接口功能,将复杂的PCIe总线转换为相对简单的本地总线。这样用户可以集中精力于应用方面的开发,而不是费力调试PCIe总线接口。而且此类接口芯片有完整的参考电路可以借鉴,降低了开发难度,提高了开发的效率。目前,PLX公司已推出了此类功能芯片有PEX8112和PEX8114等。

(2) 可编程逻辑设计方案。现阶段,主流的FPGA和DSP厂商都在其产品中集成了基于PCIe协议的IP核,其优点在于高度集成,节省PCB资源,具有灵活的可编程性,但开发难度比较大,开发周期比较长。

2.2 基本硬件配置

PCIe?1394b接口卡1394的链路层芯片选用TI公司的TSB82AA2,该芯片带有独立的PCI控制器,内部带有多个DMA发送通道和接收通道。物理层选用TI公司支持S400β传输模式,并提供3个端口的物理层芯片TSB41BA3。选用PULSE生产的1394b专用有源变压器实现1394b物理层端口和模块连接器之间隔离耦合。采用PLX公司的桥芯片PEX8114实现主机PCIe接口到1394链路层芯片PCI接口的协议转换。

如图2所示,PCIe?1394b接口卡硬件电路包括:电源电路、时钟电路、链路层电路、物理层电路和主机接口电路。

2.3 1394b接口电路的实现

链路层芯片TSB82AA2提供了PCI主机接口和与物理层连接接口,实现CRC校验以及同步服务,该芯片中集成了中断寄存器、发送/接收FIFO和DMA通道控制器。物理层芯片完成物理层功能,实现仲裁机制,对收发信号进行编码/解码。

1394b的链路层?物理层接口交联信号包括PCLK、LCLK_PMC、CTL0?CTL1、D0?D7、LREQ、PINT、LPS以及S5_LKON,具体连接方式如图3所示。

2.4 高速电路与PCB设计

1394b接口卡的PCB设计遵循高速信号布线和信号完整性的要求。PCIe?1394b接口卡主要包括PCIe接口和1394b总线接口两部分高速电路设计。模块设计时主要考虑了以下几点:

(1) 元器件布局合理,应尽量保持1394物理/链路层接口接近,PCIe桥芯片与主机连接器接近,以减少噪声耦合和信号的损耗;

(2) 电源变换芯片的位置应远离晶振、1394物理层、高速信号等敏感区域,并且耦合电容应尽量靠近各芯片的电源管脚,以减少噪声耦合的机会;

(3) 1394物理端口应设计端接网络以实现与线缆传输线的阻抗匹配,并且端接网络尽量靠近物理层芯片的TP管脚;

(4) 1394和PCIe总线都采用差分信号,差分信号对在走线时要求同一组内的差分信号严格等长,组和组之间的信号长度尽量一致,以保证信号编码的对称性;

(5) 时钟信号是敏感信号,PCIe总线接口的100 MHz差分时钟,1394b物理层的49.152 MHz,以及物理层链路层接口的98.304 MHz的时钟信号。这些时钟信号线应尽量少打过孔,避免与其他信号线并行走线,避开电源,对时钟线进行必要的保护,将其放在单独的层中,适当增加线间距,周围流出额外的间隙等;

(6) 其他减少电磁干扰的措施还包括:保证地线回路与信号通路尽量接近,避免地线回路不连续,布线时不使用90°拐角的信号线等。

3 VxWorks环境下驱动的开发

在本文中与该1394b接口卡适配的主机采用飞思卡尔公司的PowerPC8640处理器,移植嵌入式实时操作系统VxWorks5.5,在Tornado环境下开发系统驱动。驱动软件作为应用程序与硬件通信的桥梁,对系统性能有着重要影响,可靠的驱动软件是硬件稳定运行的保证。

PCIe?1394b接口卡驱动软件结构图如图4所示,驱动软件主要由主机PCIe接口驱动和IEEE 1394b总线驱动组成。

3.1 主机PCIe接口驱动开发

系统上电后,主机PCIe接口驱动软件对PowerPC8640的PCIe总线控制器和桥芯片PEX8114进行配置,配置完成后,主机就可以访问1394设备。配置流程如图5所示。

首先初始化PowerPC8640的基地址和空间大小。PowerPC8640在内部定义了多个局部存取窗口,按照优先级选取一个窗口作为PCIe的配置窗口,可设置窗口的基地址和窗口大小。然后扫描PCIe链路上的PCIe设备,这时能扫描到PowerPC8640的PCIe设备,通过查看ID号可判定。在扫描到PowerPC8640的PCIe设备后进行PCIe链路训练,查询训练状态。如果状态为0x16,训练通过,PCIe链路正常,可以进行下一步设置;如果不是,则需要检查链路上的异常,出现异常一般需要看物理链接、时钟、以及PCB走线等。训练通过后进行PowerPC8640的PCIEe设备寄存器设置,需要把PowerPC8640的PCIe设备配置为主设备,设置PowerPC8640的PCIe设备为BUS0,点对点连接的设备(PEX8114)为BUS1。

配置完PowerPC8640的PCIe设备后再次扫描PCIe链路,查找链路上的桥芯片PEX8114,PEX8114的总线号是BUS1,找到后再按照类型1配置桥芯片的头标区,配置原级总线号、次级总线号寄存器,并配置下游设备的PCI空间基址和大小。配置完PEX8114桥芯片后再次扫描PCIe链路,这时就可以找到要访问的1394设备的ID号,然后再配置这2路1394设备各自的PCI配置空间。主机PCIe接口的初始化是整个模块能够正常工作的前提,在完成上述流程后,主机就可以访问到1394设备,为下一步调用1394b总线驱动奠定了基础。

3.2 IEEE 1394b总线驱动设计

3.2.1 1394 OHCI协议

本文基于1394 OHCI协议的驱动程序设计。1394 OHCI是专门针对主机端开发的协议,也是IEEE 1394串行总线链路层协议的一种具体实现方式,并附带一些支持事务层和总线管理层的特性。1394 OHCI还包含高性能DMA数据传输和一个主机总线接口。该接口既可作为主机总线上的主设备,又可作为从设备。作为一个从设备,它译码并响应主机对1394 OHCI内部寄存器的访问。作为一个主设备,采用DMA方式发送(AT DMA)和接收(AR DMA)所有在IEEE 1394协议中规定的数据包,实现1394的异步传输和等时传输。

如图6所示,1394接口卡通过PCI总线把1394 OHCI的寄存器映射到内存,并且内存和1394卡上都有FIFO存储空间作为传输数据的缓存,这样所有对1394寄存器的操作和数据收发都转变成对内存的操作。所有收发数据都驻留在CPU端内存空间中所创建的1394 FIFOs中,当启动发送或接收时,1394链路层芯片的DMA控制器会自动的读取或写入内存中1394 FIFOs中的数据,从而在不需CPU直接参与的情况下,实现了CPU和1394设备之间的数据流搬移,减少软件开销。

3.2.2 设备管理

设备管理提供1394b设备管理和控制,实现设备打开、设备关闭、复位总线、设备强制根节点、禁止设备端口、查看设备端口状态等功能。用户可以通过这些接口实现对1394设备工作状态的管理、查询和判断。主要包括初始化、物理层操作、总线操作。

(1) 初始化。1394设备的初始化需要完成打开设备、分配资源、加载设备配置、挂接中断、使能中断等功能。其流程图见图7。初始化工作的核心是对链路层芯片TSB82AA2内部配置寄存器的初始化,主要包括控制寄存器、中断寄存器、中断屏蔽寄存器、FIFO控制寄存器等。通过等时接收通道配置,中断配置,异步请求接收配置,异步响应接收配置等,为等时和异步包的发送和接收做好准备。在完成这一系列配置后,使能链路层,最后触发总线物理复位。1394的初始化过程必须遵守一定的顺序,并且每次发生总线复位后,都需要对1394的链路层、物理层进行重新配置,初始化。

(2) 物理层操作。物理层操作的驱动程序可以实现对物理层芯片的所有寄存器的读/写访问,从而获取相关总线信息。物理层寄存器的访问是通过一系列的链路层寄存器访问来实现。通过访问物理层寄存器,可以控制和获知总线状态,如发起总线复位,强制根结点等。

(3) 总线操作。所有与总线信息相关的驱动都包含在总线操作的驱动程序中,包括总线拓扑图的生成,速度图的生成,等时带宽资源的获取、分配以及释放,等时通道资源的获取、分配以及释放,总线管理器ID的获取和强制总线复位发起。

3.2.3 通信管理

通信管理提供异步流的发送和接收,等时接收功能。另外通过异步4 B数据包读/写,异步块数据包读/写的驱动功能完成异步传输。异步包的特点是保证数据的正确到达,他是一种点对点的数据包。异步流包和异步包不同,异步流包采用等时数据包格式,但是在异步周期里发送,这样做的优点是保证数据包的正确传递,同时支持一对多通信。

(1) 异步流包发送。由主机通知链路层芯片该消息数据准备好,根据数据包发送条件判断出该数据包具备发送条件后,配置异步流发送上下文,启动DMA,链路层芯片从主机内存中指定的数据包地址中将数据搬移到链路层芯片的FIFO 缓冲中,然后启动并完成异步流的发送。异步流包发送流程如图8所示。

(2) 异步流包接收。设备在接收到消息之前,首先在设备的初始化时,初始化主机内存中的缓冲区,配置异步流的接收上下文链,启动接收,当设备检测到数据包到达时,物理层芯片根据接收的上下文配置,将和配置的通道号匹配的异步流包上传链路层,链路层启动DMA将接收到的数据直接放在接收上下文指定的主机缓冲区内,然后更新接收的上下文,自动切换到下一个缓冲区对应的上下文。

(3) 等时包发送和接收。OHCI协议规定了至少有8个DMA通道可以用来发送等时数据,每个等时通道在每个等时周期只能发送一个数据包。等时包的发送流程与异步流包的发送路程类似,这里不再赘述。等时包的接收流程,如图9所示。

3.2.4 中断管理

中断管理接口用于实现中断回调接口的注册和注销等功能。任何一次DMA传输完成或退出,芯片都会产生一个中断通知主机,主机通过读取中断事件寄存器来判断发生了何种中断。根据初始化时已经配置好的中断屏蔽寄存器,针对其中使能的每一种中断原因编写相应的中断服务例程,由中断管理接口完成中断例程的挂接。

4 IEEE 1394b总线通信测试

为了验证设计的正确性和实时性,构造了IEEE 1394b总线通信的测试环境,如图10所示。在PC机上使用TI公司的PCI?1394卡作为总线上的节点A,配合操作界面,启动1394b数据包的发送和接收功能。主机PowerPC8640和双路PCIe?1394b接口卡整体作为被测对象,其内部的两个节点分别标记为节点B和C。系统中节点A、B、C都具有3个端口。节点B和节点C分别与节点A的0和2号端口连接,这样节点A就可以向节点B和C之间进行数据通信。

图10 IEEE 1394b总线通信的测试环境

为了监控和分析总线上的数据和物理层信号品质,本文采用1394总线数据分析仪和信号质量测试仪,它们作为两个独立的叶子节点,分别与被测对象中节点B的1和2号端口连接。其中1394总线数据分析仪用来分析总线的网络拓扑、包格式、包速率、包内容和包间隔等参数;信号质量测试仪主要测试信号完整性,包括差分幅度、上升下降时间、眼图、抖动、差分延迟、共模电压、误码率等。通信实验中,包的发送分为单次发送和连续发送,测试结果表明:发送和接收数据正确,不丢包,误码率≤10-10,模块中两路1394b接口通信稳定,实时性较好。

5 结 语

本文从航空电子系统大容量信息传输的需求出发,提出航空电子系统基于IEEE 1394b高速串行总线实现数据传输的设想。借助成熟的PCIe互联技术,在板卡上构建了两路1394b通信接口,以PowerPC8640为主机,开发了基于VxWorks操作系统的1349b驱动程序和主机PCIe接口驱动程序。经过实际的通信测试,证明将这种高速串行总线技术应用到航空电子系统中的图像数据通信是可行的。

参考文献

[1] BUDRUK Ravi, ANDERSON Don, SHANLEY Tom. PCIExpress系统体系结构标准教材[M].北京:电子工业出版社,2005.

[2] 王齐.PCIExpress体系结构导读[M].北京:机械工业出版社,2011.

[3] 张大朴,王晓,张大为,等.IEEE 1394协议及接口设计[M].西安:西安电子科技大学出版社,2004.

[4] 李世平,戴凡,汪旭东.IEEE 1394(FireWire)系统原理与应用技术[M].西安:西安电子科技大学出版社,2004.

[5] 王苗苗,张春熹,史洁琴.IEEE 1394应用于航空电子系统图像通信的研究[J].微计算机信息,2006,22(4):225?227.

[6] PLXTechnology, Inc. ExpressLanePEX8114BA, PCIExpress?to?PCI/PCI?XBridgeDataBook [EB/OL]. [2007?03?11]. http://www.plxtech.com.

[7] 张伟栋,刘志敏.基于PowerPC8640的PCI?E总线接口设计[J].航空计算技术,2011(3):119?121.

[8] 梁青,罗金生.基于RapidIO的双路IEEE 1394b串行总线控制器的实现[J].测控技术,2013,32(5):67?71.

[9] 马晨,陈彦萍.基于PCIexpress总线1394b网络传输系统WDM驱动设计[J].测控技术,2013,32(3):94?97.

[10] 马进,王伟,杨煜普.基于DMA的1394总线高速数据传输实现[J].计算机工程与设计,2010,31(20):4410?4413.

猜你喜欢
链路层物理层寄存器
基于K-ML-MPWFRFT的物理层安全传输技术
基于多空间内存共享的数据链路层网络包捕获方法
Lite寄存器模型的设计与实现
公路联网电子不停车收费系统路侧单元物理层自动测试软件研发
分簇结构向量寄存器分配策略研究*
基于FPGA全功能MVB网络从设备链路层IP核设计
多天线物理层安全传输系统性能分析
数据链路层的选择重传协议的优化改进
IEEE 1394事务层接口的设计与实现
1Gbps电力线载波通信物理层算法设计