
PCIe
文章平均质量分 96
Liuqz2009
不念过去不畏将来,全心活在当下!
寒窗二十载,人生再出发!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PCIe Switch 问题点
全球PCIe交换芯片(PCIe Switch)核心厂商包括Broadcom、Microchip和Texas Instruments等,前三大厂商占有全球大约80%的份额。产品类型而言,PCIe 3.0是最大的细分,占有大约47%的份额。就下游来说,企业级是最大的下游领域,占有约45%的份额。青芯说,国内现在他们的 PCIe4 Switch 用的最多的是 Storage RAID 卡(下行多个x4,上行一般是x8或者x16),和 GPU的一卡双芯(上行X16,两个下行X16)原创 2025-05-16 18:43:11 · 1032 阅读 · 0 评论 -
Gen5 应用实例
SSw 模式下,两个 PCIe 交换机之间的链路可以连接两个交换矩阵端口,所有 TLP 都通过目标 ID 路由到这两个端口。全局 ID 的构成:GID 由 {domain[7:0],ID[15:0]} 组成,其中 ID 值是一个 PCIe 标准 ID,由 {bus[7:0], device[5:0], 和 function[2:0]} 组成。此外,光纤链路可以在对等端点(一个在 A0 上,一个在 A1 上)之间提供性能更高的路径(更高的吞吐量和更低的延迟),而不是在两个根联合体之间使用连接(图中虚线)。原创 2025-05-16 18:31:16 · 995 阅读 · 0 评论 -
PCIeSwitch 学习
一文读懂什么是PCIe SwitchPCIe Switch是一种硬件设备,提供扩展或聚合能力,并允许更多的设备连接到一个PCle端口。连接多个设备:PCIe switch允许多个设备通过单个PCIe总线连接到主机系统,从而扩展系统的连接性。数据交换:PCIe switch可以在多个设备之间传输数据,允许设备之间直接通信而无需通过主机处理器。动态分配:支持动态分配带宽和资源,根据需要调整设备之间的通信速率和优先级。:支持NTB技术,允许两个或多个系统之间直接通信,提高数据传输效率。原创 2025-05-16 18:25:29 · 2001 阅读 · 0 评论 -
SwitchtecPFX_Gen4
数据结构和算法是居中展示,使用center标签原创 2025-05-13 11:50:50 · 658 阅读 · 0 评论 -
SwitchtecPSX_Gen4
Switchtec PSX Gen4 可编程 PCIe 交换机系列包含可编程和高可靠性的交换机,支持多达 100 条通道、52 个端口、26 个虚拟交换机分区、48 个非透明桥(NTB)、每个端口的硬件和意外插拔控制器、高级错误隔离、全面的诊断和调试功能、广泛的 I/O 接口以及集成的 MIPS 处理器。PSX 系列的典型应用包括 PCIe SSD 机箱、闪存阵列、多主机架构、高密度服务器、刀片服务器、共享存储/计算以及需要定制化、高可靠性 PCIe 交换的应用。原创 2025-05-13 11:30:49 · 858 阅读 · 0 评论 -
85657_Gen5
Broadcom® BCM85657 是一款 16 通道、低功耗、低延迟、对称的 PCIe Gen5 和 CXL 集成 MAC 和 PHY retimer。该设备可在 32 GT/s 时在根复合体(RC)和端点(EP)之间扩展超过 40 dB 的损耗。每个通道支持多种数据速率,包括 Gen5(32G)、Gen4(16G)、Gen3(8G)、Gen2(4G)和 Gen1(2.5G)。一个 16 通道链路(1×16)两个 8 通道链路(2×8)四个 4 通道链路(4×4)原创 2025-05-13 10:03:49 · 948 阅读 · 0 评论 -
PEX88000_Gen4
这些交换机专为混合硬件/软件平台设计,提供高可配置性(主机数量、下游端口以及将这些端口分配给插槽的方式)。配置完成后,数据直接在连接的设备之间流动,硬件支持实现非阻塞、线速性能,并具备I/O共享和DMA等功能。该解决方案提供了一种创新的方法来设置和控制PEX88000交换机,配置路由表,处理错误、热插拔事件,并通过嵌入式CPU或外部CPU启用解决方案,而不会影响通过交换机的数据流。原创 2025-05-13 09:58:29 · 838 阅读 · 0 评论 -
PEX_8796_Gen3
在多主机模式下,PEX8796最多可配置四个上游主机端口,每个端口都有自己的专用下游端口。在故障转移模式下,如果主机发生故障,指定的故障转移主机将禁用连接到故障主机的上游端口,并将该主机的下游端口编程到自己的域中。图4b显示了主机1故障后主机2接管了主机1的所有端点。发送到不同 CPU 的数据包将发送到不同的(用户分配的)PEX8796 上行端口,允许更好的排队和负载平衡能力,从而实现更⾼的性能。在多主机模式下,可以选择最多四个端口作为主机/上游端口,并为每个主机分配所需数量的下游端口。原创 2025-05-13 09:43:15 · 1199 阅读 · 0 评论 -
PCIe 中断
PCIe(Peripheral Component Interconnect Express)中断是硬件设备与CPU之间通信的核心机制,用于在数据传输完成或事件触发时通知CPU进行处理。其设计目标包括提升实时性、降低延迟以及支持高吞吐量场景。PCIe中断机制经历了从传统INTx到现代MSI/MSI-X的演进,逐步解决了共享中断、扩展性差等问题。原创 2025-04-21 11:20:48 · 1024 阅读 · 0 评论 -
PCIe 学习笔记(一)
TS1和TS2是PCIe物理层链路训练的核心机制,通过有序集的交互实现参数协商与状态控制。其设计兼顾了灵活性与兼容性,支持从Gen1到Gen6的速率演进,并通过Modified TS优化了高速链路的均衡能力。原创 2025-04-15 16:01:49 · 1024 阅读 · 0 评论 -
xHCI 上 USB 读写分析
函数用来处理发送给 RootHub 的控制传输。其通过 MMIO 直接获取相关的信息,如此处的设备描述符。USB 可以进行批量传输、中断传输、实时传输、控制传输。将URB提交给USB核心,后者根据URB的端点类型和设备地址路由请求。对于外接的 USB 设备(如 U 盘)的设备描述符获取,则走。其初始化两个有优先级的工作队列,工作队列执行函数为。函数来添加 HCD ,该函数中有如下代码来初始化工作队列。,该函数实现了成功发送完 URB 后的清理及通知工作。函数来对 URB 清理,同时通知。原创 2025-04-10 18:24:57 · 1317 阅读 · 0 评论 -
USB Hub 检测设备
第二个函数,usb_set_device_state(),这个函数用来设置设备的状态,在 struct usb_device 结构体中,有一个成员 enum usb_device_state state,这一刻会把这个设备的状态设置为 USB_STATE_POWERED,即上电状态。第五个函数,usb_get_status(),这个函数是专门为 Hub 准备的,不是为当前的这个 Hub,而是说当前 Hub 的这个端口上连接的如果又是 Hub,那么和连接普通设备就不一样。后面会用实例来查看效果。原创 2024-12-25 17:19:28 · 2591 阅读 · 0 评论 -
USB Root Hub 分析
会向主机控制器返回一些信息,或者说 Data,这个 Data 被称作 “Hub and Port Status Change Bitmap”,而从软件角度来看,主机控制器的驱动程序接下来会在处理好这个过程的 urb 之后,调用该 urb 的 complete 函数,对于 Hub 来说,这个函数就是。这里是 Root Hub,所以相应的 hub 驱动会识别这些 device。在这里我们匹配的刚才的接口设备,所以其会调用 hub 驱动的。我们知道,每当驱动注册到总线上,其会识别挂载在总线上的设备。原创 2024-12-25 11:53:51 · 680 阅读 · 0 评论 -
xHCI 简单分析
struct bus_type 是 Linux 内核中用于表示一种特定类型总线的数据结构。在内核中,每种总线类型(如 USB、PCI、I2C 等)都有自己的 bus_type 实例,用于定义和管理该总线上设备的注册、枚举和驱动程序绑定等操作。// 总线名称,如:usb, pci等字符串;// 总线属性列表// 驱动程序列表// 设备列表// ... 其他字段 ...原创 2024-12-20 16:46:57 · 1390 阅读 · 0 评论 -
PCIe 与 USB 的补充知识
每次有一个新的设备注册到上面,都会去匹配右边的驱动,看是否能匹配上。然后将设备添加到驱动的 p->klist_devices 域。同理,每注册一个驱动,都会去匹配左边的设备,如果匹配成功,将则设备加到驱动的 p->klist_devices 域 ,再将设备的 is_registerd 置为 0。创建注册的这条总线需要的目录文件。初始化这条总线上的设备链表:struct klist klist_devices;将会在 /sys/class 目录下产生一个 “pci_bus” 的目录。原创 2024-12-11 09:06:41 · 282 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(15)
如果要将设备模拟到 VM,则 VMM 应加载一个可以在多个 VM 之间共享设备资源的“主”驱动程序,并且对于将与之共享设备的每个 VF,模拟设备到 VM 的连接事件,建立模拟的设备槽,并将该槽映射到相应 VM 拥有的 VF。VF 生成的后续工作项将由 VMM 的设备主驱动程序处理,并转发到 VMM 拥有的物理 USB 设备。如上所述,当设备连接时,VMM 将对其进行评估并有选择地将其分配给 VM,但在这种情况下,VMM 将在 VM 的模拟外部集线器实例上模拟连接事件,而不是在 VM 事件环上生成。原创 2024-11-11 18:15:12 · 1289 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(14)
当中断器分配给 VF 时,PF0 可用的中断器数量会相应减少。那么 PF0 将拥有中断器 0-3、VF 1 中断器 4-7、VF 2 中断器 8-11 和 VF 3 中断器 12-15。VM 中断器范围寄存器 0 在逻辑上将引用物理功能 0 (PF0),但 PF0 提供所有中断器分配的池。硬件重置后,所有 VF 中断器范围寄存器 = “0”,即 VF 不拥有任何中断器。软件使用这些寄存器来管理 VF 的状态和中断器资源。应使用此寄存器的中断器计数和中断器偏移字段将 PF0 中断器分配给关联的 VF。原创 2024-11-08 17:49:12 · 1080 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(13)
由于调试功能为 USB 提供了一个“设备端”接口,用于管理设备的上游端口,而不是根集线器的下游端口,因此调试功能中的某些寄存器定义可能看起来与 xHCI 中的非常相似,但它们可能存在细微的差异以支持“设备端”操作。例如,调试功能事件环管理寄存器块的操作和定义与第 5.5.2.3 节中定义的 xHCI 事件环寄存器相同,只是它提供了专用于调试功能的事件环。调试功能会自动分配给第一个 xHCI 根集线器端口,该端口可检测到具有增强型超高速功能的根集线器或外部集线器的下游端口的连接。原创 2024-11-07 18:12:53 · 1318 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(12)
有关端口状态更改事件的使用和生成的更多信息,请参阅第 4.19.2 节。有关控制传输和控制端点操作的更多信息,请参阅第 3.2.9 节。有关设置阶段 TRB 和控制端点操作的更多信息,请参阅第 3.2.9 节。另请参阅 USB2 规范中的第 8.5.3 节,了解有关 “控制传输” 的描述。有关控制传输和控制端点操作的更多信息,请参阅第 3.2.9 节。有关 Isoch TRB 和同步端点操作的更多信息,请参阅第 3.2.11 节。的使用和操作的更多信息,请参阅第 4.11.3.1 节。原创 2024-11-06 18:21:49 · 1053 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(11)
注意:控制端点上下文 0 的最大数据包大小字段应由系统软件设置为端点的默认最大数据包大小,该值取决于设备的速度。对于高速等时和中断端点,此字段应设置为每微帧的额外事务机会数,即 USB2 端点描述符 wMaxPacketSize 字段的位 12:11 中定义的值。字段内的字节/字符应采用小端顺序,即,字符串的第一个字符在最低有效字节,第二个字符在下一个有效字节,依此类推。注意:添加上下文和删除上下文标志索引的计算方式与第 4.5.1 节中描述的输入上下文的设备上下文部分的设备上下文索引 (原创 2024-11-05 16:40:20 · 1168 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(十)
USB3 端口电源管理状态()和控制(Control)寄存器控制增强型超高速(USB链路U-State超时。有关链路电源管理的更多信息,请参阅 USB3 规范的第 11 节。。USB2 端口电源管理状态和控制寄存器提供xHC生成LPM令牌给下游设备所需的USB2 LPM参数。有关xHCI链路电源管理功能的更多信息,请参阅第 4.23.5.1 节。有关USB2链路电源管理的更多信息,请参阅 USB2 LPM ECR。。USB3端口链路信息()寄存器报告链路错误计数。原创 2024-11-04 11:48:49 · 1330 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(九)
字段内的字节/字符应采用小端顺序,即,字符串的第一个字符在最低有效字节,第二个字符在下一个有效字节,依此类推。基于 PCI 的 xHC 需要实现 PCI,即 0 类 PCI 设备标头,如下所示。有关电源管理寄存器块的定义,请参阅 PCI PM 规范中的第 3.2 节。,该寄存器与 PCI PM 规范中定义的结构几乎相同,但有一些额外的要求。这些 registers 的偏移量都是相对于主机控制器的 MMIO 地址空间的开头的。请参阅 PCIe 规范的第 7.8 节,了解有关此结构实现的详细信息。原创 2024-11-01 18:14:21 · 1209 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(八)
在“轻度”硬件复位(通过 USBCMD 寄存器中的轻度主机控制器复位 (LHCRST) 位)后,只有辅助电源井中未包含的操作和运行时寄存器应保持其默认值。本规范中有关电源传输的任何讨论的主要目的是提高各种实现之间的互操作性,而不指定特定的电源传输方法。或对为支持主机控制器的电源管理功能而明确定义的配置、命令和状态寄存器的引用将帮助读者识别需要特别注意的那些构造。注意:本节提供的规范和白皮书参考资料并非详尽的清单,鼓励读者参考可能与设计人员的具体实现相关的其他规范。,辅助)井的预期功能。原创 2024-10-31 18:14:50 · 1210 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(七)
在正常模式下,xHCI 的设计使所有 USB 设备(设备插槽 0-n)都出现在单个功能中。在虚拟化模式下,xHCI 设计为不同的虚拟功能,其中每个 USB 设备(设备插槽 0-n)都可以专门映射到特定的虚拟功能。在正常情况下, xHCI 除其他寄存器外,还实现了 PCIe 设备头空间,如第 5.2 节所述。xHCI 根集线器端口的初始状态应为 Disconnected 状态,即端口电源 (PP) 已断言,并且端口正在等待 USB 上的信号,指示设备已连接。支持的协议功能结构标识,请参阅第 7.2 节。原创 2024-10-29 18:13:17 · 1453 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(六)
此功能对于PCIe实现是可选的。如果设置了 PCI Express 功能结构 (5.2.8) 设备控制寄存器 (PCIe 规范第 7.8.4 节) 中的启用无监听位 (位位置 11,表 7-12),则允许 xHC 在其发起的不需要硬件强制缓存一致性的 PCIe 事务的请求者属性中设置无监听位 (请参阅 PCIe 规范第 2.2.6.5 节)。请注意,将此位设置为“1”不会导致 xHC 在其发起的所有 PCIe 事务上设置无监听属性。原创 2024-10-28 18:05:56 · 1291 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(五)
xHC供应商可以使用表 6-91 中标识的供应商定义的TRB类型代码来定义专有的TRB类型。供应商定义的 TRB 类型可用于定义命令、事件或传输 TRB。原创 2024-10-23 17:47:27 · 1389 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(四)
此错误仅适用于 USB2 协议端点,用于报告拆分事务上的错误,例如,xHC 无法调度 HS 拆分中断 IN 事务所需的完全拆分事务。请注意,切换周期 (TC) 位是在 B 段的链路 TRB 中设置的,而不是在段 A 的链路 TRB 中设置的, 因此,每次通过 Transfer Ring 后,Cycle 位的状态都会被切换。)标识创建者将环上的下一个工作项排入队列的位置,以及使用者将从环中取消下一个工作项排队的位置。工作已发布到设备的两个单独的传输环,系统软件应将两次写入发布到关联的门铃寄存器(原创 2024-10-17 18:29:16 · 1302 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(三)
xHC供应商可以使用表 6-91 中标识的供应商定义的TRB类型代码来定义专有的TRB类型。供应商定义的 TRB 类型可用于定义命令、事件或传输 TRB。。。。。。USB2 Port Link Info 寄存器是保留的,应被软件视为 RsvdP。。。。。原创 2024-10-14 13:53:48 · 1219 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(二)
xHC供应商可以使用表 6-91 中标识的供应商定义的TRB类型代码来定义专有的TRB类型。供应商定义的 TRB 类型可用于定义命令、事件或传输 TRB。。。。。。USB2 Port Link Info 寄存器是保留的,应被软件视为 RsvdP。。。。。原创 2024-10-12 13:39:18 · 1597 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(一)
可扩展主机控制器接口的开发由 3 个关键因素驱动;速度、能效和虚拟化。USB 主机系统由许多硬件和软件层组成。图 3-1 说明了主机系统中协同工作以支持 USB 3.x 的构建块层的概念框图。原创 2024-09-29 16:59:29 · 2237 阅读 · 0 评论 -
PCIe扫盲(14)
ReTimer 和 ReDriver 简介。原创 2024-09-26 16:30:12 · 1741 阅读 · 0 评论 -
PCIe扫盲(13)
PCIe总线定义的与功耗管理功能(Power Management,PM)相关的主要有:PCI-Compatible PM、Native PCIe Extensions、Bandwith Management和Event Timing Optimization。其中,PCI-Compatible PM是一种在软件上和硬件上都与PCI-PM(定义在ACPI Spec中)兼容的模式,其要求PCIe设备的每个Function都包含PCI Power Management Capability寄存器。原创 2024-09-23 14:07:22 · 2198 阅读 · 0 评论 -
PCIe扫盲(12)
某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行,为此,PCIe总线采用热插拔(Hot Plug)和热切换(Hot Swap)技术,来实现不关闭系统电源的情况下更换PCIe卡设备。注:热切换(Hot Swap)和热插拔的主要区别是应用领域不同,热插拔主要应用于PC以及服务器的主板上的板卡连接,而热切换主要针对的是CPCICompactPCI,一种常用于仪器仪表的接口)应用的。具体请参考PCIe Spec和的相关章节。PCIe总线的热插拔主要指的是PCIe。原创 2024-09-20 18:13:45 · 2050 阅读 · 0 评论 -
PCIe扫盲(11)
一个简单的PCI总线INTx中断实现流程,如下图所示。首先,PCI设备通过INTx边带信号产生中断请求,经过中断控制器(PIC)后,转换为INTR信号,并直接发送至CPU;CPU收到INTR信号置位后,意识到了中断请求的发生,但是此时并不知道是什么中断请求。于是通过一个特殊的指令来查询中断请求信息,该过程一般被称为中断应答(该特殊指令被发送至 PIC 后,PIC会返回一个8bits的中断向量()值给CPU。该中断向量值与其发送的INTR请求是对应的;CPU收到来自PIC的中断向量值后,会去其。原创 2024-09-20 15:44:29 · 1575 阅读 · 0 评论 -
PCIe扫盲(10)
前面的文章提到过,PCI总线中定义两个边带信号(PERR#和SERR#)来处理总线错误。其中PERR#主要对应的是普通数据奇偶校检错误(),而SERR#主要对应的是系统错误(具体如下:普通的数据奇偶校检错误——通过PERR#报告在多任务事务(,又称为)时的奇偶校检错误——通过SERR#报告地址和命令的奇偶校检错误——通过SERR#报告其他错误——通过SERR#报告一个简单的例子如下图所示:PCIe作为一种高速串行总线,取消了PCI总线中的这两个边带信号,采用错误消息的方式来实现错误报告。原创 2024-09-20 11:58:45 · 2006 阅读 · 0 评论 -
PCIe扫盲(九)
FPGA发展到今天,SerDes) 基本上是标配了。从PCI到,从 ATA 到SATA,从并行 ADC 接口到JESD204,从 RIO 到Serial RIO,……等等,都是在借助SerDes来提高性能。SerDes是非常复杂的数模混合设计,用户手册的内容只是描述了森林里面的一棵小树,并不能够解释SerDes是怎么工作的。而本文也主要是基于和ECP5的SerDes UG,来简单地介绍一下的一些基本特性。如需深入了解SerDesSerDes 扫盲,以及本文附件中的硕博论文。原创 2024-09-19 18:07:00 · 2061 阅读 · 0 评论 -
PCIe扫盲(八)
相关的内容只会简单提及,并不会深入地介绍,有兴趣的可以阅读 PCIe Spec V3.0 或者 Mindshare 的相关书籍。总线采用了一种嵌入式时钟的机制,即发送端只向接收端发送数据信号,并不发送时钟信号(时钟信号隐藏在数据信号中)。设备(PCIe 卡和插槽等)都是按照统一的标准实现的,一般不会出现这种情况,因此这一功能是可选的。进行了简单的介绍,关于具体的每一个状态内部是如何实现的,请参考 PCIe Spec 相关章节。因为有的通道的信号可能先到达,有的可能后到达。原创 2024-09-19 16:44:55 · 2186 阅读 · 0 评论 -
PCIe扫盲(七)
需要注意的是,PCIe Spec 只是规定了物理层需要实现的功能、性能与参数等,至于如何实现这些却并没有明确的说明。),由于是伪随机码,所以只要发送端和接收端采用相同的算法和种子,接收端便可以轻松地恢复出数据。如上图所示,接收端的逻辑基本上都是与发送端相对应的相反的操作。当然,这些控制字符只用于物理层之间的传输,接收端的设备的物理层接收到这些数据后,会将这些控制字符去除,再往上传到其数据链路层。的物理层逻辑部分,可能会与其他的厂商的设备的物理层实现方式有所差异,但是设计的目标和最终的功能是基本一致的。原创 2024-09-19 14:38:18 · 4905 阅读 · 0 评论 -
PCIe扫盲(六)
因此,发送端只能先尝试发送,期间可能会被插入多个等待周期(接收设备尚未就绪等原因),甚至是重发(具体可以参考 PCIe 的 Spec ,这里不再详细介绍,下面给出。这样的机制,因此发送端并不知道当前时刻,接收端能否接收对应的。是可选的,只有当被配置为使能的时候才会被初始化。在进行初始化的时候,接收端需要向发送端报告(初始化之后,相邻的两个设备之间会周期性的通过。只在相邻的数据链路层之间传输,但是相关的。初始化开始时,其会被自动的初始化。的周期表格(根据公式计算的结果)。中的系数,但实际上他们的值是一样的。原创 2024-09-18 17:16:45 · 1630 阅读 · 0 评论 -
PCIe扫盲(五)
中采用边带信号,这些边带信号的主要功能是中断,错误报告和电源管理等。的限制),但是返回的总的数据量应当与请求的数据量保持一致,否则可能会出现。中没有任何一位是有效的,也是允许的,但是这样的请求对于。时,应注意先发送的时低地址的数据,后发送高地址数据。的大小并不是有效的数据的大小,有效数据的大小是由。可以响应该请求,但是却发生了其他的错误,该错误是。,只是其中的数据都是无效的。,但是并不是所有的空间都被利用上了,例如有的。),但是早期的 PCI 并不支持这一功能,时,都会被认为是非法的,并被认为是。原创 2024-09-18 16:17:03 · 1886 阅读 · 0 评论