数据链路层(DLL,Data Link Layer)的主要作用是进行链路管理(Link Management)、TLP错误校验、Flow Control(流控制)和Link功耗管理。不仅可以接收发送来自事务层的TLP,还可以直接向另一个相邻的数据链路层直接发送DLLP,比如Flow Control和Ack/Nak的DLLP。

数据链路层还可以进行数据备份,即Ack/Nack机制,发送方会在对发送方会对每一个TLP在Replay Buffer中做备份,直到其接收到来自接收方的Ack DLLP,确认该DLP已经成功的被接受,才会删除这个备份。如果接收方发现TLP存在错误,则会向发送发发送Nak DLLP,然后发送方会从Replay Buffer中取出数据,重新发送该TLP。

PCIe物理层

在PCIe spec(标准)中,物理层被分为两个部分单独介绍,分别为物理层逻辑子层和电气子层,无论是事务层还是数据链路层的Packet都会被临时放入物理层的buffer中,并加上起始、结束字符(Start&End),起始字符有时也被称为帧字符(这里所说的TLP和DLLP指的是包的原始发送者发的包,即TLP表示这个包的原始发送者为事务层,而DLLP则为数据链路层。但是TLP仍然会被数据链路层转发,并添加Sequence和LCRC)。

物理层完成的一个重要的功能就是8b/10b编码和解码(Gen1 & Gen2),Gen3及之后的PCIe则采用了128b/130b的编码和解码机制。

物理层的电气子层主要实现了差分收发对

PCIe物理层处理可以转发TLP和DLLP之外,还可以直接发送命令集(Ordered Sets)。之所以称其为命令集,是因为它并不是真正意义上的包(Packet),因为物理层不会为其添加起始字符(Start & End Characters)。并且命令集始于发送端的物理层,结束语接收端的物理层。虽然命令集没有起始字符,但是对于Gen1&Gen2版本的PCIe物理层来说,会为其添加一个叫做COM的字符作为开始字符,随后跟着三个或者更多的信息字符。

最新文章

  1. 时间同步ntp服务的安装与配置
  2. Java调用ASP.NET的webservice故障排除
  3. ThreadContext
  4. php file_put_contents() 写入回车
  5. lightoj 1004
  6. Remoting 的“传递的引用”理解
  7. 常见缓存算法和LRU的c++实现
  8. JavaScript数据结构和算法----栈
  9. 智能循迹避障小车&抢答器
  10. 瑞芯微RKnanC芯片处理器介绍
  11. Raneto中文搜索支持
  12. RESTful API实战笔记(接口设计及Java后端实现)
  13. .net 常见异常及其翻译
  14. Linux sort命令使用方法
  15. java 对mongodb的操作
  16. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题
  17. 【Py大法系列--01】20多行代码生成你的微信聊天机器人
  18. Linux查看日志三种命令
  19. php 简单计算权重的方法(适合抽奖类的应用)
  20. duilib : 滑动显示的窗口实现以及 悬浮窗 (转载)

热门文章

  1. linux下为已经编译好的php环境添加mysql扩展(php安装完成后如何添加mysql扩展)
  2. sh_06_break
  3. HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)
  4. vue.js 深度监测
  5. NOIP2002-字串变换【双向BFS】
  6. 微信小程序 API 网络(ajax)
  7. Spring boot 自定义一个starter pom
  8. C# 截获某个域中未捕获的异常 CLR20R3 程序终止的几种解决方案
  9. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_5 Mybatis的CRUD-查询返回一行一列和占位符分析
  10. 阶段3 1.Mybatis_03.自定义Mybatis框架_5.自定义Mybatis的编码-创建两个默认实现类并分析类之间的关系