PCIe协议之-TLP Header详解(二)

✨前言:

在PCIe中,存在几种不同类型的请求,主要包括IO(Request)请求、存储器(Request)请求和配置(Request)请求。这些请求类型允许CPU与连接在PCIe总线上的设备进行通信和控制。

🌟1. IO(Request)请求

定义与作用: IO请求,即输入输出请求,是一种使CPU能够读写连接在PCIe总线上设备的特定IO端口的操作。这种请求类型常用于较旧的或简单的外围设备,如早期的声卡、网卡等,它们使用设定的IO空间进行数据交换。
实现方式: 当发起IO请求时,CPU通过总线发送一个包含端口地址及操作类型(读/写)的信号给目标设备。设备响应这一请求,执行相应的读或写操作,并将结果返回给CPU。

🌟2. 存储器(Request)请求

定义与作用: 存储器请求,即内存访问请求,用于直接在CPU与PCIe设备之间传输数据。它允许PCIe设备读写系统内存,支持更高效、更直接的数据传输方式,广泛应用于需要快速数据交换的设备,例如现代显卡、SSD等。
实现方式: 发起内存请求时,会指定系统内存的地址和需要传输的数据。PCIe支持的DMA(直接内存访问)允许外设直接与系统内存通信,不必占用CPU资源,从而实现高效数据处理。

🌟3. 配置(Request)请求

定义与作用: 配置请求用于读取或设置PCIe设备的配置空间,这是一块预留的内存区域,包含了设备的重要信息和配置参数,如设备ID、中断设置、支持的功能等。通过配置请求,系统可以识别和配置连接的设备。
实现方式: 在设备初始化或系统启动时,BIOS或操作系统会发起配置请求来探测和配置所有PCIe设备。配置访问通常通过特定的地址和数据路径进行,CPU可通过这些路径读写PCIe设备的配置寄存器。

✨IO Request

IO Request的TLP Header的格式如下图所示:
IO请求用来进行输入/输出操作,其TLP头部包含以下字段:

格式(Fmt): 指示TLP的格式,IO请求通常是3位长,对于IO Read请求,格式为"001",IO Write请求,格式为"000"。
类型(Type): 指示TLP的具体类型,对于IO操作,通常是5位长,IO Read请求的类型为"00001",IO Write请求的类型为"00010"。
长度(Length): 表明数据传输的DWORD数量,对于IO操作,这通常是较小的数量。
请求者ID(Requester ID): 表明发起请求的设备。
总线/设备/函数号(Bus/Device/Function Number): 指定请求目标的PCI Express设备地址。
标签(Tag): 用于将请求和响应匹配起来,以区分不同的事务。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

✨Memory Request

Memory Request的TLP Header的格式如下图所示:
内存请求用来访问系统内存,TLP头部的字段和IO请求类似,但具有不同的值:

格式(Fmt): 内存读取为"000"或"010",内存写入为"001"或"011",长包头格式包含4个额外的字节用于64位地址。
类型(Type): 对于内存读写操作,类型分别为"00000"(Memory Read)和"00001"(Memory Write)。
长度(Length): 传输的数据长度。
请求者ID(Requester ID): 发起请求的设备。
标签(Tag): 同IO请求。
首次读/写(First BE)/最后读/写(Last BE): 分别表示数据开始和结束的字节使能位。
64位地址(Address): 内存地址,可能是32位或64位,取决于格式字段。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:TLP Prefix、ID Based Ordering(IDO)和TLP Processing Hints(TH)均为PCIe Spec V2.1提出的。

✨Configuration Request

Configuration Request的TLP Header的格式如下图所示:
格式(Fmt): 配置读取为"010",配置写入为"011"。
类型(Type): 对于配置读写操作,类型分别为"10100"(Configuration Read Type 0)、“10101”(Configuration Read Type 1)或"11000"(Configuration Write Type 0)、“11001”(Configuration Write Type 1)。
长度(Length): 配置访问固定长度为"1",因为配置空间是采用4字节为单位进行访问。
请求者ID(Requester ID): 发起请求的设备。
拓展注册头(Extended Register Number): 表示访问的配置空间在256字节之上的偏移。
配置注册头(Register Number): 访问配置空间的偏移量。
设备号(Device Number): 指示配置空间需访问的PCI设备编号。
功能号(Function Number): 指示配置空间需访问的PCI功能编号。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 36
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PCI Express (PCIe) TLP (Transaction Layer Packet) 是 PCI Express 协议的一个重要部分,它用于在不同的 PCIe 设备之间传输数据。PCIe TLP 由四个部分组成:头部、有效载荷、可选的可扩展有效载荷和 FCS(帧校验序列)。 具体来说,PCIe TLP 的格式如下: |---------------------------| | PCIe TLP 头部 (12 字节) | |---------------------------| | 有效载荷 (0 - 1024 字节) | |---------------------------| | 可扩展有效载荷 (0 - 1024 字节) | |---------------------------| | FCS(帧校验序列)(4 字节) | |---------------------------| PCIe TLP 头部包括以下字段: - TC(传输类别):指定 TLP 的类型,比如请求(Memory Read/Write)、Completion 等。 - TD(传输方向):指定 TLP 的传输方向,是从上游设备到下游设备还是相反。 - EP(端点):指定 TLP 的目标设备端口号。 - Length(长度):指定有效载荷的长度。 - First DW BE(第一个双字节字节 Enable):指定有效载荷的第一个双字节的哪些字节是有效的。 - Last DW BE(最后一个双字节字节 Enable):指定有效载荷的最后一个双字节的哪些字节是有效的。 - Tag(标签):可选字段,用于匹配请求和 Completion TLP。 - Requester ID(请求者 ID):可选字段,用于标识发起 TLP 的设备。 - Completer ID(完成者 ID):可选字段,用于标识处理 TLP 的设备。 PCIe TLP 的有效载荷可以是数据、地址或控制信息。可扩展有效载荷在某些情况下用于传输额外的数据或信息。FCS 是一个校验序列,用于检测传输中的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天Aileft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值