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

    文章

    2887

    浏览量

    88115
  • PCIe
    +关注

    关注

    15

    文章

    1239

    浏览量

    82687
  • 数据链路层
    +关注

    关注

    0

    文章

    56

    浏览量

    11987

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

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

收藏 人收藏

    评论

    相关推荐

    RT-Thread自动初始化详解

    我们知道,在写裸机程序时,当我们完成硬件初始化后,就需要在主函数中进行调用。当我们使用RT-Thread后,完全不需要这样做了,我们可以将硬件等自动初始化。 RT-Thread 自动初始化
    的头像 发表于 06-25 21:38 1.1w次阅读
    RT-Thread自动<b class='flag-5'>初始化</b>详解

    CAN总线初始化

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

    手机模块初始化向导

    手机模块初始化向导:为了刚好的对手机模块进行初始化,所以把最基本的向导写下来.本向导适用于本公司的西门子TC35I和华为GT9000模块。一、在初始化手机模块前,请先确定DT
    发表于 09-18 09:41 17次下载

    FPGA的ROM初始化问题讨论

    本文讨论FPGA的ROM初始化问题,详细介绍mit文件的创建与使用。利用FPGA实现的ROM只能认为器件处于用户状态时具备ROM功能。使用时不必要刻意划分,而ROM单元的初始化则是设计人员必须
    发表于 02-08 14:24 5502次阅读
    FPGA的ROM<b class='flag-5'>初始化</b>问题讨论

    RDA1846S初始化设置

    RDA1846S初始化设置RDA1846S初始化设置RDA1846S初始化设置
    发表于 01-15 17:08 0次下载

    CAN总线控制器SJA1000的初始化程序设计

    CAN总线控制器SJA1000的初始化程序设计。
    发表于 05-06 11:29 12次下载

    UCOS_III_配置与初始化

    UCOS_III_配置与初始化
    发表于 12-20 22:53 5次下载

    HX711初始化程序

    这是HX711的初始化程序
    发表于 02-08 01:51 90次下载

    采用Flow Control机制的PCIe总线

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

    8253初始化程序分享_8253应用案例

    本文首先介绍了8253概念及8253各通道的工作方式,其次详细介绍了8253初始化要求及编程,最后用一个例子介绍了8253的初始化程序。
    发表于 05-23 15:52 2.2w次阅读
    8253<b class='flag-5'>初始化</b>程序分享_8253应用案例

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

    PCIe Spec规定,PCIe设备的每一个端口(Ports)都必须支持Flow Control机制,在发送TLP之前,
    的头像 发表于 05-24 09:26 7156次阅读
    <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>与训练

    IIC总线初始化基本驱动参考程序应用代码免费下载

    本文档的主要内容详细介绍的是IIC总线初始化基本驱动参考程序应用代码免费下载。程序功能:为IIC总线的基本驱动程序(此程序没有写主函数,只是一些IIC必备的子函数)
    发表于 01-16 08:00 5次下载
    IIC<b class='flag-5'>总线</b><b class='flag-5'>初始化</b>基本驱动参考程序应用代码免费下载

    在51平台下初始化文件的引入导致全局变量无法初始化的问题如何解决

    本文档的主要内容详细介绍的是在51平台下初始化文件的引入导致全局变量无法初始化的问题如何解决。
    发表于 08-20 17:31 0次下载
    在51平台下<b class='flag-5'>初始化</b>文件的引入导致全局变量无法<b class='flag-5'>初始化</b>的问题如何解决

    C++之初始化列表学习的总结

    类中可以使用初始化列表对成员进行初始化
    的头像 发表于 12-24 17:39 854次阅读