目录第 9 篇PCIe 是怎么“可靠传输”的一、Ack/Nak 机制为什么 PCIe 不会悄悄丢数据一、先给结论请刻在脑子里二、Ack/Nak 工作在哪一层三、核心思想快递 签收单正常流程Ack异常流程Nak四、Seq Num序列号Ack/Nak 的基础五、LCRC为什么能发现错误六、Ack 是怎么发的不是每个 TLP 都回七、Nak 是怎么发的精准打击八、Retry Buffer重传的“仓库”九、Ack/Nak 和 TCP 的区别常问十、一个非常关键的工程认知十一、为什么你“感觉不到”Ack/Nak十二、一句话总结本节约核心十三、工程师小贴士强烈建议加框十四、本篇结构第 9 篇 · 当前进度第 9 篇PCIe 是怎么“可靠传输”的一、Ack/Nak 机制为什么 PCIe 不会悄悄丢数据✅ 难度协议入门 · 可实战✅ 关键词Ack、Nak、Retry Buffer、DLP、Seq Num✅ 适合驱动工程师、FPGA、协议分析、稳定性调试一、先给结论请刻在脑子里**PCIe 的可靠性不是靠“链路绝对不出错”而是靠“出错一定能被发现并且能重传”。**这套机制就叫✅Ack/Nak确认 / 否认机制PCIe 是“尽力不丢丢了必救”二、Ack/Nak 工作在哪一层PCIe 有三层Ack/Nak只工作在数据链路层Data Link LayerTransaction Layer → TLP Data Link Layer → Ack/Nak本篇主角 Physical Layer → 比特流TLP 是“货物”Ack/Nak 是“签收单”三、核心思想快递 签收单把 PCIe 链路想象成一条快递专线TLP 包裹Seq Num 运单号Ack 签收成功Nak 拒签包裹损坏正常流程Ack发送端 ──TLP(#1)──▶ 接收端 发送端 ◀──Ack(#1)── 接收端含义“#1 号包裹收到了没问题。”异常流程Nak发送端 ──TLP(#2)──▶ 接收端 接收端 CRC 校验失败 发送端 ◀──Nak(#2)── 接收端 发送端 ──TLP(#2)──▶ 接收端 发送端 ◀──Ack(#2)── 接收端含义“#2 号包裹坏了重发一次。”Nak 强制重传四、Seq Num序列号Ack/Nak 的基础每一个 TLP在离开事务层进入数据链路层时都会被✅ 分配一个12-bit 序列号Sequence Number✅ 存入Retry Buffer重传缓冲区TLP#1 → Seq1 → Retry Buffer TLP#2 → Seq2 → Retry Buffer TLP#3 → Seq3 → Retry BufferSeq Num 用来唯一标识一个 TLP五、LCRC为什么能发现错误接收端收到 TLP 后会计算LCRCLink CRC和 TLP 携带的 LCRC 比对结果动作一致上交事务层不一致丢弃发送 NakLCRC 是“链路级校验”只管这一段路六、Ack 是怎么发的不是每个 TLP 都回PCIe不会为每个 TLP 单独回 Ack而是✅累计确认Cumulative Ack例如接收端已正确收到 TLP#1 ~ TLP#4 发送端 ◀──Ack(#4)── 接收端含义“#4 及之前的所有 TLP 我都收到了。”Ack(#N) 我已经拿到 N 号及以前的所有包裹七、Nak 是怎么发的精准打击当接收端发现某个 TLP 出错时丢弃坏 TLP发送Nak(N)N 是第一个出错 TLP 的 Seq Num例如收到 TLP#5坏 发送端 ◀──Nak(#5)── 接收端发送端动作从 Retry Buffer 取出 TLP#5重传 TLP#5 及之后所有 TLP重新等待 AckNak 会触发“从错误点开始的批量重传”八、Retry Buffer重传的“仓库”发送端必须维护一个Retry Buffer特性说明容量有限几十~几百个 TLP内容已发送但未 Ack 的 TLP释放条件收到 Ack满的后果Flow Control 停止发送Retry Buffer 是 PCIe 可靠性的“代价”九、Ack/Nak 和 TCP 的区别常问对比项PCIe Ack/NakTCP层级链路层传输层范围相邻设备端到端重传从错误点开始从错误点开始确认方式累计确认累计确认是否面向连接✅✅是否跨 Switch❌✅PCIe 的 Ack/Nak 是“逐跳的”不是“端到端的”十、一个非常关键的工程认知❗Ack/Nak 只保证“链路级可靠”不保证“事务级成功”。例如TLP 成功送达设备 ✅但设备内部地址错误 ❌Ack 仍然会返回 ✅Ack ≠ 设备操作成功十一、为什么你“感觉不到”Ack/Nak因为硬件自动完成驱动完全无感知协议分析仪才看得到但在以下情况下你会“间接感受到”现象可能原因带宽抖动频繁 Nak延迟升高重传链路不稳定LCRC 错误LTSSM 频繁训练物理层问题Ack/Nak 是 PCIe 的“隐形保镖”十二、一句话总结本节约核心**Ack/Nak 是 PCIe 数据链路层的“签收机制”Seq Num 编号LCRC 验货Ack 签收Nak 重发。**十三、工程师小贴士强烈建议加框⚠️ 调试 PCIe 链路稳定性时请记住“Ack/Nak 看不到不等于没发生。”如果你看到吞吐量上不去延迟抖动协议分析仪里有 Nak优先查信号质量眼图链路速率降速测试Retry Buffer 是否频繁满90% 的 Nak都是物理层惹的祸。十四、本篇结构第 9 篇 · 当前进度一、Ack/Nak 机制本节 二、Flow Control 一句话解释下节 三、为什么 PCIe 不会丢数据总结篇
【ROS2】cartographer源码分析08:LocalTrajectoryBuilder2D 1、LocalTrajectoryBuilder2D LocalTrajectoryBuilder2D 完成局部 SLAM 的核心功能:扫描匹配 和 子图插入; 主要完成以下功能: RangeDataCollator:把来自多个雷达的扫描数据按时间同步、对齐并合并成一份点云输出 PoseExtrapolator (+ ImuTracker) :运动预测、去畸变、给…
Linux进程管理:fork与写时拷贝机制详解 1. 从 fork 到进程终止:Linux 进程管理的核心机制剖析在 Linux 系统编程中,进程管理是最基础也最关键的技能之一。很多开发者虽然能熟练使用 fork() 创建新进程,但对底层实现机制特别是写时拷贝(Copy-On-Write)技术往往…
基于MATLAB深度学习的帕金森病语音智能诊断系统设计与实现(含数据集) 摘要:帕金森病是一种常见的神经退行性疾病,早期诊断对于延缓病情进展具有重要意义。传统的帕金森病诊断方法主要依赖于临床医生的主观判断,存在诊断成本高、早期症状不明显等问题。研究表明,语音障碍是帕金森病的早期症状之一&…
解密网易云音乐NCM格式:ncmdump工具让你的音乐随处播放 解密网易云音乐NCM格式:ncmdump工具让你的音乐随处播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经遇到过这样的情况:在网易云音乐下载了心爱的歌曲,想要在车载音响、手机播放器或者…
AI论文检测与降重技术解析:千笔AI实战指南 1. 毕业论文AI率问题的现状与挑战最近两年,随着AI写作工具的普及,高校对论文中AI生成内容的检测越来越严格。我在指导学弟学妹修改论文时发现,超过70%的学生都遇到过AI率超标的问题。最令人头疼的是,很多同学明明是自己写的论文&a…
大模型AI在金融行业的五大应用场景与技术实现 1. 大模型AI如何重塑金融行业的技术版图 作为一名在金融科技领域摸爬滚打多年的从业者,我亲眼见证了AI技术从简单的规则引擎发展到如今的大模型时代。记得2018年我们团队第一次尝试用传统机器学习做反欺诈模型时,光是特征工程就耗费了三个月,…
如何快速实现输入法词库迁移:深蓝词库转换的终极指南 如何快速实现输入法词库迁移:深蓝词库转换的终极指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为不同输入法之间的词库格式不兼容而烦恼吗&…
Bibata光标主题:5分钟让你的桌面焕然一新的终极指南 Bibata光标主题:5分钟让你的桌面焕然一新的终极指南 【免费下载链接】Bibata_Cursor Open source, compact, and material designed cursor set. 项目地址: https://gitcode.com/gh_mirrors/bi/Bibata_Cursor 厌倦了千篇一律的系统默认光标?想要为…
Git Pre-commit Hook 集成单元测试:原理、实现与生产级实践 1. 项目概述:为什么要在提交前自动运行单元测试? 在团队协作开发中,代码质量是项目长期健康度的生命线。我们常常遇到这样的场景:你信心满满地完成了一个功能模块,执行了 git commit 和 git push ,结果…
SolidWorks许可证预测优化:数据驱动降本增效 1. 项目背景与核心价值在工业设计领域,SolidWorks作为三维CAD软件的标杆产品,其许可证管理一直是企业IT成本管控的痛点。某中型制造企业曾因许可证短缺导致项目延期,而另一家则因过度采购造成每年近20万元的资源浪费——这正是我们开发这套预…
OpenClaw开源智能体网关:AI助手与即时通讯的完美融合 1. 项目概述:当AI助手遇上即时通讯上周在调试一个自动化工作流时,我突然意识到:如果能把AI助手直接集成到日常使用的聊天软件里,很多重复性工作就能在对话中一键完成。这个想法促使我找到了OpenClaw——一个开源的智能体网关项目&…
【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集 Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…
智慧飞行 大疆无人机一站式智能管控平台/支持大疆机场/私有化部署 从航线规划、自动飞行、AI识别到数据管理,一个平台全搞定 智慧飞行-大疆无人机一站式智能管控平台/支持大疆机场/私有化部署 企业级全域智能无人机一体化管控平台源码! 专为电力巡检、安防监控、应急救援、测绘勘察等行业打造,让您的无人机舰队实现 “无人化、自动化、智能化” 管理! 🎯 …
揭秘ChatGPT+Mathematica协同教学:为什么92%的初学者在72小时内建立函数直觉? 更多请点击: https://codechina.net 第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…