0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PCIe总线必须要先完成Flow Control初始化

SwM2_ChinaAET 来源:未知 作者:李倩 2018-05-24 09:18 次阅读

在任何事务层包(TLP)发送之前,PCIe总线必须要先完成Flow Control初始化。当物理层完成链路初始化后,便会将LinkUp信号变为有效,告知数据链路层可以开始Flow Control初始化了。

如下图所示:

注:由于VC0是默认使能的,所以当Flow Control初始化开始时,其会被自动的初始化。其他的Virtual Channel是可选的,只有当被配置为使能的时候才会被初始化。

Flow Control初始化被分为两个步骤,FC_Init1和FC_Init2,其在整个数据链路控制和管理状态机(Data Link Control & Management State Machine)的位置如下图所示:

在FC_Init1步骤中,PCIe设备会连续地发送三个InitFC1类型的Flow Control DLLP来报告其接收Buffer 的大小。三个DLLP的顺序是固定的:Posted、Non-Posted然后是Completions。如下图所示:

FC_Init2与FC-Init1类似,同样是连续的发送三个InitFC2类型的DLLP,当完成后,DLCMSM(上一篇文章中提到的状态机)会切换到DL_Active状态,表明数据链路层初始化完成。

注:可能有人会有疑惑了,FC_Init1和FC_Init2干的活不是差不多嘛,为什么还需要FC_Init2呢?原因是,不同的设备完成FC_Init1的时间可能是不同的,增加FC_Init2是为了保证每个设备都能收到FC初始化DLLP。

FC_Init DLLP的格式如下图所示:

在完成FC初始化之后,相邻的两个设备之间会周期性的通过Updated FC DLLP更新接收Buffer的大小。如下图所示:

Update FC DLLP的格式与FC_Init的格式是类似的,具体如下:

前面说到。Update FC DLLP是周期性发送的,周期的值可以通过以下公式计算得:

具体可以参考PCIe的Spec,这里不再详细介绍,下面给出Gen1和Gen2的周期表格(根据公式计算的结果)。其中AF为AckFactor。

注:Mindshare的书中,为了便于理解,把AckFactor一词修改为UpdateFactor,实际上指的是同一个东西。

Gen1 (2.5GT/s)如下表所示:

Gen2(5GT/s)如下表所示:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 总线
    +关注

    关注

    10

    文章

    2692

    浏览量

    87151
  • PCIe
    +关注

    关注

    13

    文章

    1078

    浏览量

    80694
  • 数据链路层
    +关注

    关注

    0

    文章

    51

    浏览量

    11942

原文标题:【博文连载】PCIe扫盲——Flow Control基础(二)

文章出处:【微信号:ChinaAET,微信公众号:电子技术应用ChinaAET】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    sim900a模块与32通信实现打电话发信息的功能,之前必须要初始化吗,不能直接发命令吗

    sim900a模块与32通信实现打电话发信息的功能,之前必须要初始化吗,不能直接发命令吗
    发表于 03-30 00:21

    Spartan-3AN LCD接口如何初始化

    必须通过初始化过程进行类似于使用4位接口所描述的?什么是如果我想使用8位,那么初始化过程会有所不同接口?如果使用8位接口,是否还必须完成显示
    发表于 08-27 09:12

    FreeRTOS内核默认会初始化systick是必须的吗?

    FreeRTOS内核默认会初始化systick;原子哥的视频教程里的例程也会使用delay_init初始化systick。请问是否是必须,有无影响?
    发表于 07-20 08:03

    如何用汇编完成C语言环境的初始化

      我们使用汇编编写了 LED 灯的实验,在实际开发过程中大部分还是使用 C 语言,汇编只是用来完成 C 语言环境的初始化,本章我么就来实现用汇编完成 C 语言环境的初始化,然后用 C
    发表于 12-29 07:06

    CAN总线通信初始化配置流程

    一、CAN总线通信初始化配置流程CAN总线GPIO和时钟配置CAN总线RX0 中断优先级配置CAN总线
    发表于 08-19 08:22

    基于stm32CAN总线初始化

    1、CAN总线初始化void can_init(void){CAN_InitTypeDefCAN_InitStructure;CAN_FilterInitTypeDefCAN_FilterInitStructure;/* CAN register init */CAN_
    发表于 08-19 07:49

    CAN总线初始化

    1、CAN总线初始化void can_init(void){CAN_InitTypeDefCAN_InitStructure
    发表于 08-19 07:17

    STM32F103RBT6初始化USART3

    STM32F103RBT6初始化USART3然后在初始化CAN导致CAN不工作,示波器看,CAN没有任何输出信号。将初始化函数加延时,无效。将初始
    发表于 08-20 06:20

    【原创分享】变量的初始化技巧

    由于在嵌入式系统中必须考虑程序规模的问题,因此,对程序中的变量的初始化也需要进行慎重的考虑。在C语言中,基本数据结构(字符型、整型)的初始化相对简单;数组、结构体属于C语言中的构造类型,其变量在
    发表于 09-08 15:28

    stm32 LCD为什么必须进行串口初始化

    stm32 LCD为什么必须进行串口初始化
    发表于 12-16 07:57

    变量初始化的基本原则

    一、变量初始化变量初始化的基本原则为:可综合代码中完成内部变量的初始化,Testbench中完成可综合代码所需的各类接口信号的
    发表于 01-19 07:07

    采用Flow Control机制的PCIe总线

    PCIe总线为了解决这一问题,提出了Flow Control的概念,如下图所示。PCIe总线中要
    的头像 发表于 04-26 08:54 5409次阅读
    采用<b class='flag-5'>Flow</b> <b class='flag-5'>Control</b>机制的<b class='flag-5'>PCIe</b><b class='flag-5'>总线</b>

    Flow Control机制可以显著地提高总线的传输效率

    PCIe Spec规定,PCIe设备的每一个端口(Ports)都必须支持Flow Control机制,在发送TLP之前,
    的头像 发表于 05-24 09:26 6615次阅读
    <b class='flag-5'>Flow</b> <b class='flag-5'>Control</b>机制可以显著地提高<b class='flag-5'>总线</b>的传输效率

    PCIe总线中的链路初始化与训练

    前面的文章中介绍过,PCIe收发的都是差分信号,有的时候Link两端的设备的对应信号的极性可能是相反的。因此,PCIe Spec允许在链路训练与初始化的时候,对其进行调整,如下图所示。和通道位置翻转
    的头像 发表于 06-05 09:06 1.1w次阅读
    <b class='flag-5'>PCIe</b><b class='flag-5'>总线</b>中的链路<b class='flag-5'>初始化</b>与训练

    扒一扒PCIe中的Flow Control

    在处理TLP报文时,根据Fmt字段以及Type字段可以将TLP报文分为二十多种,当TLP报文送至数据链路层时,数据链路层在进行流量控制处理时则不会考虑这么多种情况。数据链路层里面的Flow Control,则会将报文分为三类:
    的头像 发表于 07-03 09:20 1233次阅读
    扒一扒<b class='flag-5'>PCIe</b>中的<b class='flag-5'>Flow</b> <b class='flag-5'>Control</b>