PCIE学习
+ -

PCIe学习(六)

2025-08-06 1 0

4.2.4 链路初始化和训练

需要在训练过程中确定:

  • 链路宽度
  • 链路速率
  • Lane反转
  • Lane极性

链路训练完成:

  • 链路速率协商
  • 字段锁定
  • Lane极性
  • 字符锁定(Gen 1/2)或块锁定(Gen 3/4/5)
  • Lane排序
  • 链路宽度协商
  • Multi-Lane链路的Lane间相位补偿(de-skew)

4.2.4.1 训练序列(TS1,TS2)

训练序列由有序集组成,用于初始化字段对齐、符号对齐和交换物理层参数。当数据速率为2.5 GT/s或5.0 GT/s时,有序集不会被加扰;当数据速率为8.0 GT/s或更高时,有续集可以加扰,也可以不加扰,取决于具体有续集类型,遵守4.2.2.4章节的规则。

训练序列(TS1,TS2,Modified TS1,Modified TS 2)是连续传输的,只能插入SKP有序集,或者对于2.5GT/s以外的数据速率只能插入EIEOS有序集。

TS1/TS2等有续集定义请直接参考spec。

4.2.4.2 备用协议协商

在128b/130b编码中,PCIe PHY可以支持替代协议。替代协议被定义为使用PCIe PHY层的非PCIe协议。

这里暂时先跳过。

4.2.4.3 电气空闲序列(EIOS)

发送方在进入电气空闲前,必须在链路上发送电气空闲有序设置序列(Electrical Idle Ordered Set Sequence,EIOSQ)。如果当前数据速率为2.5 GT/s、8.0 GT/s、16.0 GT/s或32.0 GT/s,则将电空闲有序集序列(EIOSQ)定义为一个EIOS;如果当前数据率为5.0 GT/s,将其定义为两个连续的EIOS。

当使用8b/10b编码时,EIOS是一个K28.5(COM),后面跟着三个K28.3(IDL)符号。当使用128b/130b编码时,EIOS是有序集块。

只有在2.5 GT/s以外的速度下运行时,才会传输电气空闲退出有序集(EIEOS)。EIEOS是周期性传输的低频模式,有助于确保接收机的电空闲退出电路能够检测到电气空闲的退出。当使用128b/130b编码时,它也用于块对齐。电空闲退出有序集序列(EIEOSQ)包括用于32.0 GT/s及以上数据速率的两个连续EIEOS和用于5.0 GT/s、8.0 GT/s和16.0 GT/s的一个EIEOS。32.0 GT/s的两个EIEOS必须背靠背且不能被打断,才能被视为连续的并形成EIEOSQ。

电气空闲退出有续集定义:

204658954148

204707706898

这里有几个小节不贴了,神烦~~

接来的小节简单介绍一下

4.2.4.11 链路宽度和Lane序列号协商

PCIe链路支持1, 2, 4, 8, 12, 16, 32 Lane,也被称为x1, x2, x4, x8, x12, x16, x32(实际中并没有x12和x32,至少我没见过)。所有的Lane必须以相同速率传输。

链路宽度和Lane序列号协商过程用来确定链路数量和编号,以及属于链路的Lane数量和编号;不是有效链路的Lane退出协商,以成为单独的链路或保持在电气空闲中。

4.2.4.12 Lane-to-Lane相位补偿

一条链路的所有Lane是独立传输的,Lane与Lane之间不可避免地存在时钟偏移。

8b/10b编码时,Lane间相位补偿机制可以使用:

  • 接收到的TS1或TS2有序集的COM符号
  • 接收到的EIEOS有续集的COM符号
  • FTS序列后第一个收到的SKP有序集的COM符号
  • 当不使用SRIS(Separate Reference Clocks With No SSC)时,在训练序列期间接收的SKP有序集的COM符号

128b/130b编码时,Lane间相位补偿:

  • 收到的SDS有序集
  • 接收到的EIEOS有序集(退出L0s时除外)
  • 退出L0s时FTS有序集之后收到的第一个EIEOS有序集
  • 当以8.0 GT/s运行时,收到的SKP有序集
  • 当以16.0 GT/s或更高的数据速率运行时,FTS序列后第一个收到的SKP有序集
  • 当以16.0 GT/s或更高的数据速率运行时,收到的SKP有序集,但以下情况除外:退出训练序列或被EDS分隔的两个SKP有序集由

链路初始化过程将端口的非关联Lane构建为形成链路的关联Lane。为了将Lane正确配置为所需的链路,TS1和TS2有序集必须在所有Lane上将相应的字段(符号3、4和5)设置为相同的值。

PCIe链路在上电后,首先要完成链路训练,然后设备才能进行正常的被设置和使用。

所谓训练,就是要让链路两端建立起通信的桥梁。完成这一工作的就是LTSSM(Link Training and Status State Machine)。

为了完成这个艰巨的任务,LTSSM需要做的事情包括:

  • 比特锁定(Bit Lock):对于连续不断的电平信号,接收端需要知道采样的时刻,才能进一步确定采到的是1还是0。发送端是按照自己本地的时钟去发送,接收端的时钟与发送端的时钟完全不同步,这是接收端需要CDR(Clock Data Recovery)电路从接收到的比特流中恢复出发送端的时钟。

  • 字符锁定(Symbol Lock):对于Gen 1/2,接收端虽然完成了比特锁定,能正确从比特流中采样到每个比特,但此时仍然不知道比特流的边界在哪里,也就是不知道如何对比特流进行断句。这就需要发送端不断的发送TS1/2有续集,接收端需要从比特流中识别出特定的模式(比如COM字符),也就知道该怎么断句比特流了。

  • 块锁定(Block Lock):对于Gen 3,没有了控制字符,需要借助EIEOS有续集(00h和FFh交替)作为特定模式,帮助完成块锁定。

  • 链路宽度(Link Width):确定链路有多少Lane可用

  • Lane反转(Lane Reversal):对于多Lane的链路,需要Lane 0对Lane 0,Lane 1对Lane 1这样严格的对应关系。这样难免会对板级设计带来约束。如果设备能在内部改变对应关系,则可以避免这种约束。Lane反转不是强制功能。

204718133835

  • 极性反转(Polarity Inversion):PCIe是差分传输,在一个传输方向上有D+和D-两条线来组成一个Lane。在板级设计时,需要D+对D+,D-对D-这样连接。如果是D+对D-连接,需要链路的一方在内部做信号极性反转。这一过程链路双方是通过TS1/2有续集协商完成。
  • 204725582739
  • 链路数据速率(Link Data Rate):PCIe的最低传输速率是2.5GT/s,如果链路双方支持更高的速率,需要在链路训练时通知对方,最终将链路训练到支持的最高速率。
  • Lane间校正(Lane‐to‐Lane De‐skew):对于多Lane链路,每条Lane在电路板上的传输不可能做到完全一样,所以接收端在每条Lane上接收到的信号必然会有快有慢,这个问题也称作信号偏斜(Signal Skew)。接收端必须要对不同Lane做一些补偿,以减轻板级设计者的压力。

LTSSM的状态转换图如下所示。LTSSM共有11个状态,每个状态下面有若干细分状态。这11个状态可以分为五类:

  • 链路训练状态。当设备的复位信号被释放后,LTSSM经历状态转换过程为Detect -> Polling -> Configuration -> L0。在L0状态,链路可以正常传输。
  • 重新训练状态,也叫恢复(Recovery)状态。当链路从低功耗状态切换回L0,或者是链路宽度或速度需要改变时,需要重新训练。
  • 软件驱动的电源管理状态。软件可以控制设备进入低功耗状态(D1,D2,D3hot,D3Cold),链路对应也要进入低功耗状态L1或者L2。
  • 活动状态电源管理(Active-State Power Management,ASPM)状态。在链路上没有有效传输的时间段内,允许ASPM硬件切换链路到低功耗状态(L0s或者ASPM L1)。
  • 其它状态。包括Disable,Loopback,Hot Reset。

20474386302

LTSSM的具体11个状态如下:

  • Detect:此状态是设备复位后的初始状态,目的是检测链路远端是否存在设备
  • Polling:此状态适用于测试设备是否符合电压和时序规范,链路的发送端不断发送TS1和TS2有续集(2.5GT/s速率),接收端通过这些有续集完成比特锁定,字符锁定,Lane极性反转等等
  • Configuration:在此状态,链路两端通过协商机制确定Lane宽度,分配Lane编号,Lane反转,Lane间补偿等
  • Recovery:有很多种原因会导致LTSSM进入此状态,比如在链路L0时发生错误,链路从L1切换回L0等等,在此状态下,需要发送FTS序列
  • L0:正常工作状态,初次进入L0的链路速率是2.5GT/s,如果两端支持更高速率,需要进入Recovery在更高速率下进行重新训练
  • L0s:低功耗状态,提供灵活的低功耗管理,从L0s切换回L0需要的时间更短。从L0转移到L0s,需要发送EIOS;退出L0s,需要发送FTS
  • L1:比L0s激进的低功耗状态
  • L2:比L1激进的低功耗状态,此状态下,发射机和接收机关闭,主要供电电源和时钟关闭,仅有辅助电源开启
  • Disable:此状态允许禁用已配置的链接。在这种状态下,发射端处于电空闲状态,而接收端处于低阻抗状态。软件通过设置链路控制寄存器中的Disable位来命令设备执行此操作。然后,该设备发送16个TS1,其中在TS1训练控制字段中设置了Disable Link位。接收端在接收到这些TS1时被禁用
  • Loopback:此状态用于测试和故障隔离,基本操作是,环回主设备将在训练控制字段中设置了Loopback位的TS1有序集发送给将成为环回从设备。当一个设备看到设置了Loopback位的两个连续TS1时,它会作为环回从设备进入环回状态
  • Hot Reset:软件可以通过设置桥接控制寄存器中的Secondary Bus Reset位来重置链路。这会导致桥的下游端口发送TS1,并在TS1训练控制字段中设置热复位。当接收端看到两个连续的TS1设置了热复位时,它必须复位其设备

上述11个状态中,Detect,Polling,Configuration,L0,Recovery这几个状态较为复杂和常用。有的状态还细分出若干子状态。

Detect

此状态有两个子状态:Detect.Quiet和Detect.Active。

20475728764

Detect.Quiet

设备在复位被释放后进入此状态(除Function Level Reset)。发送端在电气空闲状态下启动。物理层通过置低LinkUp来告诉数据链路层,PCIe的物理链路尚未准备好。

当所有Lane退出电气空闲,或者超过12ms,从Detect.Quiet状态退出,切换到Detec.Active状态。

Detect.Active

在此状态下,检测链路的对端是否存在PCIe设备。

如果在所有Lane上都没有检测到有PCIe设备存在,则切换回Detect.Quiet状态。

如果检测到有PCIe设备存在,则切换到Polling状态。

Polling

此状态的主要目的是让链路两端两个设备建立沟通,了解对方在说什么。换句话说,它们需要在彼此传输的比特流上建立比特锁定和符号锁定,并解决极性反转等问题。一旦这些工作完成,每个设备都可以成功地从链路对端接收TS1和TS2有序集。

此状态有三个子状态:Polling.Active,Polling.Configuration,Polling.Compliance。

204804536715

Polling.Active

在此状态下,发送端至少需要发送1024个连续的TS1。链路两端的设备很可能不会同时从Detect.Active状态切换到Polling.Active,因此需要连续发送TS1来不停向对端设备展现(Advertise)自己。发送1024个TS1需要64us(在2.5GT/s)。

如果在发送至少1024个TS1之后,所有检测到的通道接收到满足以下条件之一的8个连续训练序列,则进入Polling.Configuration状态:

  • 接收到链路和通道设置为PAD(Packet filler)的TS1,Compliance Receive位清除为0b(符号5的第4位)。
  • 接收到链路和通道设置为PAD的TS1,符号5的Loopback位设置为1b。
  • 接收到链路和通道设置为PAD的TS2。

如果Link Control 2寄存器中的Enter Compliance字段设置为1b,或者如果该位是在进入Polling.Active之前设置的,则必须立即更改状态为Polling.Compilance,并且Polling.Active中不发送TS1。

204811219632

如果在24ms内,及不满足进入Polling.Configuration状态,也不满足进入Polling.Compilance状态,则切换到Detect状态。

Polling.Configuration

发送端停止发送TS1,开始发送TS2。更改为发送TS2s的目的是向链路对端设备通告本设备已准备好进入状态机中的下一个状态。它是一种握手机制,用于确保链路上的两个设备一起通过LTSSM。

在任何检测到的通道上接收到链路和通道设置为PAD的八个连续TS2,并且自接收到一个TS2以来至少发送了16个TS2之后,退出当前状态,切换到Configuration。

否则,在48ms超时后,切换到Detect状态。

Polling.Compliance

该子状态仅用于测试,并使发射机发送特定模式,以创建接近最坏情况的符号间干扰(ISI)和串扰条件,从而促进链路分析。

对于8b/10b和128b/130b编码,特定模式有不同的规定。

Configuration

此状态的主要目的是发现端口是如何连接的,并为其分配Lane编号。比如,一个8 Lane的设备可以连接两个4 Lane的设备。此时,DSP承担“leader”角色,而USP承担“follower”角色。DSP将指定USP的链路和Lane编号,USP将简单地使用其被告知的相同值进行回复。链路和Lane编号在TS1里面的字段。

下图是一个示例,Switch有一个x8的USP,四个x2的DSP,每个DSP对应有一个内部的虚拟桥。在实际应用时,允许将四个DSP合并成两个x4的DSP,此时,两个内部虚拟桥将不会被使用。

204818424543

Configuration状态有六个子状态:

  • Configuration.Linkwidth.Start
  • Configuration.Linkwidth.Accept
  • Configuration.Lanenum.Wait
  • Configuration.Lanenum.Accept
  • Configuration.Complete
  • Configuration.Idle

204822629953

六个子状态的介绍跳过。

L0

这是正常的、完全可操作的链路状态,在此状态期间,链路两端之间可以交换逻辑空闲、TLP和DLLP。L0是在链路训练过程结束后立即实现的。物理层还通过设置LinkUp变量通知上层链路已准备好运行

如果链路速度或链路宽度发生变化,或者链路伙伴通过进入“恢复”或“电气空闲”发起操作,则进入Recovery状态。

Recovery

当在Configuration.Idle状态时,链路上出现错误的字符;或者是在L0状态时,需要提升链路速率至最高,等等情况,LTSSM需要进入Recovery状态。

204827864911

Recovery状态是LTSSM中比较复杂的状态,有以下几种子状态:

  • Recovery.RcvrLock:在该子状态中,允许上游端口指定下游端口在5GT/s下运行时应使用的去加重(De-emphasis)级别。想要将速率更改为8.0 GT/s并重新进行均衡的下游端口必须发送设置了speed_change位的EQ TS1,并公布8.0 GT/s速率。
  • Recovery.Equalization:该子状态用于执行8.0 GT/s和更高速率的链路均衡(Link Equalization)过程。
  • Recovery.Speed:在该子状态,设备的发送器必须进入电气空闲,并等待接收器进入电气空闲。
  • Recovery.RcvrCfg:只有在接收到至少8个TS1或TS2有序集(具有之前协商的相同Link和Lane编号)后,才能从Recovery.RcvrLock进入此状态。这意味着位和符号/块锁定已经建立,现在端口必须确定是否有任何其他项目需要在Recovery状态下
  • Recovery.Idle:顾名思义,发送器通常会在该子状态下发送Idles(空闲),作为切换到完全运行L0状态的准备。对于8b/10b模式,空闲数据通常在所有Lane上发送,而对于128b/130b,发送SDS以启动数据流,然后空闲数据字符被发送到所有Lane上。

#

前面讲过,链路均衡过程分为四个阶段,phase 0-3。一旦速度变为8.0 GT/s,TS1中的EC(Equalization Control)字段指示当前使用的均衡阶段。

204835103942

接下来分析一下每个Phase,下游端口和上游端口都需要做什么。

因为链路均衡过程是下游端口发起的,所以对于下游端口来说,没有Phase 0。

  • Phase 1 Downstream。DSP发送具有EC=01b的TS1,同时使用Lane均衡控制寄存器中的预设值以及与Tx预设字段对应的FS、LF和Post‐cursor系数字段。如果下行端口希望继续均衡过程,并且当其所有配置的Lane接收到两个连续的EC=01b的TS1时,下行端口将转换到Phase 2。
  • Phase 2 Downstream。下行端口在每条Lane上独立发送EC=10b和系数设置的TS1。当上行端口对这些变化感到满意时,它开始发送EC=11b的TS1,指示希望改变到Phase 3。当DSP接收到两个像这样的连续TS1时,将均衡Phase 2 Successful状态位设置为1b,并进入Phase 3。
  • Phase 3 Downstream。下行端口发送EC=11b的TS1,并开始独立评估每个通道的上行Tx设置
  • Phase 0 Upstream。USP发送TS1(EC=00b),使用进入该状态前在EQ TS2s中传送的Tx预设值。发送的TS1中的均衡信息字段必须显示预设值,以及与该预设对应的Pre‐cursor, Cursor, Post‐cursor系数字段。当USP在所有配置的Lane上接收到EC=01b的两个连续TS1时,表明其可以识别来自下游端口的TS1,则可以进入Phase 1。
  • Phase 1 Upstream。上游端口发送EC=01b的TS1,同时使用Phase 0中确定的发送器设置。这些TS1包含FS、LF和当前使用的Post‐cursor系数值。如果USP在所有配置的通道接收到EC=10b的两个连续TS1,指示下游端口想要进入Phase 2,则USP进入Phase 2,并且该端口将设置均衡Phase 1成功状态位设置为1b。
  • Phase 2 Upstream。上行端口发送EC=10b的TS1,并开始为下行端口寻找最佳Tx值的过程。请记住,每个通道的设置都是独立确定的。如果所有配置的Lane都达到其最佳设置。则USP进入Phase 3,均衡Phase 2成功状态位将设置为1b。
  • Phase 3 Upstream。上游端口发送EC=11b的TS1,并响应来自下游端口的所请求的Tx值。如果没有看到两个连续的TS1,则保持当前Tx预设值和系数值。然而,如果第一次接收到EC=11b(下游端口已进入阶段3)的两个连续TS1,或者接收到与上次不同的预设值或系数值,并且如果所请求的值是合法的且受支持的,则在请求它们的第二TS1结束后的500ns内更改Tx设置以使用它们。当下游端口对这些变化感到满意时,它开始发送EC=00b的TS1,表示希望完成均衡过程。当USP接收到像这样的两个连续TS1时,将均衡Phase 3成功和均衡完成状态位设置为1b。

L0s

链路低功耗状态。设备可以在硬件控制下自动进入或退出L0s状态,无需软件参与。

对于发射机和接收机,有不同的L0s子状态。

发射机有三种子状态:

  • Tx_L0s.Entry:发射机发送一个EIOS(在5GT/s时发送两个),发射机进入电气空闲
  • Tx_L0s.Idle:在这个子状态,发射机保持电气空闲,直到被指示切换状态
  • Tx_L0s.FTS:在这个子状态,发射机发送FTS有续集,发送的FTS数量是链路对端在其TS有序集合中在导致L0的最后一个训练序列中公布的N_FTS值

204843122293

接收机也有三个子状态:

  • Rx_L0s.Entry:当接收机接收到EIOS后进入此子状态,前提是它支持L0s并且尚未定向到L1或L2。
  • Rx_L0s.Idle:接收机处于电气空闲模式,等待退出电气空闲的指示。
  • Rx_L0s.FTS:在此子状态,接收机退出电气空闲,试图在随后的比特流(实际上是FTS有续集)重新建立比特锁定和字符锁定或块锁定。

204848458777

L1

相比于L0s,L1更加节省功耗,相应的退出延迟更大。L1状态与L0s的不同之处还在于它影响链路的两个方向。

L1有两个子状态:

  • L1.Entry:为了使上游端口进入这种状态,必须向其链路对端发送进入L1的请求,一旦接收到L1请求确认,上行端口就进入L1.Entry子状态。为了使下游端口进入此状态,必须从上游端口接收L1输入请求,并对该请求发送确认响应。然后,下游端口等待接收EIOS,并使其接收Lane上的电压下降到电气空闲,下游端口进入L1入口子状态。
  • L1.Idle:在此子状态期间,变送器保持在电气空闲。

204853317314

L2

L2是功耗更低的状态。当上行端口的设备处于D3Cold电源状态并且适当的链路握手已经完成时,电源管理软件指示上行端口启动进入L2。

在L2时,主供电(Main Power)被关断,只有辅助电源开启。

204857687177

L2有两个子状态:

  • L2.Idle:要进入此子状态,链路上的两个端口之间必须已经进行了所有必要的握手过程,并且端口已经发送和接收了所需的EIOS。
  • L2.TransmitWake:在此子状态期间,发射器将至少在Lane 0上发送Beacon。需要注意,此状态仅适用于上游端口,因为只有它们才能发送Beacon。

#

Hot Reset

此状态的目的是允许使用带内信令将配置的链路和相关的下游设备进行复位操作。

Disable

被禁用的链路处于电气空闲状态,不必保持直流共模电压。软件通过在设备的链路控制寄存器中设置Link Disable位来启动此操作,然后设备发送TS1(Link Disable比特被置位)。

Loopback

Loopback状态是一种测试和调试功能,在正常操作过程中不使用。充当环回主机的设备可以通过发送TS1(Loopback比特被置位),将链路伙伴置于环回从机模式。

4.3 Retimers

随着PCIe链路速度越来越快,信号衰减变得越来越大。为解决这个问题,有三种解决方案:高端的PCB板,Redriver芯片,Retimer芯片。

Redriver本质上是通过信号放大来提升信号的高频分量,抵消链路上的衰减。Redriver不涉及到任何协议相关的内容,所以链路两端的PCIe设备是无法感知到Redriver存在的。

Retimer是一种模拟/数字混合芯片,其原理是使用内部的时钟恢复电路,重新定时输入信号以消除时钟偏移和抖动,并校正信号的相位和时间偏差(jitter)。它可以延长接口的传输距离并提高信号质量。Retimer不仅会在Rx端实现CTLE和DFE,还会在Tx端实现相应的均衡功能。因此Retimer能够比Redriver更好的降低链路物理损耗。但是,复杂的Retimer会增加链路延迟。Retimer涉及到协议相关内容,本节正是描述Retimer。链路两端的PCIe设备是可以感知到Retimer存在的。

Retimer与SoC设计关系不大,略过。

4.4 动态带宽变化

PCIe协议允许在运行时改变链路速率和宽度。比如,在性能优先时,使用最高的速率和最宽的Lane数;在功耗优先时,使用较低的速率和一部分Lane。

改变链路速率或链路宽度会造成链路重新训练。如果在链路处在L0状态时改变速率,发起端的LTSSM会发送TS1,随后链路两端的端口的LTSSM都进入Recovery状态,当速率改变后再返回L0状态。

类似的,改变链路宽度的话,发起端的LTSSM开始发送TS1,随后链路两端的端口的LTSSM都进入Recovery状态在进入Configuration状态,链路宽度改变后再返回L0。

接下来分开分析。

4.4.1 动态链路速率变化

下图是LTSSM的状态转换图。在Gen1中,在Polling状态完成速率变换;在Gen2中,在Recovery状态完成速率变换。

204908228680

TS1的Byte 4是关于速率的指示,其中的Bit 1-3是支持的速率;Bit 6的含义取决于是上游端口还是下游端口,以及LTSSM处于的状态,“Autonomous“表示出于自身硬件特定原因而非可靠性问题而要求进行此更改;Bit 7被上行端口用来请求速度改变。在TS2中,Bit 6的含义有一些不同。

注意,下图是Gen 3的TS1/2格式。在Gen 5中,Byte 4的Bit 4/5用来指示更高速率。

204913841255

速率变化必须由上游端口启动。下图是一个从2.5GT/s变换到5.0GT/s的例子。该例子中EP有一个上游端口,RC有一个下游端口。下游端口的LTSSM进入Recovery(Recovery.RcvrLock)状态,发送TS1;下游端口接收到TS1,也进入Recovery,并返回TS1。

204923451867

当上游端口接收到下游端口返回的TS1,进入Recovery.RcvrCfg状态,开始发送TS2.下游端口监测到TS2,进入Recovery.RcvrCfg,返回TS2。

204927664487

两个端口监测到连续的8个TS2,进入Recovery.Speed。

20493388904

一旦达到Recovery.Speed子状态,链路在两个方向上都处于电气空闲状态,速度变化发生在内部。选择的速度将是TS1和TS2的字段中指定的速度,在本例中是5.0GT/s。随后,链路两端都转换回Recovery.RcvrLock,并通过再次发送TS1退出电气空闲。

204939239107

当硬件决定变换速率时,软件不能控制,但是可以通过控制寄存器限制或禁用此功能。

204950236520

204954759721

#

4.4.2 动态链路宽度变化

改变链路速度的相同基本操作也可以用于改变链路宽度,尽管顺序稍微复杂一些,因为涉及更多的LTSSM步骤。

下面是链路宽度改变的例子。

205000289724

205004115914

205008803565

205013175627

205017996832

205023102200

205028899120
205033952237
物理层是PCIe中最复杂和繁琐的部分,spec中所占篇幅最多。限于篇幅和个人能力,很多内容只是简单介绍一点,甚至有的部分直接跳过了。

【待续】

本文转自于公众号《老秦谈芯》,版权归《老秦谈芯》所有。

0 篇笔记 写笔记

关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!