dake1025
驱动牛犊
驱动牛犊
  • 注册日期2007-06-12
  • 最后登录2007-08-31
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:5232回复:6

PCI 驱动的基地址寄存器??

楼主#
更多 发布于:2007-08-11 22:01
PCI的配置寄存器中基地址寄存器到底是什么意思啊?到底干什么用的?
在设计硬件的时候,就要把各个要映射的地址存在到配置寄存器的基地址寄存器中吗?还是怎么用,我越看越糊涂?

最新喜欢:

icewindhearticewin...
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-15 22:46
呵呵  需要了解PCI配置空间和PCI存储空间两个基本概念

CPU对PCI 设备的配置,是为了完成PCI 设备存储空间的地址分配、PCI 设备功能设置等工作。配置操作时,CPU通过北桥芯片实现设备片选。
配置寄存器组内保留了对PCI 设备的基本特性进行详尽说明的可读信息,CPU读取这些信息后,就可以为PCI 设备设定符合需要的配置内容,从而实现自动配置。这些可读信息包括:
Vendor ID :设备供应商编号,由PCI  SIG 国际组织分配。
Device ID :特定设备编号,由设备供应商分配。
Revision ID :设备的特定版本号,由设备供应商分配。
Class Code :设备的功能类别编号。
Header Type :指示Header 中从地址10H到3FH区域的内容格式,同时指示该设备是否为多功能设备。
PCI 存储空间不同于PCI 配置空间。PCI 存储空间可以存放PCI 设备的特殊功能寄存器,也可以用做数据缓冲和存储区域。
PCI 存储空间分为MEMORY空间和I/O空间两类,它们独立寻址,并使用不同的总线操作命令进行访问。MEMORY空间适用于设备功能寄存器较多或数据流量较大的场合,例如网口芯片、PCI-PCI 桥等。I/O 空间适用于设备功能寄存器较少或数据流量较小的场合,例如串口芯片、LED控制寄存器等。但在地址空间比较充裕的条件下,也有把范围较小的存储区放入MEMORY空间的做法。
操作响应者根据操作发起者发出的总线操作命令类型,来识别当前操作是指向MEMORY空间还是I/O空间。
配置寄存器组中会有一个或多个基址寄存器BAR(Base Address Register),用于保存指向PCI 存储空间的指针,同时BAR中可读不可写的位数决定了该存储空间的大小。
BAR的最低位是只读位,它定义了BAR的空间属性。当BAR指向PCI  MEMORY存储空间时,该位读回为0;当BAR指向PCI  I/O存储空间时,该位读回为1。 由于BAR的这一属性,使得PCI 设备占用的存储区域是放在MEMORY空间,还是放在I/O空间,完全由设备制造商决定,用户无法修改。
单个设备/功能的PCI  MEMROY空间的容量可选取16byte~2Gbyte。但为了减少参与地址译码的地址线数量,PCI 规范建议MEMORY空间分配不小于4Kbyte。
单个设备/功能的 PCI  I/O空间的容量可选取4byte~256byte ,不允许超过256byte。

图2-4 指向PCI  I/O空间的BAR内容
访问PCI 存储空间时,都使用“BAR指针+地址偏移量”作为存储空间的访问地址。因此,为每个PCI 设备/功能分配合理的地址空间,保证设备/功能间的存储空间不发生重叠,是PCI 设备配置操作的一项重要内容。
dake1025
驱动牛犊
驱动牛犊
  • 注册日期2007-06-12
  • 最后登录2007-08-31
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-16 23:02
谢谢楼上的了!!
zlinzhu
驱动牛犊
驱动牛犊
  • 注册日期2007-06-20
  • 最后登录2007-09-13
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-20 15:15
看到过这样的话:

PCI配置寄存器提供了6个基地址寄存器,其中BASE0和BASE1用来访问其他配置寄存器的基地址,BASE0是其他配置寄存器映射到PCI端内存的基

地址,BASE1是其他寄存器映射到PCI端I/O的基地址。

可以通过PCI端内存和PCI端I/O来访问LOCAL配置寄存器与其他3种寄存器。BASE2~5四个空间提供了访问本地端所接的4个芯片(当然可以少于4

个),它们将本地端的芯片通过本地端地址(LOCAL配置寄存器中设)翻译成PCI的地址,也就是将本地的芯片映射到系统的内存或 I/O口。

是不是可以这样理解:
1。通过base0和base1,我们可以访问pci桥片(如9054)上的其他寄存器?若真是如此,如何访问呢?????
2。当有一个芯片(或说是一段空间)的基地址写到了某个基址寄存器后,我们就可以通过此基址+偏移地址访问此段空间了?若是如此,那这

个基地址该如何写到某个基址寄存器(比如base2)呢??是不是要用到base0和base1呢????
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-09-06 10:21
感谢sasafair,现在清醒了点
goldenfire
驱动牛犊
驱动牛犊
  • 注册日期2008-01-14
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-02-27 14:33
en 解释太好了
kaizitop
驱动牛犊
驱动牛犊
  • 注册日期2008-03-03
  • 最后登录2008-04-05
  • 粉丝3
  • 关注0
  • 积分90分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-04-03 20:04
sasafair讲的好,顶上去!
认认真真做事,踏踏实实做人! 说起来真容易,真做起来太难!
游客

返回顶部