极速赛车APP下载

用I/O命令访问PCI总线设备配置空间

电脑杂谈  发布时间:2019-08-30 02:05:24  来源:网络整理

太阳能手机充电 电路_车载手机充电器电路图_车载手机充电慢

摘要:通过对PCI协议配置模式的预测,提出一种直接用I/O命令访问PCI总线设备配置空间的方式,给出了相应的C语言程序,并在实际应用中受到验证,从而在大多数情况下导致了复杂的驱动程序开发。

关键词:PCI总线配置空间 操作系统

PCI总线推出以来,以其独有的特点深受很多厂商的亲睐,已经变成计算机扩展总线的主流。目前,国内的许多科技人员早已具有研发PCI总线接口设备的素质。但是PCI总线的编程科技,也就是对PCI总线设备的操作科技,一直是一件让技术人员觉得难受的事情。PCI总线编程的核心科技是对相应板卡配置空间的理解和访问。一般工具编程人员基于对软件设施原理的生疏,很难理解并操作配置空间,希望软件开发员工直接告诉你们怎么操作;而PCI总线硬件开发人员虽深刻政治解了其含义,在没有太多编程经验地前提下,也难于轻易地操作PCI板卡。结果大多是软件技术人员花费少量时间和精力去学习DDK、WINDRVER等驱动程序开发工具。

作者在开发PCI总线接口设备时,经过对PCI总线协议的深入探究,从协议原本的视角出发,找到一种方面而便捷的PCI配置空间操作方法,只使用简洁的I/O命令就能找到特定的PCI总线设备并对其所有的配置空间进行读写操作。一旦读得其配置空间的内容,即可中受到担任系统对该PCI总线设备的资源分配。

1 PCI总线配置空间及配置模式

为减少各PCI设备在资源的挤占上发生冲突,PCI总线采用即插即用协议。即在平台搭建时由操作系统按照各设施的规定统一分配资源,资源分配的信息由平台读取各PCI设备的配置空间寄存器,并在操作系统内部备份。各PCI设备有其独自的配置空间,设计者通过对积压设备(或接口)的ISDEL引脚的驱动区分不同设备的配置空间。配置空间的前64个字节称为配置空间的预定自区,它对每个设备都具备同样的定义且需要被支持;共后的空间称为设备关联区,由设施制造商根据需要定义。与编程有关的配置空间信息主要有:

(1)设备号(Device ID)及经销商号(VendorID),配置空间偏移量为00h,用于对各PCI设备的区别和查找。为了确保其唯一性,VendorID应当向PCI特别兴趣小组(PCI SIG)申请而得到。

(2)PCI基地址(PCI Base Address),配置空间偏移量为10~24h,设备通过设置可读写的高位数值来向操作系统指示所需资源空间的大小。比如,某设备必须64K字节的存储空间,可以将配置空间的某基地址寄存器的高16位设成可读写的,而将低16位置为0(只可读)。操作系统在构建时,先向所有位写1,实际上只有高16位被接收而被置成了1,低16位仍为0.这样操作系统读取该通配符时,返回值为FFFF0000h车载手机充电器电路图,据此操作系统可以确定其必须的空间大小是64K字节,然后分配一段空闲的存储空间并向该寄存器的高16位填写其地址。

其它可能与编程有关的配置空间的定义及地址请参看参考文献[1]。

由于PC-AT兼容平台CPU只有存储和I/O两种空间,没有专用的配置空间,PCI协议要求运用特定的I/O空间操作驱动PCI桥路转换成配置空间的操作。目前存在两种转化体系,即配置模式1#和配置体系2#。配置模式2#在新的设计中将不再被引入,新的设计应使用配置模式1#来形成配置空间的物理操作。这种模式使用了两个特定的32位I/O空间,即CF8h和CFCh。这两个空间对应于PCI桥路的两个寄存器,当桥路看到CPU在局部总线对这两个I/O空间进行双字操作时,就将该I/O操作转变为PCI总线的配置操作。寄存器CF8h用于形成配置空间的地址(CONFIG-ADDRESS),寄存器CFCh用于存放配置空间的读写数据(CONFIG-DATA)。

配置空间地址寄存器的格式如图1。

CF8H(局部总线):

车载手机充电器电路图_太阳能手机充电 电路_车载手机充电慢

当CPU发出对I/O空间CFCh的操作时,PCI桥路将检测配置空间地址寄存器CF8h的31位。如果为1,就在PCI总线上形成一个相应的配置空间读或写操作,其地址由PCI桥路根据配置空间地址寄存器的内容作如图2所示的转换。

CFCh (局部总线):

极速赛车APP下载设备号被PCI桥路译码产生PCI总线地址的高位地址,它们被设计者用作IDSEL信号来辨别相应的PCI设备。6位寄存器号用于寻址该PCI设备配置空间62个双字的配置寄存器(256字节)。功能号用于区别设备的某特定用途的配置空间,对常用的单用途设备为000。某中PCI插槽的总线号随平台(主板)的不同稍有差别,大多数PC机为1,工控机可能为2或3。为了找到某设施,应在平台的各个总线号上查找,直到定位。如果在0~5号总线上不能发现该设备,即可认为该设备不存在。

理解了上述PCI协议里的配置模式后,就可以直接对CF8h和CFCh两个双字的I/O空间进行操作,查找某个PCI设备并访问其配置空间,从而受到操作系统对该PCI设备的资源分配。

2 用I/O命令访问PCI总线配置空间

要访问PCI总线设备的配置空间,必须先查找该设备。查找的基本依据是各PCI设备的配置空间里都存有特定的设备号(DeviceID)及经销商号(Vendor ID),它们占用配置空间的00h地址。而查找的目的是获取该设施的总线号和仪器号。查找的基本过程如下:用I/O命令写配置空间的地址寄存器CF8h,使其最高位为1,总线号及设施为0,功能号及寄存器号为0,即往I/O端口CF8h80000000h;然后用I/O命令调用配置空间的数据寄存器CFCh。如果该寄存器值与该PCI设备的DeviceID及Vendor ID不相符,则依次递减设备号/总线号,重复上述操作直至找到该设备为止。如果查完所有的设备号/总线号(1~5)仍不能找到该设施,则必须考量硬件上的弊端。对于设备车载手机充电器电路图,只要仪器配置寄存器相应的功用号值,其余方法与单功能设备一样。

如查找设备号为9054h,销售商号为10b5的单用途PCI设备,用VC++6。0编写的程序如下:

char bus;char device;

unsigned int ioa0,iod;

int scan( )

{

bus=0;device=0;

车载手机充电器电路图_车载手机充电慢_太阳能手机充电 电路

for(char i=0;i

for(char j=0;j

bus=i; device=j;

ioa0=0x80000000+bus*0x10000

+(device*8)*0x100;

_outpd(0xcf8,ioa0);

iod=_inpd(0xcfc);

if (iod0= =0x905410b5) return 0;

}

}

retrn -1

}

车载手机充电慢_车载手机充电器电路图_太阳能手机充电 电路

调用子程序scan( ),如果返回值为-1,则没有找到该PCI设备。如果返回值为0,则找到了该PCI设备。该设施的总线号和设备号分别在全局函数bus和device中,利用这两个变量就能随意对该设施的配置空间进行访问,从而受到分配的资源信息。假设该PCI设备占用了4个资源空间,分别对应于配置空间10h~1ch,其中前两个为I/O空间,后两个为内存空间,若定义其基地址分别为ioaddr1,ioaddr2,memaddr1,memaddr2,相应的程序如下:

unsigned short ioaddr1,ioaddr2;

极速赛车APP下载unsigned int memaddr1,memaddr2;

极速赛车APP下载unsigned int iobase,ioa;

void getbaseaddr(char bus,char device);

{

iobase=0x80000000+bus*0x10000+(device*8)*0x100;

ioa=iobase+0x10;/*寻址基地址寄存器0*/

_outpd(0xcf8,ioa);

ioaddr1=(unsignedshort)_inpd(0xcfc)&0xfffc;

/*屏蔽低两位和高16位*/

极速赛车APP下载ioa=iobase+0x14; /*寻址基地址寄存器1*/

太阳能手机充电 电路_车载手机充电慢_车载手机充电器电路图

_outpd(0xcf8,ioa);

ioaddr2=(unsignedshort)_inpd(0xcfc)&0xfffc;

ioa=iobase+0x18;/*寻址基地寄存器2*/

_outpd(0xcf8,ioa);

memaddr1=_inpd(0xcfc) & 0xfffffff0;

/*屏蔽低4位*/

ioa=iobase+0x1c; /*寻址基地址寄存器3*/

_outpd(0xcf8,ioa);

memaddr2=_inpd(0xcfc) & 0xfffffff0;

}

对于I/O基地址,最低两位D0、D1固定为01,对地址本来无效,应当被屏蔽。对PC-AT兼容机,I/O有效地址为16位,因此高位也应被屏蔽。对于内存地址,最低位D0固定为0,而D1~D3用于指示该地址的一些物理特征[1],因此其低4位地址应该被屏蔽。需要强调的是该内存地址是平台的物理地址,在WINDOWS运行于保护机制时,需要经过转化得到相应的线性地址从而对该存储空间进行直接读写。介绍该转化方式的极速赛车APP下载相关的文章较为常见,此处不再赘述。

上述程序给出了调用配置空间里的基地址的方式。另有相当多PCI设备借助配置空间的设施关联区来修改该设施的工作状况,可随意地用I/O命令进行相应的修改,无须编写繁杂的驱动程序。在开发PCI视频图像采集卡的过程中,该方式受到了实际应用。


本文来自电脑杂谈,转载请注明本文网址:
http://www.0531mai.com/a/shumachanpin/article-121037-1.html

    相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 吴傲雪
      吴傲雪

      抗日得时候多少人抵制日货又能怎么样

    极速赛车双面盘 极速赛车手机版下载 极速赛车手机版下载 极速赛车APP 极速赛车双面盘 极速赛车APP下载 极速赛车手机版下载 极速赛车手机版下载 极速赛车手机官网 极速赛车APP下载