PCIe 驱动流程(LTSSM)
本次的工作是完成刚流片的FPGA中PCIe IP核的bring up,也就是芯片的中PCIe的第一个使用者,将PCIe IP核正常使用起来,并配合公司的EDA团队,完成PCIe IP核到用户的呈现。
经过两个月的调试和文档阅读,对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总线中拓扑结构如下图所示:
PCIe的IP Core在上电后首要的任务就是通过外部的IO或者寄存器,识别自身在PCIe的系统中扮演的角色,不同的角色也决定其在后续的过程中不同的启动和配置流程。
作为用户,在例化这个IP核时,需要做的第一个事情就是通过接口配置PCIe的device_type。
1.2 关注时钟与复位
在使用PCIe的IP时,再需要关注的是该内核的时钟和复位过程。可能作为用户,该过程硬件已经帮你做完了,但是也最最好熟悉一下结构和流程,并确保core的内部时钟已经启动,复位已经成功。
在实际的应用过程中,测试的第一步就是将PCIe core的时钟拉到芯片外部进行测试。
1.3 Disable PCIe的LTSSM的状态机
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 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
1.5 启动LTSSM
app_ltssm_enable=1;LTSSM状态机的跳转如下图所示,而当状态机进入Loopback状态机后,表示PCIe工作正常。
1.6 检测LTSSM状态机
1、 通过Port logic Synosys Register中寄存器Debug Register 0中的最低6bit查询
PCIe 驱动流程(LTSSM)相关推荐
- linux设备驱动之PCIE驱动开发
PCIE(PCI Express)是INTEL提出的新一代的总线接口,目前普及的PCIE 3.0的传输速率为8GT/s,下一代PCIE 4.0将翻番为16GT/S,因为传输速率快广泛应用于数据中心.云 ...
- android移植wifi驱动流程porting
android载入wifi驱动流程 wifi_load_driver check_wifi_chip_type_string get_wifi_device_id save_wifi_chip_typ ...
- hi3536 pcie驱动学习笔记
Hi3536 PCIE学习笔记2(linux3.10.y) 一.PCI总线简单介绍 1.PCI总线配置 两类配置请求:Type00h配置请求,Type 01配置请求.Type 00h配置请求:访问与H ...
- 图像-摄像头驱动流程
驱动架构 在Kernel层用camera的驱动将其驱动起来以后,将硬件驱动接口交给Hal: 上层的camera应用程序在andriod实时系统的虚拟机中,加载留给camera公用的库文 件,调用Hal ...
- linux中流设备_[快速上手Linux设备驱动]之块设备驱动流程详解一
[快速上手Linux设备驱动]之块设备驱动流程详解一 walfred已经在[快速上手Linux设备驱动]之我看字符设备驱动一 文中详细讲解了linux下字符设备驱动,并紧接着用四篇文章描述了Linux ...
- linux PCIE驱动开发
2019独角兽企业重金招聘Python工程师标准>>> linux下PCI驱动源码实例1,该源码缺少pci_fops的初始化 #include <linux/fs.h> ...
- MTK 按键驱动流程总结
前言 简单介绍了 Input 按键驱动流程 流程 位置:Kpd.c (kernel-3.18\drivers\input\keyboard\mediatek) module_init(kpd_mod_ ...
- USB 3G网卡驱动流程
USB 3G网卡驱动流程 简介 首先介绍一下linux下的整体驱动模式: 本文基于的linux kernel版本为2.6.36 (并且华为EM770W驱动,是由FriendlyARM公司定制的. 所以 ...
- MSM8974 TP驱动流程
刚学习安卓驱动的时候,我师父就说流程最重要,现在来分析一下TP驱动流程: 1.当手指触摸屏幕的时候会在硬件上产生一个中断,然后调用在probe函数中配置好的中断处理函数synaptics_rmi4_i ...
最新文章
- activemq broker集群_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ
- 在html页面中引入公共的头部和底部
- ASP.NET MVC 重点教程一周年版 第七回 UrlHelper 【转】
- 虎贲计算机二级视频解析百度云,详解虎贲T7520:5G为什么需要全场景覆盖增强技术?...
- 数据结构与算法 | 来来来,让我们重新认识一下什么是树
- postgreSQL源码分析——索引的建立与使用——Hash索引(2)
- 操作系统原理常见面试题总结
- Zotero 安装 插入引用
- GNS3 思科交换机配置三层转发
- 瑞友天翼应用虚拟化系统V6.0之设备重定向
- 光栅透过率计算 (Matlab)
- [转] 花6小时整理的网上最全的系统服务,想PF降到50以下的进,经典中的经典
- Delphi 热键 使用WIN作为热键的组合键 给程序增加快捷键
- 从Watson看AI平台的架构设计
- 大家能不能在百忙之中 想想鸟姐的话
- JS生成随机颜色(rgb)
- 拼题A 7-7 计算存款利息
- 创建pv卷报错excluded by a filter的解决办法
- java空指针异常【解决思路-方法】
- python反爬虫应对之借助平台超级鹰突破网页验证码识别
热门文章
- 抽奖大转盘-React-移动端
- 垂直行业网站destoon系统如何开启伪静态urlrewrite
- mq多个消费者消费一个消息_限塑“动真格”,他们免费给消费者发了5000多个无纺布购物袋...
- C++中线程同步的四种方法(Win32平台)
- 【python量化】如何分析两段时间序列之间的相关性
- CDC之erdemcer
- Chrome:拖入crx文件时,显示“无法从该网站添加应用、扩展程序和用户脚本”问题
- 计算线段长度和中点c语言,计算线段长度的方法技巧
- 解决linux虚拟机联网问题:destination host unreachable
- 376.1国网规约简析