您的位置 首页 汽车

PCI总线与接口技能

简单地探讨PCI配置空间,PCIROM,以及PCIBIOS的调用。1、PCI总线的发展历史1990年,起源于Intel架构开发实验室,全称是PeripheralCom…

简略地讨论PCI装备空间,PCI ROM,以及PCI BIOS的调用。

1、PCI总线的开展前史

1990年,起源于Intel架构开发实验室,全称是Peripheral Component Interconnect,首要在服务器中运用,替代了本来的MCA以及EISA,EISA直到2000年才宣告退出前史舞台。直到1994年,才开端在PC上广泛运用,替代了本来的VESA。在1995年的中期,苹果电脑也开端运用PCI总线电气标准。后来PCI也增加了许多新的功用,比方66MHz,3.3V标准,以及133MHz的PCI-X。2004年,呈现了PCI-Express,本来的PCI总线电气标准被称为了传统PCI(Conventional PCI)。

2、PCI总线地址空间

独立的内存以及IO接口,由软件分配。而别的一个地址空间-PCI装备空间(PCI Configuration Space),运用独立的地址,答应软件决议每一个连入的设备需求多少内存以及IO地址空间。经过设备装备空间寄存器的设置,每一个设备至多可以请求6个内存以及IO地址空间。PCI装备空间还包括了连入设备的相关信息,依据这些信息,操作体系可以方便地运用相应的驱动来运用这些设备。为了使PCI总线公平地运用PCI总线,供给了一种等候计时的功用,计时器在设备获得了总线运用权时以PCI时钟信号的速率开端计时,直到减为零,设备开释总线占有权。

3、关于PCI的中止

四个中止,归于电平触发方法(边缘触发方法的中止简单丢掉)。单功用设备仅仅运用INTA#,多功用设备运用多个中止。四个中止经过PCI桥(两个PCI总线之间)映射到体系中止上,所以软件无从得知是那个PCI中止。后来的PCI加入了音讯信号中止的机制,PCI-Express运用的也是音讯信号中止机制,而没有物理中止线。

4、PCI电气标准

PCI卡的尺度,长度为174.63mm,高度为36.068~106.68mm。一下是一幅PCI个引脚界说的图。

5、PCI设备的初始化

机器上电的时分,装备软件有必要扫描PCI总线,确认有哪些PCI设备,然后加载相应的驱动程序。一切PCI设备都有必要完结PCI协议规矩有必要的装备寄存器。而对PCI装备拜访实际上便是拜访设备的装备寄存器。

6、PCI装备空间

装备空间各项数据阐明:

厂商识别码(Vendor ID):标识设备的制造者,有PCI SIG来分配。0FFFH表明未装备任何设备。

设备识别码(Device ID):标识特定的设备,详细代码由厂商分配。

版别ID,Revision ID:指定一个设备特有的版别号。

Class Code(分类代码):用于设备分类。0BH处为根本分类代码;0A处为子分类代码;09H处为标识一个专用的寄存器级编程接口,便于设备的软件可以与设备交互数据。

指令寄存器(Command):为发出和呼应PCI总线指令供给了对设备大略的操控。

状况寄存器(Status):用于记载PCI总线有关操作的状况信息,体系对该寄存器的读操作无特别要求。

基地址寄存器(Base Address Registers):供地址映射运用,使PCI的IO映射以及内存映射与详细设备无关。

扩展ROM的基地址寄存器(Expansion ROM Base Address):用来处理那些装备了部分EPROM或许Flash ROM的基地址和巨细。Cache巨细寄存器:用来指定体系中Cache行的长度,每个参与Cache协议的设备都要运用该寄存器。

延时计时器:该寄存器以PCI总线时钟为单位指定PCI总线主设备的推迟计时器。

内含自测寄存器:可选的寄存器,用作内含自测试的操控与状况寄存器。

中止引脚寄存器(Interrupt Pin):用来表明设备运用了哪个PCI中止引脚。

中止线寄存器(Interrupt Line):用来表明设备中的中止引脚与体系可编程操控器8259的哪个中止输入线相连接。

MAX_GNT表明设备需求多长的突发传输时刻。MAX_LAT表明对PCI总线进行拜访的频频程度。

Card CIS Pointer:由在卡总线和PCI之间同享芯片的设备完结。

子体系厂商标识和子体系标识(Subsystem Vendor ID):用于专一地标识设备所驻留的刺进卡和子体系。即插即用操作体系可以定位正确的驱动程序,装载到存储器。

7、PCI扩展ROM

经过履行扩展ROM寄存的代码来完结与设备相关的初始化,一起也或许完结体系引导功用。该机制答应扩展ROM中含有几个不同的映像,以习惯不同的机器和处理器结构。

但凡支撑扩展ROM的设备,有必要支撑按恣意字节组合方法对ROM进行拜访,特别强调的是要支撑双字(DWORD)拜访。扩展ROM中的信息组织要与现有的适合于ISA和EISA以及MC适配器的Intel X86扩展ROM中的头标区兼容。头标区中所给信息经过了扩大,然后使适配器的功用进一步优化运用,然后可以使扩展ROM中的代码在运行期间所运用的存储空间最小。

PCI扩展ROM中代码从不在原地履行,而是将代码从ROM中拷贝到RAM中履行。这样可以在初始化和运行时动态地确认代码长度,而且可以改进代码的履行速度。

PCI关于不同的体系和处理器装备都应该包括其编码映像。每个映像由ROM首区(映像开端处)+数据装备区(映像的第64KB范围内)组成。

ROM首区内容

偏移

长度

阐明

00H~01H

2

55AAH

ROM标签字节

02H~17H

22

XX

保存

18H~19H

2

XX

到PCI数据结构指针

数据装备区

偏移量

长度

阐明

偏移量

长度

阐明

00H~03H

4

标签,字符串”PCID”

0DH~0FH

3

分类代码

04H~05H

2

供货商识别码

10H~11H

2

映像长度

06H~07H

2

设备识别码

12H~13H

2

代码数据的修正等级

08H~09H

2

对重要产品数据的指针

14H~14H

1

代码类型

0AH~0BH

2

PCI数据结构长度

15H~15H

1

指示标志

0CH~0CH

1

PCI数据结构修正

16H~17H

2

保存

8、关于PCI设备的初始化

体系POST首要查看PCI设备在装备空间是否运用了扩展ROM基地址寄存器(即是否有扩展ROM),若运用了,POST将ROM映射到地址空间中一个未用的部分。

9、PCI BIOS

其主要效果有以下两点:

  • 为应用软件或许PCI总线设备或许板卡供给服务调用。
  • 初始化每个体系PCI设备。PCI BIOS轮番查询每个PCI插槽,查找存在的PCI设备,读取存在设备装备空间的头标区,以决议设备的厂商号,类型和存储需求等内容。而且将分配的I/O或存储空间地址回写到每个设备装备空间的基地址寄存器中。
  • PCI BIOS调用的进口以及回来值阐明,对80×86机器,调用功用号为1AH,进口参数在AX中,回来值在AH中。下面罗列的是比较常用的,更多阐明请参阅PCI BIOS规矩阐明书。

功用阐明

进口参数(AX)

回来值阐明

出口参数(AH)

PCI BIOS存在查询

B101H

成功调用

00H

查找PCI 设备

B102H

不支撑的功用

81H

查找PCI 设备的类代码

B103H

过错的厂商号

83H

发生特别周期

B106H

未找到设备

86H

读装备寄存器-单字节操作

B108H

过错的寄存器号

87H

读装备寄存器-单字操作

B109H

设置失利

88H

读装备寄存器-双字操作

B10AH

缓冲区太小

89H

写装备寄存器-单字操作

B10BH

写装备寄存器-单字节操作

B10CH

写装备寄存器-双字节操作

B10DH

获得中止线路选项

B10EH

设置PCI中止

B10FH

  • 下面是一个关于经过PCI BIOS调用读PCI装备寄存器的比如:
    1. .386
    2. ;FUNCTIONCODE
    3. PCI_FUNCTION_ID=0B1H
    4. PCI_BIOS_PRESENT=01H
    5. FIND_PCI_DEVICE=02H
    6. FIND_PCI_CLASS_CODE=03H
    7. GENERATE_SPECIAL_CYCLE=06H
    8. READ_CONFIG_BYTE=08H
    9. READ_CONFIG_WORD=09H
    10. READ_CONFIG_DWORD=0AH
    11. WRITE_CONFIG_BYTE=0BH
    12. WRITE_CONFIG_WORD=0CH
    13. WRITE_CONFIG_DWORD=0DH
    14. GET_IRQ_ROUTING_OPTIONS=0EH
    15. SET_PCI_IRQ=0FH
    16. ;RETURNCODE
    17. SUCCESSFUL=00H
    18. FUNC_NOT_SUPPORTED=81H
    19. BAD_VENDOR_ID=83H
    20. DEVICE_NOT_FOUND=86H
    21. BAD_REGISTER_NUMBER=87H
    22. SET_FAILED=88H
    23. BUFFER_TOO_SMALL=89H
    24. VID=0H
    25. DID=2H
    26. PCICMD=4H
    27. PCISTS=6H
    28. RID=8H
    29. CLCD=9H
    30. CALN=0CH
    31. LAT=0DH
    32. HDR=0EH
    33. BIST=0FH
    34. BADR0=10H
    35. BADR1=14H
    36. BADR2=18H
    37. BADR3=1CH
    38. BADR4=20H
    39. BADR5=24H
    40. EXPOM=30H
    41. INTLN=3CH
    42. INTPIN=3DH
    43. MINGNT=3EH
    44. MAXLAT=3FH
    45. SSTACKSEGMENTSTACKPARAUSE16
    46. DW64DUP(?)
    47. SSTACKENDS
    48. DATASEGMENTPARAUSE16
    49. MESDBPCICARDNOTFOUND!$
    50. MES0DB***********************PCICONFIGINFO*****************************,13,10,$
    51. MES1DBPCIBIOSNOTFOUND!,10,13,$
    52. MES2DBPCICONFIGREADERROR!$
    53. MES3DBVendorIdentification:10E8$
    54. MES4DBDeviceIdentification:5933$
    55. MES5DBPCICommandRegister:$
    56. MES6DBPCIStatusRegister:$
    57. MES7DBRevisionIdentificationRegister:$
    58. MES8DBClassCodeRegister:$
    59. MES9DBCacheLineSizeRegister:$
    60. MES10DBMasterLatencyTimer:$
    61. MES11DBHeaderType:$
    62. MES12DBBuilt-inSelf-test:$
    63. MES13DBBaseAddressRegister0:$
    64. MES14DBBaseAddressRegister1:$
    65. MES15DBBaseAddressRegister2:$
    66. MES16DBBaseAddressRegister3:$
    67. MES17DBBaseAddressRegister4:$
    68. MES18DBBaseAddressRegister5:$
    69. MES19DBExpansionRomBaseAddress:$
    70. MES20DBInterruptLine:$
    71. MES21DBInterruptPin:$
    72. MES22DBMinimumGrant:$
    73. MES23DBMaximumLatency:$
    74. BNDB?
    75. DN_FNDB?
    76. R_VALUEDD?
    77. V_VIDDW?
    78. V_DIDDW?
    79. V_PCICMDDW?
    80. V_PCISTSDW?
    81. V_RIDDB?
    82. V_CLCDDD?
    83. V_CALNDB?
    84. V_LATDB?
    85. V_HDRDB?
    86. V_BISTDB?
    87. V_BADR0DD?
    88. V_BADR1DD?
    89. V_BADR2DD?
    90. V_BADR3DD?
    91. V_BADR4DD?
    92. V_BADR5DD?
    93. V_EXPOMDD?
    94. V_INTLNDB?
    95. V_INTPINDB?
    96. V_MINGNTDB?
    97. V_MAXLATDB?
    98. DATAENDS
    99. CODESEGMENTPARAUSE16
    100. ASSUMECS:CODE,DS:DATA,SS:SSTACK
    101. START:MOVAX,DATA
    102. MOVDS,AX
    103. MOVAX,0B101H;查找PCIBIOS
    104. INT1AH
    105. JNCJUDGE1;假如CF被置位,则PCIBIOS不存在
    106. MOVDX,OFFSETMES1;显现不存在信息
    107. MOVAH,09H
    108. INT21H
    109. JMPEXIT
    110. JUDGE1:CMPAH,00H
    111. JZJUDGE2;假如不等,则PCIBIOS不存在
    112. MOVDX,OFFSETMES1;显现不存在信息
    113. MOVAH,09H
    114. INT21H
    115. JMPEXIT
    116. JUDGE2:CMPEDX,ICP;假如EDX中放的是”PCI”则阐明PCIBIOS存在
    117. JZFIND
    118. MOVDX,OFFSETMES1;不然过错的设备
    119. MOVAH,09H
    120. INT21H
    121. JMPEXIT
    122. FIND:MOVAX,0B102H;找到了PCIBIOS,再查找指定PCI设备
    123. MOVCX,5933H;板卡的设备的ID
    124. MOVDX,10E8H;板卡的供货商ID
    125. MOVSI,0;索引
    126. INT1AH
    127. JNCREAD
    128. MOVDX,OFFSETMES
    129. MOVAH,09H
    130. INT21H
    131. JMPEXIT
    132. READ:MOVBN,BH;保存总线号
    133. MOVDN_FN,BL;保存设备号
    134. CALLKENTER;回车换行
    135. MOVDX,OFFSETMES0
    136. MOVAH,09H
    137. INT21H
    138. CALLKENTER;回车换行
    139. MOVDX,OFFSETMES3;输出供给厂商ID
    140. MOVAH,09H
    141. INT21H
    142. CALLKENTER
    143. MOVDX,OFFSETMES4;输出设备的ID
    144. MOVAH,09H
    145. INT21H
    146. CALLKENTER
    147. MOVAX,0B109H;读指令寄存器,单字操作
    148. MOVBH,BN
    149. MOVBL,DN_FN
    150. MOVDI,PC%&&&&&%MD
    151. INT1AH
    152. JCERROR
    153. MOVDX,OFFSETMES5;显现PCI指令寄存器内容
    154. MOVAH,09H
    155. INT21H
    156. MOVAX,02H
    157. CALLSHOW
    158. CALLKENTER
    159. MOVAX,0B109H;读PCI状况寄存器内容,单字操作
    160. MOVBH,BN
    161. MOVBL,DN_FN
    162. MOVDI,PCISTS
    163. INT1AH
    164. JCERROR
    165. MOVDX,OFFSETMES6;显现状况寄存器内容
    166. MOVAH,09H
    167. INT21H
    168. MOVAX,02H
    169. CALLSHOW
    170. CALLKENTER
    171. MOVAX,0B108H;版别号,单字节操作
    172. MOVBH,BN
    173. MOVBL,DN_FN
    174. MOVDI,RID
    175. INT1AH
    176. JCERROR
    177. MOVDX,OFFSETMES7;显现版别号
    178. MOVAH,09H
    179. INT21H
    180. MOVAX,01H
    181. CALLSHOW
    182. CALLKENTER
    183. MOVAX,0B108H;读中止引脚信号,单字节操作
    184. MOVBH,BN
    185. MOVBL,DN_FN
    186. MOVDI,INTLN
    187. INT1AH
    188. JCERROR
    189. MOVDX,OFFSETMES20;显现中止引脚
    190. MOVAH,09H
    191. INT21H
    192. MOVAX,01H
    193. CALLSHOW
    194. CALLKENTER
    195. MOVAX,0B10AH;读装备寄存器,双字操作
    196. MOVBH,BN;PCI设备的总线号
    197. MOVBL,DN_FN;设备以及功用号,进口参数
    198. MOVDI,BADR0
    199. INT1AH
    200. JCERROR
    201. MOVDX,OFFSETMES13;基址寄存器0
    202. MOVAH,09H
    203. INT21H
    204. MOVAX,04H
    205. CALLSHOW
    206. CALLKENTER
    207. MOVAX,0B10AH;读装备寄存器,双字操作
    208. MOVBH,BN;PCI设备的总线号
    209. MOVBL,DN_FN;设备及功用号,进口参数
    210. MOVDI,BADR1
    211. INT1AH
    212. JCERROR
    213. PUSHECX
    214. MOVDX,OFFSETMES14;基址寄存器1
    215. MOVAH,09H
    216. INT21H
    217. MOVAX,04H
    218. POPECX
    219. CALLSHOW
    220. CALLKENTER
    221. MOVAX,0B10AH;读装备寄存器,双字操作
    222. MOVBH,BN;PCI设备的总线号
    223. MOVBL,DN_FN;设备及功用号,进口参数
    224. MOVDI,BADR2
    225. INT1AH
    226. JCERROR
    227. MOVDX,OFFSETMES15;基地址寄存器2
    228. MOVAH,09H
    229. INT21H
    230. MOVAX,04H
    231. CALLSHOW
    232. CALLKENTER
    233. MOVAX,0B10AH;读装备寄存器,双字操作
    234. MOVBH,BN;PCI设备的总线号
    235. MOVBL,DN_FN;设备及功用号,进口参数
    236. MOVDI,BADR3
    237. INT1AH
    238. JCERROR
    239. MOVDX,OFFSETMES16;基地址寄存器3
    240. MOVAH,09H
    241. INT21H
    242. MOVAX,04H
    243. CALLSHOW
    244. CALLKENTER
    245. MOVAX,0B10AH;读装备寄存器,双字操作
    246. MOVBH,BN;PCI设备的总线号
    247. MOVBL,DN_FN;设备及功用号,进口参数
    248. MOVDI,BADR4
    249. INT1AH
    250. JCERROR
    251. MOVDX,OFFSETMES17;基地址寄存器4
    252. MOVAH,09H
    253. INT21H
    254. MOVAX,04H
    255. CALLSHOW
    256. JMPEXIT
    257. ERROR:CALLKENTER
    258. MOVDX,OFFSETMES2;显现读过错信息
    259. MOVAH,09H
    260. INT21H
    261. EXIT:MOVAH,4CH;回来DOS
    262. INT21H
    263. KENTERPROC
    264. MOVDL,0AH
    265. MOVAH,02H
    266. INT21H
    267. MOVDL,0DH
    268. MOVAH,02H
    269. INT21H
    270. RET
    271. KENTERENDP
    272. SHOWPROCNEAR;显现子程序
    273. PUSHDX
    274. PUSHDI
    275. PUSHBX
    276. MOVDI,OFFSETR_VALUE
    277. MOV[DI],ECX;保存获取的数据
    278. ADDDI,AX
    279. DECDI
    280. MOVCX,AX
    281. C1:MOVAL,[DI]
    282. PUSHAX
    283. SHRAL,4
    284. ANDAL,0FH;取高4位
    285. CMPAL,0AH;是否是A以上的数
    286. JBC2
    287. ADDAL,07H
    288. C2:ADDAL,30H
    289. MOVBH,AL
    290. POPAX
    291. ANDAL,0FH;取低4位
    292. CMPAL,0AH
    293. JBC3
    294. ADDAL,07H
    295. C3:ADDAL,30H
    296. MOVBL,AL
    297. MOVAH,2;显现十六进制数对应的ACSII码
    298. MOVDL,BH
    299. INT21H
    300. MOVDL,BL
    301. INT21H
    302. DECDI
    303. LOOPC1
    304. POPBX
    305. POPDI
    306. POPDX
    307. RET
    308. SHOWENDP
    309. CODEENDS
    310. ENDSTART

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/238044.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部