PCIe 驱动流程(LTSSM)
经过两个月的调试和文档阅读,对PCIe也有了初步的认识,对于PCIe的学习主要来自3个方面:
1、 王齐老师的《PCI Express 体系结构导读》和王齐老师的博客http://blog.sina.com.cn/s/blog_6472c4cc0100qbvp.html。非常感谢王齐老师的书,对于学习PCIe协议无疑是最佳的学习资料。
2、《PCI Express Base Specification 3.0》PCIe的标准协议。
3、 Synopsys公司提供 PCIe ip相关的data sheet。
以下是对PCIe建立链接过程的记录,主要针对Sysnosys 的PCIe的IP,但是同时应该也有普遍的适用性:
1.1 端口身份的识别
该部分是PCIe 底层Core识别PCIe端口的过程,PCIe总线中的有3中角色:RC(root complex)、EP(end point)、switch。他们在PCIe总线中拓扑结构如下图所示:
作为用户,在例化这个IP核时,需要做的第一个事情就是通过接口配置PCIe的device_type。
1.2 关注时钟与复位
在使用PCIe的IP时,再需要关注的是该内核的时钟和复位过程。可能作为用户,该过程硬件已经帮你做完了,但是也最最好熟悉一下结构和流程,并确保core的内部时钟已经启动,复位已经成功。
在实际的应用过程中,测试的第一步就是将PCIe core的时钟拉到芯片外部进行测试。
1.3 Disable PCIe的LTSSM的状态机
LTSSM(Link Training and Status State Machine )是PCIe最为核心的一个状态机,PCIe总线在进行链路训练时,将使用LTSSM状态机。而在启动LTSSM之前,用户一般需要进行参数的配置,所以在Core启动后,先会将LTSSM状态机disable。
1.4 通过DBI配置参数
该部分是配置PCIe参数的部分,DBI(data bus interface)是synopsys定义的访问PCIe寄存器的接口,PCIe协议规定了两种配置空间:PCI Configuration Space和 PCIe Extend configuration Space。而往往IP的生成商,会加入一个属于自己的配置空间,synopsys添加的配置空间为:Port
logic Synosys Register。
其中PCI Configuration Space中主要由:PCI configuration header、PCI Power Management Capability、PCI Express Capability 、MSI Capability、MSI-X Capability VPD Capability组成。
PCI configuration header:提供了关于Vendor ID和Device ID等信息,其中比较重要的是Base Address Register(BAR),该寄存器设计到PCIe设备的地址空间的分配。
PCI Power Management Capability:该部分是系统电源管理的寄存器,这些Capability一般都会包含一个Status寄存器、一个Control寄存器、一个Capability寄存器。其中control寄存器通常是需要用户配置的,而Capability主要是供用户访问,以知道当前部分的参数设置的情况,而status寄存器是提供用户访问,以获得当前部分(比如电源)的具体的状态。
PCI Express Capability:该结构存放了一些和PCIe总线相关的信,包括PCIe链路和插槽的信息。
MSI、MSI-X:为中断控制的capability,与Power Management capability寄存器的结构是类似的。
PCIe Extend configuration Space是PCIe设备独有的,PCI设备并不支持该结构,实际上绝大多数的PCIe设备也不支持该结构。
Port logic SynosysRegister:是synopsys公司针对自身的IP,定义的与接口相关的寄存器,该部分寄存器多与物理层相关。
在此时的测试过程中,以进行Loopback测试为例,主要需要设置的参数包括PCI configurationheader和Port logicSynosys Register。
1、 Set the PIPE Loopback Enable bit
2、 Set the Loopback Enable bit
3、 设置BAR地址分配寄存器。
1.5 启动LTSSM
app_ltssm_enable=1;LTSSM状态机的跳转如下图所示,而当状态机进入Loopback状态机后,表示PCIe工作正常。
检测LTSSM状态的方式有两种:
1、 通过Port logic Synosys Register中寄存器Debug Register 0中的最低6bit查询
2、 通过cxpl_debug_info IO直接查询。
在确认LTSSM状态机进入Loopback之后,用户需要查询数据链路层的状态,通过PCI ExpressCapability register中的 Link status Register 的Data Link Layer Active位,可以确认PCIe数据链路层正常工作,用户可以进行TLP包的发送与接收。
PCIe 驱动流程(LTSSM)的更多相关文章
- andorid之摄像头驱动流程--MTK平台
原文地址:andorid之摄像头驱动流程--MTK平台 作者:守候心田 camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过D ...
- andriod之摄像头驱动流程
camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过DSP加工出来,然后在通过IO接口传输到CPU处理. 由于摄像头满足总线. ...
- android休眠唤醒驱动流程分析【转】
转自:http://blog.csdn.net/hanmengaidudu/article/details/11777501 标准linux休眠过程: l power managemen ...
- [RK3288][Android6.0] TS-ADC驱动流程小结【转】
本文转载自:https://blog.csdn.net/kris_fei/article/details/55045936 Platform: RK3288OS: Android 6.0Kernel: ...
- [Android6.0][RK3399] 电池系统(三)电量计 CW2015 驱动流程分析【转】
本文转载自:http://blog.csdn.net/dearsq/article/details/72770295 Platform: RK3399 OS: Android 6.0 Kernel: ...
- [RK3288][Android6.0] 系统按键驱动流程分析【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/77894406 Rockchip的按键驱动位于 kernel/drivers/input/ke ...
- android MTK驱动背光唤醒流程
在标准的android驱动中,睡眠唤醒流程非常清晰,能够较方便的更改lcd唤醒时间和led背光的点亮时间,但是也很容易出现问题,比如说闪屏,唤醒慢! 出现闪屏有两个原因 1. 开背光时间在唤醒lcd前 ...
- 以太网驱动的流程浅析(一)-Ifconfig主要流程【原创】
以太网驱动的流程浅析(一)-Ifconfig主要流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<Lin ...
- 以太网驱动的流程浅析(三)-ifconfig的-19错误最底层分析【原创】
以太网驱动流程浅析(三)-ifconfig的-19错误最底层分析 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及& ...
随机推荐
- String 与 StringBuffer的差别
原文:http://blog.csdn.net/yirentianran/article/details/2871417 在Java中有3个类来负责字符的操作. 1.Character 是进行单个字符 ...
- ajax 调用webservice 跨域问题
注意两点 1. 在webservice的config中加入这段位置 (注意不是调用webservice的webconfig中加入) <system.webServer> <! ...
- Asp.net:上传文件超过了最大请求长度
错误消息:超过了最大请求长度 错误原因:asp.net默认最大上传文件大小为4M,运行超时时间为90S. 解决方案 1. 修改web.config文件可以改变这个默认值 ...
- BVLC CaffeNet可视化及类别预测
一.介绍 bvlc_reference_caffenet网络模型是由AlexNet的网络模型改写的,输入图片尺寸大小为227x227x3,输出的为该图片对应1000个分类的概率值. 介绍参考:caff ...
- sql server紧急状态下登录脚本
--打开xp_cmdshell功能 EXEC [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35) @configv ...
- springMVC接收参数的区别form data与query string parameters与request payload
在AJAX请求中,我见过有三种form表单数据类型提交. 第一种:form data, 第二种:query string parameters,第三种:request payload. 在google ...
- Vue非父子组件之间的传值
1.新建一个js文件 然后引入vue 实例化vue 最后暴露这个实例:实例化Vue对象的时候名称要小写,大写控制台报错,我也不知道什么原因: 2.在要广播的地方引入刚才定义的实例: 3通过VueEm ...
- kubernetes学习笔记之十二:资源指标API及自定义指标API
第一章.前言 以前是用heapster来收集资源指标才能看,现在heapster要废弃了从1.8以后引入了资源api指标监视 资源指标:metrics-server(核心指标) 自定义指标:prome ...
- 学习excel的使用技巧二批量复制
1 选中要操作的部分 2 CTRL+G 打开定位 3 点击 定位条件 4 选择空值 5 输入=号 然后键盘的 方向键 向上 6 按住CTRL+回车 即可实现 批量复制
- scrollview嵌套recyclerview卡顿现象
方式一xml: android:nestedScrollingEnabled="false" <android.support.v7.widget.RecyclerView ...