开发者分享 | 使用 lspci 和 setpci 调试 PCIe 问题
judy 在 周四, 11/26/2020 - 16:48 提交lspci 命令和 setpci 命令均为 Linux 发行版中原生可用的命令。这 2 条命令均可提供多级输出,适合在不同时间点用于查看 PCI 总线上训练的不同组件的功能和状态。其中大部分功能均可反映《PCI Express 基本规范》中所需的配置空间寄存器。
lspci 命令和 setpci 命令均为 Linux 发行版中原生可用的命令。这 2 条命令均可提供多级输出,适合在不同时间点用于查看 PCI 总线上训练的不同组件的功能和状态。其中大部分功能均可反映《PCI Express 基本规范》中所需的配置空间寄存器。
本章将着重讲述PCIe物理层组成与操作,物理层位于数据链路层之下,可产生PLP包(Physical Layer Packet)进行管理。
本章将着重讲述TLP的数据链路层组成与操作,上一篇更新应该为第五讲,数据链路层位于事务层和物理层之间,使用容错和重传机制保证了数据传输的完整性和一致性,此外,数据链路层还需要对PCIe链路层进行监控和管理。
本文将着重讲述TLP的存储器、配置、IO读写请求和原子操作、消息报文几种操作请求,其中主要从其结构和特点进行分析。
上一讲说道:“一个完整的TLP由1个或多个TLP Prefix、TLP头、Data Payload和TLP Digest构成”,那么本讲将就谈一谈TLP的头,具体几种事务(存储器读写、配置读写、IO读写、原子操作、消息报文)后面一一分析。
PCIe2.0规范于2007年1月5日推出,将PCIe1.0 2.5GT/s的传输速率提高了一倍,每个通道的吞吐率从250MB/s上升到500MB/s,因此2通道的PCIe可支持高达1GB的总吞吐量。
所谓加扰是将源数据流与一个随机序列异或后,再发送出去,异或操作完成后的数据流基本是伪随机的。PCIE数据发送端有加扰,数据接收端也有解扰操作,解扰与加扰使用相同的公式,必须完全同步,即LFSR使用相同的初始值。
机器学习和大数据应用正在彻底改变处理数据的方式。整个行业需要找到在保持低功耗的同时,提高计算性能的途径。对于当前的许多计算任务,连接处理器的专用硬件加速器完成该任务的速度和功耗都要比独立工作的处理器出色。
PCIE 链路训练、枚举扫描、配置BAR的顺序?上电复位后,首先进行链路训练,之后进行枚举扫描、最后进行基地址寄存器BAR的配置。完成基地址配置后,就可以通过memory TLP读写进行寄存器的访问了。
为支持ID路由,每个PCIE设备(端点和交换开关)中都应设置有贮存设备总线号和设备号的寄存器,复位时,该寄存器清0,每当设备在它的原级链路上检测到一个Type0配置写事务包时,它就从该TLP头标中的第8~9字节“捕获”它自己的总线号和设备号,并贮存入上述总线号和设备号寄存器。