首页 > 其他分享 >PCIe系列专题之二:2.6 Flow Control初始化

PCIe系列专题之二:2.6 Flow Control初始化

时间:2024-11-05 15:58:41浏览次数:1  
标签:Control 初始化 Flow PCIe FC INIT1

一、故事前传

之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。

较为详细解释请见之前的文章:

1. PCIe技术概述;

2.0 PCIe Transaction layer事务层概述;

2.1~2.3 TLP结构及原理解析;

2.4~2.5 Flow control机制概述,缓存结构以及信用积分;

二、Flow Control初始化

在PCIe总线中,任何事务传输之前,flow control必须要初始化。如果flow control初始化未成功,那么任何TLPs都无法发送出去。

此外,Flow control的初始化过程是在物理层link training完成之后进行,此时物理层中的LinkUp信号为触发状态,也即以为这物理层已经做好准备了。

图片

注:DLCMSM= Data Link Control and Management State Machine;

LTSSM= Link Training and Satus State Machine;

对于所有的虚拟通道(VC0~7), Flow Control初始化过程都是一样的,默认状态是enable VC0。

我们先来看一下DLCMSM状态图:

  1. DL_Inactive: 物理层通知数据链路层当前PCIe链路不可用;

    Reset操作将state machine的状态调整为DL_Inactive. 此时会向链路层以及事务层发送DL_Down信号通知此时状态;

  2. DL_Init: 物理层正处于链路初始化状态;

    当看到物理层传来的LinkUp信号(说明物理层做好准备了), stata machine的状态进入DL_init sub-state: FC_INIT1FC_INIT2. 这两个状态是Flow control的初始化的两个状态;

  3. DL_active: 当前PCIe链路层处于正常工作状态;

图片

接下来,我们针对Flow control初始化的两个阶段FC_INIT1FC_INIT2作进一步的介绍。

FC_INIT1:

当进入FC_INIT1阶段后,device会持续依次发送3个InitFC1 Flow Control DLLPs初始化接收端的VC buffer。

图片

依照PCIe协议中的定义,InitFC1 Flow Control DLLPs包括Posted, Non-Posted, Completions三类,格式如下表:

图片

FC_INIT2:

FC_INIT1已经对Flow Control相关的缓存进行初始化,FCINIT2的作用主要是验证FC_INIT1的结果。FC_INIT2与FC_INIT1携带相同的Credit信息。

在FC_INIT2阶段时,Device会依次发送3个InitFC2 Flow Control DLLPs初始化接收端的VC buffer。成功发送完毕之后进入DL_active并回报DL_Up,告知事务层链路可以正常工作了。

图片

与FC_INIT1一样,InitFC2 Flow Control DLLPs也包括Posted, Non-Posted, Completions三类,格式如下表:

图片

注:PCIe总线中规定每隔34us发送一组InitFC报文.

标签:Control,初始化,Flow,PCIe,FC,INIT1
From: https://www.cnblogs.com/FireLife-Cheng/p/18528204

相关文章

  • PCIe系列专题之二:2.5 Flow Control缓存架构及信用积分
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......
  • PCIe系列专题之二:2.7 Flow Control的实现过程
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......
  • SATA系列专题之三:3.3 Transport Layer传输层Flow Control机制解析
    一、故事前传在之前的文章中,已经解析了SATA协议的部分相关内容。较为详细解释请见之前的文章:1,浅析SATAPhysicalLayer物理层OOB信号;2,SATALinklayer链路层解析2.0-2.3;3,SATATransportlayer链路层解析3.0-3.2;我们这里主要解析TransportlayerFlowControl机制相关内容......
  • 强烈推荐一款查看Windows下设备信息的软件!USB/PCIE一览无余!
    在linux系统中,我们要查看硬件信息,通常通过lspci、lsusb、top、vmstat、free、iostat等命令,或者/proc/cpuinfo、/proc/net/dev等文件节点。《一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解》那么在Windows系统中,要如何查看详细的设备信息呢?本文以SIV(SIV-System......
  • WorkFlow源码剖析——Communicator之TCPServer(中)
    WorkFlow源码剖析——Communicator之TCPServer(中)前言上节博客已经详细介绍了workflow的poller的实现,这节我们来看看Communicator是如何利用poller的,对连接对象生命周期的管理。(PS:与其说Communicator利用的是poller,其实Communicator使用的是mpoller,上节在介绍poller时也提......
  • Stack Overflow 2023 年开发者调查报告!
    StackOverflow发布了2023年开发者调查报告,据称共计超过9万名开发者参与了此次调查。完整报告包含了受访开发者画像,以及关于开发技术、AI、职业、社区等方面的内容。本文主要介绍关于开发技术和AI的部分。懒人目录:最流行编程语言:JavaScript最“赚钱”编程语言......
  • 强噪声下基于mscnn-bigru-attention深度学习模型CWRU(凯斯西储大学)轴承故障诊断(Pytho
     1.效果视频(以0HP数据集为例,在-30DB下的测试准确率效果)强噪声下基于mscnn-bigru-attention深度学习模型CWRU(凯斯西储大学)轴承故障诊断_哔哩哔哩_bilibili对原始信号分别添加不同强度的高斯白噪声,以模拟实验数据遇到的实际环境中干扰噪声。原始信号(以0HP数据为例进行展示,可......
  • 手把手教你学pcie(12.17)--实现一个PCIe设备与用户空间应用程序之间的DMA数据传输
    目录基于PCIe的DMA数据传输项目实例1.环境搭建2.FPGA设计3.驱动开发4.用户空间应用程序开发5.调试6.总结实现一个PCIe设备与用户空间应用程序之间的DMA数据传输。这个例子将包括环境搭建、FPGA设计、驱动开发、用户空间应用程序开发和调试等环节。基于PCIe的D......
  • Pinctrl子系统中Pincontroller和client驱动程序的编写
    往期内容本专栏往期内容:Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析:imx_pinctrl_soc_info结构体Pinctrl子系统中client端使用pinctrl过......
  • WPF Button Setter Template Setter.Value ControlTemplate Border ContentPresenter
    <StackPanel.Resources><Stylex:Key="btnStyle"TargetType="{x:TypeButton}"><SetterProperty="Button.FontSize"Value="50"/><SetterProperty="Button.Background"Va......