Linux PCI/PCIE(一) 协议

1.概述

        PCI总线是一种计算机的一种标准总线。其存在的目的就是想让cpu像访问内存一样去访问外设空间。

        举个例子,比如访问一个emmc设备,对于emmc本身想要在0x00这个空间地址存东西的时候,对于cpu来说可能不是要操作0x00,因为两个的地址空间不一样,就需要PCI总线,能使cpu操作的时候通过PCI控制器来进行地址空间转换。其特点就是速度很快。

        PCI是一种并行总线,由于PCI是并行总线,不同的数据线之间的信号会产生干扰,为了达到更高的速度,就诞生了PCIE这个协议。

          1.1 PCI/PCIE的区别

                PCI是并行数据,PCEI是串行。

                PCIE可以达到更高的数据传输速度。

                在硬件上PCIE使用的是差分信号。

2.PCI

2.1 总线与框架

2.1.1框架

        大致的框图如上所示:

        PCI 桥:当一条PCI总线不够用的时候,可以通过PCI来连接多个PCI总线。如上图可以看到就有两条PCI总线。

        PCI 总线:PCI总线在设备中可以是树形结构来扩展开来的。

        PCI 设备:分为主设备与目标设备,主设备是访问操作发起着,目标设备是被访问者。

2.1.2 信号相关

        介绍几个比较关键的信号:        

        AD:数据与地址都是走这个信号来传输的。

        FRAME:由这个信号来判断,AD到底是传输的地址还是数据。

        IDSEL :需要对PCI设备进行配置的时候,用这个信号来选中设备。

        C/BE :用来对应命令的类型。

        

2.2 访问非桥的PCI设备

        要想使用PCI设备肯定得先配置某个PCI设备。

          参考上述时序图:       

           (1).IDSEL信号先选中需要配置得设备。

           (2). FRAME 拉低时【31:0】存下了一个32bit的物理地址值结构如下,来配置设备配置空间的寄存器。

           (3).C/BE信号需要给到对应的值

        

        

type0就是指的非桥设备的配置空间,如下图所示。

                

2.2 访问桥的PCI设备

        根桥下可能会挂载非PCI设备,而是挂新的桥设备来扩展更多的PCI设备,如下图。

               步骤: (1) 可以用类似上述配置PCI设备的方式来配置桥,参考以下的桥设备的配置空间表。

                            

                         (2)配置好桥之后,再配置后面的设备,参考下面的协议。

        BUS Number:来确定是哪个子桥。

        Device Number :来确定是这个子桥的哪个设备。

 关于桥之间关系构建的参数:

primary bus number:上一级PCI桥总线号。

Secondary bus number:自己这级的PCI桥总线号。

Suboardinate Bus number :关联的最下级的PCI桥总线号。

3.PCIE

3.1 框图

3.2 传输

               

               传输数据是四根差分信号:TXP(TX+),TXN(TX-),RXP(RX+),RXN(RX-)。一般这样的一组构成一个lane,有些设备可能会有多个line。

        由于是串行信号,所以通信就需要通过打包。

        一般传输分为三层:

                事务层:基本数据的打包,读写数据类型,包含的数据等等。

                数据链路层:防止丢包,所以增加SEQ,和CRC校验。

                物理层:拆包发送接受。

        head的完整格式:

其中有bus number,device number,Function number,register number等等来定位操作目标。

  • 32
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值