当前位置: 首页 > news >正文

PCIe 复位:必须了解的PERST#

1.什么是PERST#   

PERST#作为 Fundamental Reset,是直接通过边带信号PERST#(PCI Express Reset)产生的。Fundamental Reset会复位整个PCIe设备,初始化所有与状态机相关的硬件逻辑,端口状态以及配置空间中的配置寄存器等(every state machine and all the hardware logic, port states and configuration registers)。但是,也有一个例外,就是属性为“Sticky“配置寄存器字段。此类寄存器在辅助电源Vaux存在时,不受Fundamental Reset影响。但是如果主电源和Vaux都被移除,则也会被重置。“Sticky“配置寄存器字段对于诊断“problems that require a reset to get a Link working again”很有用。

图片

如图18-1所示,IO控制器中心(ICH)芯片可以根据系统电源信号“POWERGOOD”的状态产生PERST#,因为这表明主电源已打开且稳定。主机上电时和下电时,信号POWERGOOD的跳变会导致PERST# 复位和复位释放。如图所示,PERST#能够控制图中的多种设备,例如PCIE Switch、PCI Express to-PCI-X bridge,以及Add-In Card(Endpoint设备,常见设备类型有网卡和声卡)。

2.PERST#如何作用到EP设备  

   

图片

图2:PERST复位时序图

如图2所示为PERST#信号在主机上电时的时序图,初始状态(主机未上电)PERST#置为不定态(正常为0),一旦主机上电,马上PERST#置为0产生复位,保持一段时间(若干秒)后PERST#置为1表示复位撤销。不同主机上电时对PERST#信号的处理略有差异,有些主机存在两次PERST#复位。   

对PCIe Endpoint设备来说,PERST#信号来自PCIe卡槽,通过金手指传递到Add-In Card中的PCIe逻辑。如图3所示,当PERST#为0时,会通过复位产生逻辑(reset generate)产生phy_por_rstn和ctrl_rstn,phy_por_rstn用于复位PHY模块,ctrl_rstn用于复位controller模块。

需要注意的是,在主流的PCIe上电流程中,PCIe PHY需要加载firmware,为保证firmware加载正常进行会屏蔽PERST#,firmware加载完成后会解除PERST#屏蔽,并且后续的PERST#复位不会导致firmware二次加载(只要设备不断电)。

图片

图3:PERST#作为范围

3.如何处理PERST#  

作为EP设备,收到PERST#复位需要将PCIe寄存器和状态进行复位,在复位释放后重新进行PCIe链路训练,那么此时Add-In Card中除了PCIE之外的其他模块改怎么处理呢?也需要进行复位吗?

Add-In Card是否随着PERST#复位而进行整体复位需要根据芯片的应用场景进行选择。通常为了保证能够满足各类要求,至少要保证能够做到如下场景:

1)仅复位PCIE,其他模块不复位,PCIe链路协商成功后能够进行通信

2)复位PCIE以及耦合紧密的模块,其他模块不复位,,PCIe链路协商成功后能够进行通信

3)整个芯片均复位

以上3种处理方式可以根据配置进行选择。          

4.参考文档  

MindShare PCI Express Technology 3.0

PCI Express Base Specification Revision 5.0, Version 1.0


http://www.mrgr.cn/news/16912.html

相关文章:

  • web渗透:XXE漏洞
  • Python中文件打开和关闭的方法
  • 【 html+css 绚丽Loading 】 000029 三元化虚阵
  • 【Java学习】多线程JUC万字超详解
  • 编程小白如何克服学习编程过程中的挫败感?
  • 布隆过滤器详解
  • 数据赋能(194)——开发:数据服务——技术方法、主要工具
  • 005.Python爬虫系列_浏览器开发者工具(详解)
  • 【C++】智能指针——auto_ptr,unique_ptr,shared_ptr
  • kaggle平台free使用GPU
  • 使用Pywin32和其他库控制Office软件进行自动化操作
  • linux 内核网络分析 -- 分配并初始化socket
  • 12 事务
  • 通义说【线性代数】什么是线性
  • YoloV8实战:使用YoloV8实现OBB框检测
  • Atlas阿特拉斯wordpress主题
  • 四、Selenium操作指南(一)
  • 操作系统底层工作的整体认识
  • stm32 8080时序驱动lcd屏幕
  • 基于yolov8的驾驶员行为检测疲劳检测系统python源码+onnx模型+评估指标曲线+精美GUI界面