sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
阅读:13896回复:58

PCI开发之小谈 ................

楼主#
更多 发布于:2007-08-16 22:38
          
       最近在潭子里转转,发现问问题的多啊!突然想起以前自己拿着规范啃的那段时间,也是难啊。。。。,因此想来忽悠两句
       断断续续做了几块PCI的插卡,后来也用了两款POWER PC的CPU,中间当然也出了一些问题,但是基本上是一些工程设计方面的,静电啊,电源什麽的,但是和PCI相关的东西还是有了一点了解。。,基本上也搞定了,在此小聊几句。
   要想深入了解PCI,不仅仅要理解PCI规范的一些东西,还要了解CPU和控制系统的架构,熟悉系统启动过程,同时还要有较强的硬件功底。。。不然很可能会晕倒的,,,比如  基地址是干吗的啊?插个PCI插卡系统就挂了呢?有比如说某某操作的时候,系统突然挂死了呢?
   .....................................
  

最新喜欢:

six211six211 kwek77kwek77
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-16 22:56
PCI开发之小谈  ................1  系统概念
PCI:Peripheral Component Interconnect  外围器件互连的缩写
            其建立了一种高性能、低成本、兼容性强的工业总线标准。在满足低端和高端桌面系统要求的基础上,还能够用于移动设备和服务器类场合。PCI 总线对3.3V和5V的应用环境都进行了定义,符合当前和未来总线发展的需要。
      PCI 芯片、插卡和母板(主板)的操作独立于CPU,使得PCI 总线能够适应CPU升级换代的变化,同时能够使用多家厂商的CPU元件。PCI 设备能够自主地完成数据传送,不需要CPU干预,因此PCI 设备的操作可以与CPU的操作并行,实现了从动画、LAN、SCSI、FDDI、硬盘,到HDTV、3D图像的高性能应用。66MHz和64bit 扩展更加提高了PCI 总线的处理能力,同时能够满足兼容性要求。
PCI 设备中的配置寄存器为PCI 系统的应用也提供了极大的方便。在一些嵌入式系统上电时,配置软件可以对PCI 系统中的PCI 设备完成自动配置,为用户实现了真正的易用性。
      

  
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-17 20:54
PCI开发之小谈  ................2  总线初识
PCI总线信号定义

系统信号
CLK (IN):系统时钟信号。对所有PCI设备来说都是输入信号,频率范围是0-33MHz,除RST#、INTA#、INTB#、INTC#、INTD#之外,所有信号都在CLK的上升沿有效
RST# (IN):PCI 复位信号。用来使PCI专用的特性寄存器、定序器和相关的信号恢复到初始状态。
数据和地址信号
AD[31::00] (T/S):数据/地址复用的输入/输出信号。在地址期时,AD[31::00]上的数据为32位物理地址。在数据期时,用于传送数据,AD[07::00]为最低字节,AD[31::24]为高字节。
C/BE[3::0]# (T/S):总线命令/字节使能复用信号。地址期对应的是总线命令;数据期对应的是字节使能信号,表示在整个数据期中,AD[31::00]上那些字节为有效数据。
接口控制信号
FRAME# (S/T/S):帧周期信号,由当前的主设备驱动,表示一次访问的开始和持续的时间,FRAME#无效后,是传输的最后一个数据期。
IRDY# (S/T/S):主设备准备好信号,该信号有效时表明发起本次传输的设备能够完成一个数据期。与TRDY#配合使用,二者同时有效,数据才能完成传输。
TRDY# (S/T/S):目标设备准备好信号,有效时表示目标设备已作好进行当前数据传输的准备工作,可以进行相应的数据传输。
STOP# (S/T/S):停止数据传送信号。有效时表示目标设备要求主设备终止当前的数据传送,该信号由目标设备发出。
LOCK# (S/T/S):锁定信号。表示驱动它的设备所进行的操作可能需要多个传输才能完成。LOCK#信号的控制是由PCI总线上发起数据传输的设备,根据它自己的约定并结合GNT#信号来完成的。
IDSEL (IN):初始化设备选择信号。在配置空间读/写传输期间,用作片选信号。计算机各插槽上的IDSEL信号是不同的;
DEVSEL# (S/T/S):设备选择信号。该信号有效时,表示驱动它的设备已经成为当前访问的目标设备。换言之,它的有效说明PCI总线某一设备已被选中。
仲裁信号
REQ# (T/S):总线占用请求信号,该信号一旦有效即表明驱动它的设备要求使用总线。它是一个点到点的信号线,任何设备都可以有其REQ#信号。
GNT# (T/S):总线占用允许信号,用来向申请占用总线的设备,其请求已获得批准,它也是一个点到点的信号线,任何主设备都有自己的GNT#信号。

注意:REQ #、GNT#仅在PCI设备作为MASTER设备时需要实现。

错误报告信号
PERR# (S/T/S):数据奇偶校验错报告信号,对于每个数据接收设备,如果发现数据有错误,就应该在数据收到后的两个时钟周期内将PERR#激活,由于该信号为持续的三态信号,因此该信号在释放前必须先驱动为高电平,另外对于数据奇偶错的报告既不能丢失也不能推迟。
SERR# (O/D):系统错误报告信号,作用是报告地址奇偶错、特殊命令序列中的数据奇偶错,以及其它可能引起灾难性后果的系统错误。
中断信号
INTA#、INTB#、INTC#、INTD#:PCI总线中共有四条中断线,都是漏极开路,分别用以请求一个中断。单功能设备只能用INTA#,后三个中断只能用于多功能设备。
其它可选信号
AD[63::32] (T/S):扩展的32位地址和数据多路复用线。
C/BE[7::4]# (T/S):总线命令和字节使能多路复用信号线,在数据期间,若REQ64#和ACK64#同时有效时,该四条线上传输的是表示数据线上那些字节是有意义的字节使能信号。
REQ64# (S/TS):64位传输请求。表示设备要求采用64位通路传输数据。
ACK64# (S/T/S):64位传输认可。表明目标设备将用64位传输。
PAR64# (T/S):奇偶双字节校验。是AD[64::32]和C/BE[7::4]的校验位。

计算机PCI插槽专用信号:
PRSNT1#、PRSNT2#,表示插卡是否存在以及插卡功耗的信号。
注:除了信号的功能外,要注意信号的类型以及信号是什麽单词的缩写,这样能教透彻的理解并记住它了 (IN:标准输入信号;
OUT:标准输出信号;
T/S:双向三态输入输出信号;
S/T/S:低电平有效的三态信号,每次只能被1个设备驱动,并且在该设备释放之前必须驱动该信号至少1个时钟周期的高电平;
O/D:开漏输出信号)


参照上面,信号名都了解了,下面我们需要了解的就是  操作类型和操作过程了,这部分想了想在一块介绍比较好------》

CPU上电后会到到固定的地址(BIOS 或者bootrom)取指令,之后执行启动代码,过程这部分包括配置内存,串口网口等以被可以打印调试信息等,然后代码搬移至DDR或者SDRAM。然后系统会开始扫描PCI总线,为啥要扫描PCI总线呢?

当然是通过一些方法扫描PCI系统上是否存在PCI插卡(设备),存在是什麽设备以及需要系统分配什麽资源等等,同时为执行相应驱动做好准备。。。。。。。
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-21 22:03
PCI开发之小谈  ................3 PCI设备扫描
         注:这些东西,在规范里都有明确的说明,此处拿出来串一下 后继断断续续可能会介绍一下系统的东西   大家共同提供  

     上次讲到:应的驱动程序。那麽如何扫描呢?
      
下次,补充寄存器信息意义,如何理解..........................
          
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-08-22 22:11
PCI开发之小谈  ................4  配置寄存器
扫描基本上差不多了  下次将PCI总线操作吧,扫描和操作类形有关 。。。。。。
  
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-08-26 22:58
PCI开发之小谈  ................5  PCI操作
  再具体的可以参看下,PCI协议的读写介绍,就可以很快明白了 。。。。。。
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-08-26 23:39
  最近在搞一款powerpc的设计  挂了5个PCI器件  大家有没有有兴趣的 一起交流下 sasafair@126.com  欢迎来信交流讨论  ........
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-08-29 21:54
以上是一些个人理解  。。。。。
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-08-30 20:12
呵呵  。。。。。。。
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-08-30 20:54
PCI开发之小谈  ............... pci板卡开发笔记
  。。。。。。。。。。。。。。。。
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-08-31 19:34
  呵呵 当然不是  在PCI 3中已经  写过了 。但自己活多或少总结了一些开发笔记。

           第三章已经注明:   注:这些东西,在规范里都有明确的说明,此处拿出来串一下 后继断断续续可能会介绍一下系统的东西  大家共同提高。
   很多东西经过折磨多年发展,很难再有新额突破,我们的目的就是弄清,然后正确应用


      可以再多看几遍,直到看明白。。。。。  然后试  反正你手里不有板子吗

没做过之间执行扩展ROM程序的,不过我的理解:设定BAR后  CPU可以访问该空间  把该内容搬移到内存后,CPU再跳转到该处执行 。。   具体的在PCI空间向BIOS一样寻址,没有做过
sasafair
驱动牛犊
驱动牛犊
  • 注册日期2005-07-01
  • 最后登录2008-09-06
  • 粉丝1
  • 关注0
  • 积分247分
  • 威望28点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-09-06 22:30
  这两天搬家,网断了几天  
            

           建议你把我的那分东西再看几遍,确实不好理解,可以边看边坐下试验,写个4 5遍eeprom估计也就完全搞定了,地质的问题。

            
游客

返回顶部