2.1 简单介绍下PCIE协议的事务层



内容简介

2024-01-21

全文共1622字,阅读大约需要6分钟,这个还是一个概述性文章,主要阐述了事务层有哪些,它们大致有什么特点,其中说了下事务层的协议大致格式是什么样子的,知晓了这些在下一篇详细介绍事务层的协议和功能。

    PCIE协议分为三层,本文内容说的是顶层“Transaction”,一般称之为事务层。如何来理解事务二字呢?在第一章我们说RC好比管家,或者是项目负责人,他要处理诸多事务,这些事务以统一的方式对外发出,不同端点(Endpoints)的专用模块就好比我们这些干活的人,接收不同事务进行处理反馈。这节呢我们就概述性再提依次有哪些事务类型以及用途,其次看看数据帧的整体是什么样子,然后在下一节详细介绍帧的内容。


01

事务类型的介绍

    这部分内容对应PCIE3.0的“2.1.1. Address Spaces, Transaction Types, and Usage ”,一开始对Address Spaces挺困惑的,最后明白了,这个协议还是基于CPU架构来描述的。 "Address Spaces" 指的是不同的寻址空间,代表着不同内存区域或者设备寄存器区域,也代表着不同的事务类型。PCIE使用不同的地址空间来访问不同类型资源,这些地址空间可以是如下表所示

1.1

内存地址空间

     内存地址空间(Memory Address Space)也就是内存事务类型,用于访问主机系统中的内存区域。设备可以通过PCIe直接访问主机内存,实现数据的读取和写入。这种地址空间允许设备通过 DMA(直接内存访问)等技术直接在内存中进行数据传输。

    内存地址空间支持读的请求与完成、写请求和原子操作的请求与完成这三大类事务类型,支持32bit地址和64bit地址两种地址空间。

1.2

配置地址空间

    配置地址空间(Configuration Address Space)也就是配置事务,用于访问设备的配置寄存器。每个 PCIe 设备都有一组配置寄存器,包含设备的重要信息、功能设置以及与设备通信所需的控制寄存器等。通过配置地址空间,系统可以对设备进行初始化、配置和管理。这也是使用PCIE设备前的必要步骤。

    这种配置空间的访问方式为系统和设备之间的通信提供了标准化的接口,有助于确保设备之间的互操作性和系统的稳定性。事务类型包括两种类型:

    1)Configuration Read Transaction(读事务): 主机系统通过 PCIe 总线向目标设备的配置空间读取信息。这通常涉及读取设备的配置寄存器,以获取设备的状态、特性和其他信息。

    2)Configuration Write Transaction(写事务): 主机系统通过 PCIe 总线向目标设备的配置空间写入信息。这用于配置设备的各种参数,使其适应系统需求。

1.3

IO地址空间

    IO地址空间(IO Address Space)用于访问设备的 IO 空间,允许设备使用类似于传统 IO 端口的方式进行通信和数据传输。这部分主要是兼容PCI的。支持读的请求与完成和写的请求与完成,支持的地址格式是32bit。

1.4

Message 地址空间

    Message 地址空间(Message Address Space)用于提供了一种灵活的数据传输机制,使得设备之间可以通过异步的方式进行通信,从而更好地支持一些事件驱动的场景,例如中断传递、错误通知、电源管理等。这种异步通信机制有助于提高系统的效率和响应速度,具体的会在后面介绍。

02

事务层的包格式概述

    事务层由请求和完成两种类型组成,是基于包的方式进行端到端的数据交换。如下是一个高度浓缩的PCIE协议,一个事务层数据包或者是TLP由一个或多个可选的TLP前缀、一个TLP帧头、一段payload、一个可选的TLP摘要组成。

    如下图将高度浓缩的示意图展开了写,从这个图我们首先可以得知PCIE协议在概念上将信息作为序列化字节流进行传输。PCIE协议有个DW的概念,就是Double Words,1个DW表示4字节,也就是32bit,也就是下面的一行,从左端为低字节序。

    也就是上文所说的短地址和长地址,而且这个目的主要是用来适应不同的场景需求,与CPU的6位系统还是32位系统没有任何关联。

    前缀和摘要是可选的,先放一边,下一篇开始介绍事务层的报头。

欢迎关注公众号领取PCIE相关资料







快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我