Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15530187
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: 嵌入式

2009-09-11 13:59:21

  为什么任意申请一块cpu中的未用io就可以作为PCI控制寄存器,因为对cpu上所有未使用的空闲io的读写操作,都将被路由到PCI总线,在pci总线上产生地址读写时序[luther.gliethttp].
  1300系统中有一个内部总线,这个总线共4G空间,1300作为主设备时,其空间分为三部分,
第一部分是MMIO(主要是那些特殊的寄存器,比如控制video,audio,和其他iic之类的),

第二部分是物理内存(即板上的SDRAM)。
其余的部分为PCI空间,也就是说,除了MMIO和内存之外,所有的其他访问都会寻址到PCI上去,在PCI总线上产生时序。

  如果1300作为从设备挂在主机的PCI总线上时,则会把其物理内存通过PCI配置空间寄存器影射到主机的寻址空间中。

下面该段摘自:
http://bbs.driverdevelop.com/read.php?tid-18161.html
  很抱歉我这几天没来。我不是做PCI开发的,所以也不是很熟悉。只是有些粗略的概念。关于PCI的MEMORY如何访问,还要看你用的是什么接口芯片,有的可以通过所映射的内存地址直接访问有的则要通过端口访问还有的虽然映射到一段内存地址中但要通过对相应的地址写命令字才可访问也就是说,把内存 地址当端口来操作。你需要看看你所用的借口芯片的资料,还需要测试一下。


老罗很早就提到过这个东西,应该是电子设计课程上面。
  当时就看他在黑板上画时序图,实际上不懂。后来因为做jtag卡,用windriver
  的时候知道了更多的pci的东西,但是那些BAR0,BAR1还是很模糊。
  这次,是必须知道了。我得自己亲自写code在pci总线上把某块特殊的卡找到。
  
  这里,对一些概念稍稍清楚些。
  这个对话:
  -----------------I asked nickst and hhl-----------------------
  1. pci configuration register like vendor id, bar0, bar1,.....
   都是在pci卡上的吗?是不是在那个rom里面?
  
  2. pci上的io space, memory space都会被映射到cpu 的memory space,
   这个地址通常被bar0, bar1...指定
  
  3. 问题, 一个32位系统,他的pci卡上ram如果有8G,是不是没法访问到?
   因为4G空间问题。
   (我唯一能想到的是,除非那8G又挂在那个pci卡的某个总线上,通过
   某个controller来选择访问)
  
  4. 1300过去内存是挂在什么总线上的?
  ----------------------------answer-------------------------
  nickst 说:
  1 PCI 配置空间的寄存器一般都在接口芯片里。即便是有外接的ROM,也是在上电时有PCI接口芯片读入的
  2 是
  3 我觉得没法访问,除非有controller。
  4 1300系统中有一个内部总线,这个总线共4G空间,1300作为主设备时,其空间分为三部分,第一部分是MMIO(主要是那些特殊的寄存器,比如控制video,audio,和其他iic之类的),
  第二部分是物理内存(即板上的SDRAM)。其余的部分为PCI空间,也就是说,除了MMIO和内存之外,所有的其他访问都会寻址到PCI上去,在PCI总线上产生时序。
  如果1300作为从设备挂在主机的PCI总线上时,则会把其物理内存通过PCI配置空间寄存器影射到主机的寻址空间中。
  
  以上是我的理解,可能有不确切之处。
  ---------------我说-------------------------------------
  恩,大家都是英雄,英雄所见略同
  这下觉得清晰了。
  
  -------------------------------------------------------
  
  另外:
  我在想,每块pci卡应该都有自己的一个基准地址,这个基准地址不一定是0,
  而是相对bar0, bar1,。。。。就是说,在pci configuration header里面
  有标准的256bytes, 其中有base address register. 造pci卡的人,他的卡
  上面的所有资源寻址都是基于bar的。 这样,无论bar在系统里面是多少,
  bar+1永远是pci卡上面的同一个地方。 yeah!!!
阅读(2437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~