1、pcie硬件
- pci是并行总线,在高速率下信号稳定性不能得到保证
- pcie是串行总线,差分信号传输,Tx+,Tx1,Rx+,Rx-为一条lane
- pcie总线是端对端的传输,之间为link
2、pcie总线的层次
- pcie是串行总线,类似以太网总线,pcie总线需要通过数据包来传输。
- 事务层,数据链接层,传输层。
- .事务层Tansaction Layer,传输的是TLP(tansaction Layer packer)。
3、TLP的主要字段
Type的5位编码与Fmt字段一起用于规定事务类型、头标长度和是否有数据负载,如下图所示,只列举了一部分常用的类型
ftm type 来配置是config memory 读写 memory 读写,IO读写
4、pcie设备的配置过程
1.pcie设备config0,config1两种配置空间,Header Type来表示是桥设备(01)、还是一般的end point(00)。
桥设备:上一级总线号,本级总线号,下级最大的总线号
- Pirmary Bus Number:上游总线号
- Secondary Bus Number:自己的总线号
- Subordinate Bus Number:下游总线号的最大数值 EP
需要的地址空间的size, 深度优先
- Read Config读配置空间,外设需要申请多大的地址空间
- alloc addr分配出一段空间(pci_addrA~100)
- 把分配出来的pci_addrA 写入config配置空间
- cpu就可以读某个cpu_addr来访问外设
5、pcie region转换 目的
- CPU读写某个地址,就可以读写某个PCIe设备的配置空间
- CPU读写某个地址,就可以读写某个PCIe设备的内存、寄存器
地址空间--分成两部分
- CPU本身pcie控制器的配置寄存器
- 后面的部分,就是用来访问pcie外设的
CPU想访问这个设备:Bus=bus,Dev=dev,Fun=fun,Reg=reg,那么CPU读写这个地址即可文章来源:https://www.toymoban.com/news/detail-406824.html
0xF8000000 + (bus<<20) | (dev<<15) | (fun<<12) | (reg)
cpu再读写这个地址,这个地址在这些寄存器控制下构建出对应的TLP包文章来源地址https://www.toymoban.com/news/detail-406824.html
pci_addr = cpu_addr[19:0] | (addr0[31:20] << 20) | (addr1<<32)
= 0x????? + (0xFA0 << 20) | (0 << 32)
= 0xFA0?????
到了这里,关于PCIE总线协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!