摘要:为了最大限度地利用现有硬件资源,缩短开发周期,研制了1394-PCI的转接卡,实现了基于1394的高速图像传输系统。介绍了1394高速串行总线的特性及原理及1394-PCI转接卡的硬件、软件设计。
关键词:1394高速串行总线 1394-PCI转接卡 设备驱动程序
当今的计算机外围设备都在追求高速性和高通用性,尤其在进行图像数据处理和传输时,数据的大指、高速、实时性对计算机与外设的接口提出了更高的要求。
目前新型总线接口有两种:USB和1394接口。它们都支持即插即用,具有易扩展、使用方便、成本低等特点。但在任何USB系统中,只能有一个主机,最多可接127个外设,在全速模式下的传输纺为500kbps~10Mbps。而相比之下1394显得更胜一筹。它支持点到点的传输,消除了主机处理器/内存
1 1394技术
IEEE 1394起源于苹果公司,又名FireWire,是为家用电器研制的一种高速串行总线标准,其目的是为了解决对速度要求很高的宽带设备的传输问题。1995年12月,IEEE 1394-1994高速总线标准正式被IEEE标准委员会批准。
1.1 1394的主要特点
a.支持点对点传输。串行总线设备能自主执行事务,而不需要主机CPU的干预。
b.可扩展总线。可以将新的串行设备连接入总线节点提供的端口从而扩展串行总线。
d.热插拔。不需要系统断电就可以动态地加入或删除设备。
e.即插即用。每次加入或删除设备时,总线节点会自动配置,并且配置时不需要主机系统的干预。
f.巨大的映射至内存的地址空间。每个节点拥有256T字节的地址空间,每条总线上有16P字节地址空间。
1.2 1394原理
1394原理主要定义了以下几点:
a.1394总线的拓扑结构。1394串行总线的拓扑结构可以分为两种环境:底板环境和电缆环境。不同环境间总线的连接需要总线桥。电缆环境下的物理拓扑结构是无环网络结构,由电缆连接各节点间的端口,呈分支扩展,形成树状或菊花状的网络拓扑。底板环境中物理拓扑是多点接入(multidrop)的总线,总线上分布着多个连接器,允许节点直接插入,通过仲裁使各节点享用总线。
b.1394的物理接口。1394设备通过标准的六芯线缆来传输信号,如图1所示。其TPA/TPA*和TPB/TPB*为一对差分模式的信号线。VP、VG提供8~40V的电源,可以通过它们给其它的节点供电。
c.1394总线协议。在1394传输中,支持等时传输和异步传输事务,并将每次传输分解为一系列的小事和,有效地利用总线带宽。异步事务需要数据确认,总线协议要复杂些,它包括三种基本事务类型:读取、写入和锁定。每个事务由请求子事务和响应子事务组成。由于等时应用程序的性质,相关的总线事务十分简单,等时事务每隔125μs向目标节点发送数据并且需要任何回热。1394总线一共定义了12种事务类型的包格式,采用循环冗余校验(CRC)进行数据差错控制,有相应硬件和软件处理各类传输事务。
d.1394电源管理。电源管理
2 系统硬件设计
2.1 图像传输系统总体设计
系统采用冗余备份的双路1394高速总线将数据传送给大容量存储器、数据加密器和信道编码器,如图2所示。
由于本地系统中普通采用PCI接口,为了最大限度地利用现有硬件资源,缩短开发周期,研制了1394-PCI的转接卡,来实现基于1394高速图像传输系统。该转接卡主要通过物理层和链路层控制芯片组实现,其中链路层控制芯片采用TI公司的TSB12LV23,支持开放主机控制器接口(OHCI)的PCI接口芯片。
2.2 TSB12LV23
/TSBAB03芯片组
TSB12LV23提供主机接口和物理层接口,实现CRC校验以及同步服务。在芯片中集成了中断寄存器、传送/接收FIFO和DMA通道。TSBAB03芯片完成1394总线协议中的物理层功能,实现仲载机制,对收发信号进行编码/解码。
3 系统软件设计
系统软件包括1394设备驱动程序、动态链路库和应用程序。
3.1 1394设备驱动程序开发
Windosw驱动模型(WDM)定义了驱动程序分层,以适应即插即用系统。1394系统驱动程序采用分层结构模型,其设备栈如图4所法。设备驱动位设备栈顶,通过发IRP给IEEE 1394总线驱动来与设备通信。IEEE 1394总线驱动为1394总线提供了独立于硬件的接口,并将一部分IRP传向端口驱动程序。
在分层模型中,1394总线驱动负责管理1394设备驱动程序与1394控制器之间的通信;加载及卸载设备驱动程序。设备驱动程序在功能层工作,它们不需要任何低层硬件资源,只需对总线驱动程序发请求,由总线驱动程序访问硬件来完成这些请求。
用DDK设计的1394设备驱动由4个模块组成:初始化模块、即插即用模块、电源管理模块以及I/O模块。
初始化模块提供设备驱动的入口点,从而将不同的IRP请求发向相应的执行模块。
即插即用模块用于实现1394设备的热插拔和动态配置。当总线驱动程序在加电或者添加/删除时检测到新设备,从设备中取出一个或多个标识符,用于检查所有可用的安装文件,发现合适的设备驱动程序。驱动程序被装入,调用AddDevice入口点,告诉它发现一个新设备,并创建功能设备对象(FDO)。总线驱动程序或者安装文件详细描述设备所需的硬件资源,使用仲裁器为每个设备分配资源。
电源管理模块负责设备的挂起和恢复。
I/O模块完成I/O请求的大部分工作。该模块定义了所需的I/O控制代码,从而为应用程序提供了调用系统驱程序的接口。
3.2 动态链接库的设计
由于Windows具有与设备无关的特性,不提倡与机器底层的东西打交道。如果直接用Windows的API函数或I/O读写指令进行访问和操作,程序运行时往往就会产生保护模式错误甚至死机,更严重的情况会导致系统崩溃。用DLL技术可以方便地解决上述问题。而且DLL没有自己的堆栈,与调用它的应用程序采用有相同的堆栈式,减少了编程设计上的不便;一个DLL在内存中只有一个实例,使之能高效经济地使用内存;DLL的代码封装怀使得程序简洁明晰。
在1394 API
3.3 应用程序设计
在高速图像传输系统中,应用程序是控制数据流的中心。采用VC++ 6.0和2000DDK实现,主要功能有:获取视频数据源、检测1394设备、总线管理、分配1394地址空间、设备等时资源和通道、完成1394传输。一次等时传输流程如图5所示。
4 应用前景
如前所述,由于1394的高速、灵活和可扩展性,使其在很多方面都大有用武之地,其中包括大容量存储器、视频会议、家庭网络、高速打印机、娱乐设备