>
摘要:文章介绍了PCI桥接口芯片PCI9052和LonWorks接口神经元芯片Neuron3150,LonWorks技术的核心是神经元芯片,给出了基于PCI总线的LonWorks适配卡硬件结构、软件设计及实现方法。
关键词:LonWorks总线;神经元芯片;PCI总线
概述
LonWorks技术是一个实现控制网络系统的完整平台。这些网络包括智能设备或节点。智能设备或节点与它们所处的环境进行交互作用,并通过不同的通信介质与其他节点进行通信。这种通信采用一种通用的,基于消息的控制协议。美国Echelon公司于20世纪90年代初推出的一种现场总线技术LON(local operating network)的意思为局部操作网络,它就是用于开发监控网络系统的一个完整的技术平台。
LonWorks现场总线在网络通信方面具有突出优点,即组建的网络结构简单,不需专门的中央处理机和服务器,安装方便,可利用多种通信介质;采用扩频通信技术和先进的纠错技术,抗干扰能力强;每个节点在网络中都是平等的,没有主次之分,节点间采用网络变量将它们的逻辑关系确定起来,每个节点可以独立完成数据的采集、运算、发送和接收功能。
LonWorks软件丰富,可编程性能好,并配有功能强大的开发系统,能大大缩短研制和开发周期。总之具有透明性、分布性、可靠性、灵活性、简便性、廉价性等特点,能适应现场通信的基本要求,满足众多控制场合的需要,所以作为现场总线中的佼佼者在国内各个领域的测控系统中广泛流行。LonWorks技术的核心是神经元芯片(neuron chip),芯片中含有LonTalk协议的固态软件(简称固件),使它能可靠的通信。
PCI总线是Intel公司推出的一种先进的高性能32/64位局部总线,可同时支持多组外围设备,不受制于处理器,数据吞吐量大(33MHz总线频率、32位传输时峰值可高达132MB/s)。目前PCI是处于主流的计算机总线。以往的Lon卡一般都是基于ISA总线的,由于ISA总线传输速率低,Lon卡必须增加中继控制功能,才能适应LonWorks的高速传输,导致造价高、体积大、传输速率低,不利于LonWorks总线的推广应用。由于PCI总线传输速度快,而且支持热插拔、电源管理等功能,不但能满足LonWorks总线的高速数据传输,而且它的性能高、功能强,而且体积小、价格低、使用方便、应用范围广。
总线通信控制部分器件的选择
LonWorks总线通信控制部分
LonWorks总线以能适应现场通信的基本要求,满足众多控制场合的需要的诸多突出特点得到了迅猛的发展。LonWorks技术的核心是神经元芯片,神经元芯片主要包含TMPN3150和TMPN3120两大系列,由日本东芝公司生产。
TMPN3150支持外部存储器,适合更为复杂的应用,而TMPN3120则不支持外部存储器,它本身带ROM。适配器中,神经元芯片选用的是TMPN3150芯片,该芯片内有三个微处理器,MAC处理器﹑网络处理器和应用处理器。MAC处理器完成介质访问控制(media access control),也就是ISO的OSI七层协议的1、2层。网络处理器完成OSI的3~6层网络协议,它处理网络变量、地址、认证、后台诊断、软件定时器、网络管理和路由等进程。应用处理器完成用户的编程,其中包括用户程序对操作系统的服务调用。TMPN3150片内存储器的地址范围是E800H~FFFFH,包括2kB的RAM、0.5kB的EEPROM、2.5kB保留空间和1kB的用于存储器映象I/O的空间。TMPN3150有16根地址线,可寻址64k空间,可以外接存储器,如RAM、ROM、EEPROM或闪存。根据一般应用的性能和成本要求,适配器的外部存储器采用闪存和RAM。闪存选用AT29C512,它的地址范围是0000H~7FFFH,RAM选用IS61C256AH-15N,它的地址范围是8000H~DFFFH。
AT29C512和IS61C256AH-15N的地址范围由神经元芯片的地址线和控制线E及相关的逻辑门电路来确定。神经元芯片的晶振为10MHz。神经元芯片与LON的网络介质的接口采用上海工业自动化仪表研究所生产的双绞线收发器。收发器按其传输速率可以分为TPT/XF-78(传输速率为78kbit/s)、TPT/XF-1250(传输速率为1.25Mbit/s)两种型号,用于满足不同的通信要求。我们选用的是TPT/XF-1250。该神经元芯片是LonWorks总线控制器和物理总线的接口,可以提供对LonWorks总线的差动发送和接收能力,具有抗瞬间干扰、保护总线的能力,可以通过调整LonWorks总线上通信脉冲的边沿斜率来降低射频干扰。
PCI设备通信控制部分
PCI总线是一种独立于CPU的局部总线,不同于传统的ISA总线。由于PCI总线规范定义了严格的电气特性和时序要求,开发难度比ISA总线的开发难度大。实现PCI接口的方案一般有两种:采用可编程逻辑器件和专用总线接口器件。另外,PCI设备可分为主模式和从模式。主模式桥芯片可以进行DMA操作,而从模式只能接受读写操作。根据PCI提供的传输数据带宽(最大132MB/s)和LonWorks总线的要求,加上经济和开发难度与周期上的考虑(主模式桥芯片较昂贵,开发难度较大),又因不需要DMA功能,采用从模式桥芯片足以满足传输数据的需要。此外,选择芯片不仅考虑性能和经济上的要求,而且还需要考虑硬件开发和驱动程序开发的难易。如果不提供足够的芯片说明和应用样例及开发工具,将大大增加开发难度和延长开发周期。因此,采用PLX公司的PCI总线目标接口芯片PCI9052作为LonWorks卡中的PCI接口芯片,负责与计算机之间的数据通信。PCI9052是PLX公司开发的低价格PCI总线从模式接口芯片,低功耗,符合PCI2.l规范,提供的局部总线(localbus)可通过编程设置为8/16/32位的(非)复用总线。
适配卡硬件设计
适配卡的硬件结构框图及工作原理
该互联适配卡分为两个部分,PCI通信控制模块和LonWorks通信控制模块,PCI-LON互联适配卡的硬件结构框图如图1所示。
图1 LonWorks卡的结构框图
互联适配卡采用双CPU技术,主CPU(PCI9052),辅CPU为神经元芯片Neuron3150。主CPU向上与PC/Laptop通信,向下通过双口RAM与辅CPU进行数据传输,同时由PCI9052内部软件完成协议转换功能。辅CPU向下与LonWorks网络通信,向上通过双口RAM与主CPU进行数据传输,主要起LonWorks网络接口的功能,作为通信协处理器使用。但是,在整个PCI系统中只有一个主控制器,即主机(PC/Laptop),而由上述两个模块组成的互联适配卡只是PCI外部设备。
主机是总线控制者,PCI设备响应主机请求。系统软件设计部分也是针对主机和外部设备这两部分展开的。为了实现神经元芯片与I/O设备之间的通信,神经元芯片的11个引脚可定义为34种I/O对象,即并行I/O对象﹑串行I/O对象﹑直接I/O对象﹑定时/计数器I/O对象等。根据现场具体应用的要求,本文设计的适配器采用Neuron Chip预定义的并行I/O对象,即并行I/O模式(parallel I/O mode)实现了高数据速率和全双工工作方式。
并行I/O应用模式下利用Neuron芯片的11个I/O口进行通信,其中IO0~IO7为双向数据线,IO8~IO10为控制信号线,借助令牌传递/握手协议,并行I/O口可用来外接处理器,实现Neuron芯片与外接各类微处理器之间的双向数据通信,并行口的速率可达3.3Mbit/s。并行口的工作方式分别有3种:即主模式、从A模式和从B模式,不同模式下,IO8~IO10这3根控制信号线的意义不同。我们应用的是即从A模式。
在从A模式中,认为神经元芯片为从CPU,微处理器为主CPU,主CPU和从CPU之间的数据传输通过虚拟的写令牌传递协议(virtual write token-passing protocol)得以实现。主CPU和从CPU交替地获得写令牌(write token),只有拥有写令牌的一方可以写数据(不超过255个字节),或者不写任何数据传送一个空令牌。传送的数据要遵从一定的格式,即在要传送的数据的前面加上命令码和传送的数据的长度,命令码有CMD_XFER(写数据)、CMD_NULL(传递空令牌)、CMD_RESYNC(要求从机同步)、CMD_ACKSYNC(确认同步),最后以EOM字节结束。
在从A方式中,整个握手/应答协议以及数据传送的实现过程是自动完成的。需要特别说明的是,神经元芯片的握手以及令牌传递的实现是自动的。但是对于非神经元芯片的微处理器(PCI9052)就要求编程人员编程使非神经元芯片的微处理器能够执行神经元芯片的握手/令牌传递算法,也即是复制神经元芯片的行为,从而实现双方的通信,我们也正是这样做的。适配器的工作原理如下:在通信以前,主CPU(PCI9052)和从CPU(神经元芯片)之间先建立握手信号,即HS信号有效(这由3150的固件自动实现)。
然后,主CPU再送一个CMD_RESYNC命令,要求从CPU同步,而从CPU接收到这个信号以后,则发送CMD_ACKSYNC,表示已经同步了,可以通信了。同步以后,虚写令牌就在主CPU和从CPU之间无限的交替的传递,拥有虚写令牌的一方就可以向数据总线上写数据,即主CPU可以往从CPU写数据,从机也可以将数据传往主CPU。
PCI设备通信控制模块
协议转换和PCI设备通信控制模块的功能有PCI9052芯片来实现。PCI设备通信模块通过对PCI9052编程控制PC/Laptop与LON网之间的数据传输。该设计为双CPU设计,由一块双口RAM连接主从CPU,完成数据传输。由于PCI设备在计算机中的硬件资源是系统动态分配的,因此在设计出基本的硬件框架后,要进行PCI配置设计。PCI9052提供5个局部地址空间,可以选用其中的一个作为Neuron3150的地址空间,分配32个8位地址。同时设置相应的初始化,PCI配置寄存器中的寄存器PCIBAR2设置为0XFFFFFFE0向系统请求分配内存的数量为32,类型为不可预读,其他寄存器的值可设置为0。设置局部地址空间的范围为0X00000000~0X00000020。
利用PCI9052的局部设备片选作为Neuron3150的片选信号。
片选信号的起始地址和地址范围由CSOHaseAddress寄存器设置,值为0X00000002。另外,PCI9052的
信号为局部总线数据准备信号,Neuron3150的寄存器地址映射成地址,数据传输不存在延迟等待,因此引脚
可接地,表示引Neuron3150的寄存器总是立即可读写。PCI9052寄存器的初始值由串行EEPROM提供,在PCI9052加电后读取。EEPROM必须采用支持连读功能的芯片,本设计采用Microchip的93LC46B。用PLX公司提供的开发工具PlxMon可对93LC46B进行读写。
PCI9052的硬件调试可采用PlxMon。利用它可以对PCI设备的配置资源进行检验。利用PLX提供的SDK,可以对PCI9052的局部寄存器、局部总线及EEPROM进行读写,这样可以调试硬件。借助开发工具,不必开发PCI设备的调试软件,可节省很多时间。同时,SDK也为驱动程序的开发提供了程序框架,加快了开发进度。
LonWorks通信控制模块
LonWorks通信控制模块主要由神经元芯片、LonWorks双绞线网络收发器、程序存储器、数据存储器等组成。在这样的应用中,实际上仅仅把神经元芯片作为通信处理器用,由它按照LonTalk协议与LonWorks网络上所有的智能节点进行通信,同时将通过并行口与主CPU通信。它将从PCI设备并口接收到的数据通过特定的寻址方式由LonWorks收发器传向LonWorks网,或将从LonWorks网上接收到的LonTalk协议报文由并口发给PCI设备,再PCI设备将数据装帧作下一步处理(如传向以太网络)。
由于开发神经元芯片时采用的神经元芯片语言,内存占用大。另外,作为通信协处理器使用要求有大量的数据缓冲区进行数据交换,而仅仅利用3150内部的2kRAM,容量是远远不够的,因此我们扩展了外部存储器闪存和RAM。由于采用闪存,可以非常方便地修改用户程序。神经元芯片与下面的LonWorks网络通信采用的是显式报文通信。
适配卡软件设计
该适配卡软件设计包括基于PCI主机(主CPUPCI9052)的软件设计及从CPU(Neuron3150)的软件程序驱动程序的设计。
基于PCI主机的软件设计主要包括基于PCI的互联适配卡的驱动程序和PCI通信程序和用户服务程序两个部分。驱动程序的功能主要是配置Neuron3150的LonWorks接口、收发LonWorks总线上的数据、对LonWorks总线进行实时监测、接收用户程序的收发命令。收发数据和LonWorks总线错误均采用中断处理,驱动程序可以快速响应,通过事件(Event)内核对象直接通知给用户程序。如图2所示,PCI通信使用分层驱动模型,每层处理一部分通信过程,这样可以使不同设备在一些任务上使用相同的驱动。我们使用Microsoft WDM DDK和Microsoft Visual C++6.0来完成。
图2 软件设计框图
PCI通信程序和用户服务程序,用户服务程序通过PCI通信程序与系统PCIDI(PCIdeviceinterface)通信,由系统完成PCI协议的处理与数据传输。开发可以访问互联适配卡的应用程序,可使用任何一个支持win32函数CreateFile()和DeviceIoControl()的编译器。首先调用CreateFile()函数,来取得访问设备驱动程序的句柄,CreateFile()使用设备的链接符作为函数参数。然后,调用DeviceIoControl()函数来提交I/O控制码,并且为CreateFile()函数返回的设备句柄设置I/O缓冲区。最后,还要调用CloseHandle()关闭设备。其中,最重要的函数是DeviceIoControl(),它的功能是完成应用程序与驱动程序之间数据的交换。
BOOLD eviceIoControl(
HAND LehDevice //外设句柄
DWORD dwIoControlCode, //I/O操作控制代码
LPVOID IpInBuffer, //输入缓冲区指针
DWORD nInBufferSize, //输入缓冲区大小
LPVOID IpOutBuffer, //输出缓冲区指针
DWORD nOutBufferSize, //输出缓冲区大小
LPDWORD IpBytesReturned, //实际返回的字节数
LPOVERLAPPED IpOverLapped //用于异步操作
//的结构指针);
另一部是编写从CPU的软件程序,用神经元的编程语言即NeuronC语言编写。从机主要完成将并口得到的报文解析,再利用NeuronC的消息传送机制,将解析的消息传送给适配器下层的应用节点。同时,还将从适配卡下层的应用节点以消息形式传送上来的数据或信息构造成PCI识别的报文,通过并口传送给PCI。
结束语
根据本文所述的采用双CPU设计的互联适配卡的设计,开发了名为LON3150的LON卡。经使用证明,该卡设计简单明了、性能较高、成本低廉、组态灵活、可靠性好、通信能力强。驱动程序和ActiveX控件使用方便,达到了设计和用户的要求。总之,本适配卡在工业控制、楼宇自动化等诸多领域有广阔的应用前景。