DSP与ISA总线PnP卡的接口技术研究
扫描二维码
随时随地手机看文章
为解决多个总线设备共享系统总线时所带来的系统底层资源的分配和再分配问题,Microsoft公司在1993年以后相继公布了即插即用PnP(Plug-and-Play)规范,包括的总线类型有ISA、EISA、PCMCIA、PCI、VESA及SCSI等。PnP技术提供了对于底层硬件资源包括I/O端口、IRQ、DMA通道以及内存等的智能管理,免除了用户因安装新的硬件设备而带来的烦恼。PnP不需要手工改变设备的开关或跳线,给大家带来了好处,但也给在非PC硬件平台上的应用带来了麻烦。原因在于PnP的实现必须具备两个条件:一是PC机主板要有支持PnP的BIOS;二是要有支持PnP的操作系统,如Windows95/98/2000等。当脱离了PC机环境,这两个条件皆不具备,PnP设备的应用受到了极大的限制。比如在DSP与ISA总线接口系统的设计中,一般ISA标准的非PnP设备有固定的系统资源,通过跳线或开关手工设置完成后,上电即可对其编程,相应的ISA接口卡就会做出反应。而支持PnP的接口卡上面没有开关和跳线,板上的资源需要用软件配置;当同时使用多块PnP接口卡时,首先还必须进行PnP卡的识别,然后才能对相应的接口卡进行资源配置。在笔者以前所从事的科研任务中,需要DSP与ISA总线的网卡和声卡进行接口设计,所用的网卡和声卡都不支持PnP规范。随着PnP技术的发展和普遍应用,如今在市场上很难见到不支持PnP的老ISA卡了,这就给笔者提出了新的问题:如何在非PC硬件环境下使用PnP设备?本文以PnP网卡和声卡为例,通过分析ISA总线PnP卡与微机的软、硬件接口电路,用DSP芯片TMS320F206结合外围电路模拟ISA时序,实现了DSP对PnP卡的自动识别与配置,从而使ISA总线PnP卡在非PC环境下的应用变成现实。
1 ISA总线PnP协议简介[1]
PnP逻辑必须在上电后经软件使能才起作用。使能的过程是将一个预先定义好的序列(32次I/O写)写入地址端口,地址端口的地址为279H,预先定义好的序列就称为PnP初始化关键字。这32个字节为:
6A,B5,DA,ED,F6,FB,7D,BE,DF,6F,37,1B,0D,86,C3,61,B0,58,2C,16,8B,45,A2,D1,E8,74, A,9D,CE,E7,73,39
当PnP卡检测到上述32字节的初始化关键字后,所有的PnP卡都进入了隔离状态,等待软件一个一个地去识别并配置资源。PnP卡能被软件识别的关键在于每个卡都有一个唯一的序列标识符。该序列标识符由9个字节共72位组成,其中前四个字节是生产厂家的标识,紧接的四个字节可以是任何值,只要系统中任意两块卡之间的这八个字节不完全相同即可。最后的一个字节是前八个字节的校验和。软件就是通过读取每个卡的序列标识符来识别该PnP卡是由哪个公司生产的并正确调用该公司提供的驱动程序。序列标识符是按位顺序读出的,图1示出了序列标识符的构成及移位过程。对每个字节,协议规定移出的顺序是bit[0],bit[1],直到bit[7]。
读序列标识符的口地址为200H到3FFH之间的任意地址,只要该地址未被其它资源占用。设置该地址的过程见本文的第四部分。所有卡的读地址皆相同,设将要读的一块卡的序列标识符的该位为“1”,而另一块卡的相应位是“0”,如果这两块卡都来驱动数据总线,则不可避免地会产生冲突。PnP卡识别的关键技术也就在这里,即PnP上的硬件参与配合了该卡的识别判断过程。每块卡会根据自己序列标识符的每一位对I/O读做出相应的反应。
如果该卡的序列标识符的当前位是“1”,那么该卡就驱动数据总线为55H;如果该位是“0”,就驱动数据总线为高阻,所有在高阻态的卡会去检查数据总线是否有别的卡正在驱动数据总线的最低两位为“01”。第二次I/O读时,驱动数据总线为55H的卡将驱动数据总线为AAH,而在高阻态的卡会去看是否有别的卡正在驱动数据总线的最低两位为“10”。以上可以看出,每读一位需要两次I/O读。
在高阻态的卡如果检测到有别的卡在两次读周期中有效地驱动了数据总线,则它就会停止参与当前的识别状态,等在下一轮的识别过程中再参加。但是如果该卡没有检测到有别的卡去驱动数据总线,则它将继
续参加这一轮的识别,并且利用新移出的一位来决定本身的响应。
上述移位和判别过程要进行72次,最后有一块卡保留下来,该卡被指定了一个句柄,也不再参与下一轮的识别过程。同样,在紧接的一轮识别过程中,又有一块卡被识别并赋予一个新的句柄。重复上述过程,每块卡都会被识别且拥有一个相应的句柄。
当系统中的所有PnP卡皆被正确识别后,就可以根据每个卡的句柄对相应的卡进行资源配置工作了。这部分工作纯粹是由PnP资源管理软件来完成的。
2 DSP与ISA总线PnP卡的硬件接口技术
从前面的叙述可以看出,ISA总线PnP卡与非PnP卡对是否为PC硬件环境并不作要求,只需用户所设计的总线符合ISA标准即可。以前针对非PnP的老ISA卡设计的ISA插槽同样适用于PnP卡,仅在软件上做相应的改动即可。
3 DSP对PnP卡的识别技术
DSP对PnP卡的识别过程与微机对PnP卡的识别过程是一模一样的,图2给出了DSP对PnP卡的识别程序流程。[!--empirenews.page--]
表1给出了利用上述方法对三个PnP卡的识别结果,其中两块PnP卡是Accton公司设计的10M以太网卡,另一块是利用Crystal公司的CS4235设计的3D声卡。
从表1可清楚看到,由于网卡是同一厂家生产的,故其序列标识符的前四个字节相同。同时根据DSP对PnP卡的识别流程可知,第一轮可识别出声卡,第二轮识别出网卡2,最后识别出网卡1。
4 DSP对PnP卡的资源配置
本文以NE2000兼容网卡为例,通过对I/O端口地址的配置来阐述DSP是如何对PnP卡进行资源配置的。该网卡使用的芯片为Realtek公司生产的RTL8019,芯片中I/O配置寄存器如表2所示。
当识别出该网卡后,就可把该网卡的资源数据读出,下面就是从该PnP卡上读出的有关I/O端口地址配置的资源:
TAG I/O Format
Item byte 47H
I/O information 00H
Min.I/O base bits 7-0 20H
Min.I/O base bits 15-8 02H
Max.I/O base bits 7-0 80H
Max.I/O base bits 15-8 03H
Base alignment 20H
Range length 20H
从上面的资源数据可以看出,该网卡的I/O端口可以配置为220H到380H之间的地址空间,占用的空间范围为20H,同时要求该地址的步进大小为20H,即只能选择220H~23FH,240H~25FH等,依此类推。现假设要给该网卡配置地址空间为300H~31FH,则只需给I/O配置寄存器60H写入03H,61H写入00H即可。对IRQ、DMA的配置与I/O端口的配置过程是一样的。
5 避开PnP协议“关键字”的接口方法[3]
从上述PnP卡的识别与配置过程可见,如果是在PC机环境中,那么这一过程可自动完成;而在用户所设计的系统中,这一过程就显得有些烦琐,且意义不是很大。能不能避开PnP协议直接对每块PnP卡进行编程,就象对老的ISA卡那样操作呢?实际上,大多数芯片确实提供了这种简洁、快速的方法,统称为“某某公司关键字”接口方法。以前文中所述声卡为例介绍这种接口方法。下面所给出的五个步骤完成后,该声卡就和老的ISA声卡操作过程一样了;唯一的不足是如果系统中使用了两块该类型的声卡,即使它们的序列标识符不同,该方法也失效。[!--empirenews.page--]
(1)DSP送32字节“Crystal Key”到地址端口279H,该PnP卡就马上进入配置状态。这32字节数据为:
96,35,9A,CD,E6,F3,79,BC,5E,AF,57,2B,15,8A,C5,E2,F1,F8,7C,3E,9F,4F,27,13,09,84,42,A1,D0,68,34,1A;
(2)DSP送句柄号到279H;
(3)DSP直接配置每个逻辑器件的配置寄存器;
(4)DSP送79H到279H激活CS4235;
(5)DSP禁止该PnP卡参与将来的PnP循环。