简介这份 SerDes 培训教材源自 Springer 出版、由 IBM 多位资深工程师合著的高速串行器件专著。它面向芯片设计、硬件接口协议与高速互连领域的工程师及研究生解决从并行 I/O 转向高速串行链路时的知识断层。内容围绕并串与串并转换、8B/10B 与 64B/66B 编解码、时钟数据恢复与锁相环、前向纠错等机制展开并延伸到差分信号、阻抗匹配、反射串扰与损耗等信号完整性问题也涉及功耗管理与多标准兼容性等工程约束涵盖以太网、光纤通道、SAS/SATA、HDMI 及数据中心互连等场景。压缩包内为 1 个 PDF 文件约 10.89MB单册完整收录便于离线阅读与按章查阅已有 918 人学习。读者可建立从器件原理到系统设计的完整认知理解高速链路中均衡、抖动与误码的关联并借鉴书中的案例分析思路为接口选型、链路调试与设计评审提供参考。1. 从并口到10Gbps串行一张SerDes设计知识地图SerDes设计这块国内能系统讲透的资料不多多数人是抱着芯片数据表一点点拼出全貌的这份来自某芯片厂商内部培训体系的教材走的是另一条路——先给地图再逐层往下填。它把硬件接口协议里这条高速串行链路拆成四段器件特性与功能并行总线、源同步接口、串并转换、均衡、CDR、PLL、协议逻辑与标准编码扰码、位对齐、去偏斜、各类电气层规范、四个专题参考时钟、测试诊断、信号完整性、功耗最后落到芯片集成仿真模型、测试综合、静态时序、布局封装。适合已经能看懂数字时序、正准备把HSS核放进自己芯片里的人也适合复习阶段想查漏的人因为它的章节顺序本身就是一条从是什么到怎么用的推演链。2. HSS核解剖发送、接收、PLL三个切片的职责边界一章讲完HSS的是什么落到具体器件上就是三个切片发送机、接收机、PLL。这三个切片各自的寄存器、时钟域、诊断通路是分开的但复位和配置序列又必须串起来看所以复习时最好把它们当成一台机器的三个工位而不是三份独立的功能列表。2.1 发送机切片并行数据怎么变成差分串行流发送侧的入口是并行数据接口宽度可配内部逻辑时钟和串行输出时钟之间是倍率关系。教材里反复强调的一个设计点是速率模式全速率、半速率、四分之一速率、八分之一速率。这不是省电开关那么简单它直接决定内部并行总线要多宽、时钟树要跑多快、时序收敛的难点落在哪一级。半速率模式下串行器用上下沿各取一次数据内部时钟频率减半功耗和时序压力都跟着降代价是占空比失真变得敏感——这条在时钟章节会再翻出来算账。真正决定信号能不能过信道的是FFE前馈均衡。信道对高频的衰减远大于低频方波传过去边沿被抹平、眼图闭合所以发送端要人为把低频压低、高频抬起来这就是预加重与去加重。FFE抽头系数可编程抽头数目和步进决定了能补偿多长的信道。调抽头的血泪经验是抽头不是越大越好过补偿会把近端眼图抬得很好看、远端反而更差必须结合信道损耗曲线一起看。发送切片上还有几组容易被当成附加项、实际却天天用到的功能PRBS图案发生器和环回路径用于诊断带外信令OBS用低摆幅、低带宽的方式在链路空闲时传管理信息JTAG 1149.1与bypass模式决定这颗核在边界扫描链里是参与者还是透明通道面向PCIe的一组特性则把电气空闲、电源状态这些协议要求直接做进了硬件。速率模式内部并行时钟串行器采样方式主要代价全速率最高单沿时序余量最紧、功耗最高半速率减半双沿占空比失真敏感四分之一速率再减半多相时钟相位误差累积八分之一速率最低多相时钟低功耗场景专用抖动预算更紧提示速率模式一改PLL分频比、并行接口宽度、时序约束三处必须同步改只改一处是最常见的翻车起点。2.2 接收机切片均衡、CDR与模式选择接收侧要解决的是眼图已经闭合了怎么把数据抠出来。教材把接收均衡分成两条路线DFE判决反馈均衡和非DFE线性均衡。DFE用已判决的历史比特去抵消当前符号的ISI好处是不放大噪声坏处是错误会传播——一个比特判错后续几个比特跟着受影响。线性均衡结构简单、无错误传播但会把噪声和信号一起抬起来。选哪条路线取决于信道损耗主要是ISI还是噪声主导这个判断在复习时最好和信号完整性章节的概率密度函数对着看两边是一套语言。CDR时钟数据恢复是接收侧的心脏。它从数据跳变里提取相位信息用相位旋转器做相位插值把采样点锁在眼图正中间。这里的关键参数是环路带宽带宽窄抗抖动能力强但跟踪速度快不了遇到扩频时钟SSC就会跟丢带宽宽跟踪快但会把高频抖动放进来。支持SSC的链路必须专门核算这一点。终端与耦合方式AC耦合还是DC耦合决定了共模电平怎么建立信号检测电路负责在链路没起来时给出一个确定的状态而不是让后级去猜。眼图质量监测把内部采样点的统计结果暴露出来是调试阶段最值钱的黑匣子。JTAG 1149.6则专门管AC耦合链路的边界扫描和1149.1不是一回事这一点很容易混。2.3 PLL切片与复位、重配置序列PLL切片负责把参考时钟倍频到串行速率内部包含参考时钟输入、分频器、VCO粗校准、锁检测、上电复位和复位序列器。VCO粗校准常被忽略它在一个较宽的频段里先把VCO推到目标频点附近再让环路细调没有这一步锁定时间会变长甚至锁不上。重配置序列是三个切片里最容易踩坑的地方。改发送速率、改接收均衡模式、切换PCIe电源状态都不是写一个寄存器就完事而要按关数据通路—改配置—触发复位序列—等锁定—重新使能的顺序走。下面这段伪代码把顺序固化下来逻辑比具体寄存器名更重要# 改发送速率的安全顺序寄存器名为示意需按实际器件映射 def retune_tx(dev, new_rate_code): dev.write(REG_TX_ENABLE, 0) # 1. 先关数据通路避免半配置状态下打出非法码流 dev.write(REG_TX_RATE, new_rate_code) # 2. 改速率编码同时影响PLL分频比 dev.write(REG_PLL_RESET, 1) # 3. 触发PLL复位序列器 dev.write(REG_PLL_RESET, 0) if not wait_lock(dev, timeout_ms10): # 4. 等lock位超时说明VCO校准或参考时钟有问题 raise RuntimeError(PLL lock timeout) dev.write(REG_TX_ENABLE, 1) # 5. 锁定后再放数据new_rate_code是器件定义的速率编码不是直接的Gbps数值timeout_ms按参考时钟频率和环路带宽估一般给到锁定时间的数倍。第4步的等待不能省lock位没起来就使能发送输出的是无意义码流对端会直接报链路失步。接收侧的重配置同理只是要多等一步CDR重新锁定。3. 协议逻辑与标准族谱硬件接口协议里谁在干什么HSS核只负责把比特搬过去比特怎么组织、怎么找到边界、多根链路之间怎么对齐是协议逻辑的活。这部分在教材里占了很大篇幅也是复习时最容易只记名词不记因果的地方。3.1 编码、扰码与错误检测协议逻辑的四件套串行链路上跑的数据必须解决三个问题直流平衡否则AC耦合电容两端电平漂移、足够的跳变密度否则CDR没东西可跟、以及接收端能识别边界。8B/10B用10位表示8位开销25%靠控制字符和comma序列做对齐K码还能承载链路管理语义。64B/66B只加2位同步头开销约3%配合扰码打散长连0和长连1边界靠同步头加锁定状态机识别。两者的差别不只是开销编码方式开销对齐手段典型代价8B/10B25%comma序列逐符号可判带宽浪费大逻辑简单64B/66B约3%同步头加块锁定状态机需要扰码失锁恢复更慢扰码不是编码它不增加比特只是用多项式把数据随机化长连0长连1被打散频谱也被摊平。错误检测与纠正在这条链路上分层出现链路层用CRC查错物理层可以加FEC前向纠错直接纠正一定数量的比特错误。FEC的代价是延迟和额外带宽它和链路的误码率目标是一笔要算清楚的账不能默认打开就完事。有效带宽的估算值得单独练一遍考试和面试都爱问def payload_rate(lane_gbps, coding, lanes1): # 编码开销8b10b 每10位传8位64b66b 每66位传64位 overhead {8b10b: 0.20, 64b66b: 2/66, raw: 0.0}[coding] return lane_gbps * lanes * (1 - overhead) print(payload_rate(10, 8b10b, 4)) # 4条10G链路8B/10B编码后的净荷速率参数lane_gbps是单条链路的线路速率lanes是并行链路数coding决定开销比例。算出来的净荷速率是协议层能用的上限还没扣掉帧头、空闲码和FEC实际可用值要再降一档。3.2 位对齐、去偏斜与多链路绑定单条链路的位对齐靠comma或同步头找到符号边界再按通道对齐字符把接收数据落到统一的逻辑帧上。多链路场景难得多几条物理链路长度不同到达时间差就是skew接收端必须在去偏斜缓冲里把各条链路拉齐再按条带或交织规则还原成原始字节流。这里有两个顺序不能反。第一先完成每条链路各自的位对齐再做跨链路去偏斜顺序反了缓冲里装的是没对齐的数据越拉越乱。第二去偏斜缓冲的深度要覆盖最坏skew加时钟容差深度不够会周期性丢数据深度太大又增加延迟。字节序和位序的约定同样容易出错尤其是跨厂商对接时大小端和lane编号方向不一致现象是数据看着像但整体错位。3.3 标准族谱五类接口标准各自解决什么问题教材用一整章横向铺开各类标准复习时按解决什么问题来记比按协议名记更牢标准族关键子层与概念典型场景SONET/SDHSTS-1与STS-N帧、层级时钟、系统参考模型长距离同步传输时钟精度要求最严行业实施协议SFI-5.2、SPI-S、CEI-P、电气层协议芯片与光模块、芯片与芯片之间的通用电气约定以太网PHY参考模型、MAC、XGXS、XFI、背板以太网、PMD子层局域网与背板互连速率代际最多光纤通道SAN、协议层、帧与信令、物理接口、10G接口存储区域网强调有序与流控PCI Express架构、物理层逻辑、电气物理层、电源状态板内互连电源状态管理最细同一颗HSS核可以服务多种标准差别在协议逻辑和电气参数配置这也是为什么教材把器件和标准分成两部分讲。SONET/SDH那套层级时钟的概念最抽象但它是理解抖动传递的入口PCIe的电源状态则把前面讲的复位序列串了起来。4. 抖动与信号完整性眼图背后的概率账本信号完整性这章在教材里分量很重因为它把前面所有模拟因素收拢到一个可量化的指标上。很多人学到这里会卡住原因是把它当成了看眼图的经验活其实它是一套概率语言。4.1 抖动分解总抖动为什么是DJ加若干倍RJ抖动按来源分成两类。确定性抖动DJ有界、可重复包括占空比失真、数据相关抖动ISI、周期性抖动电源噪声耦合进来的那种。随机抖动RJ服从高斯分布理论上无界所以只能用均方根值描述再按目标误码率折算成峰峰值。总抖动TJ的计算是整个链路预算的核心TJ DJ(峰峰) 2Q×RJ(均方根)其中Q由目标误码率决定1e-12对应Q约7.03也就是常说的14倍西格玛。from math import sqrt from scipy.special import erfinv def total_jitter_ui(rj_sigma_ui, dj_pp_ui, ber1e-12): # 双侧误码率对应的Q值1e-12时约为7.03 q sqrt(2) * erfinv(1 - 2 * ber) return dj_pp_ui 2 * q * rj_sigma_ui # 2Q ≈ 14.06 print(total_jitter_ui(0.01, 0.15)) # RJ0.01UI, DJ0.15UI 时的总抖动参数都用UI为单位rj_sigma_ui是随机抖动的均方根dj_pp_ui是确定性抖动的峰峰值。算出来的TJ必须小于1UI剩下的才是眼图张开度。这里最容易忽略的是RJ的换算倍数目标误码率从1e-12放宽到1e-15倍数从14涨到约16看着只差2在余量紧张时就是过与不过的区别。抖动预算和抖动容限是同一枚硬币的两面。预算从发送端出发把时钟抖动、信道引入的ISI、接收端自身噪声逐项列出来求和容限则是标准规定的接收端必须容忍多少抖动。两者对接时如果只对总抖动很容易出现各项都合格、合起来超了的情况因为DJ的各个分量不是简单线性叠加。4.2 概率密度函数高斯与双狄拉克教材专门讲概率密度函数不是数学炫技。随机抖动是高斯分布确定性抖动在理想情况下可以近似成两个冲激也就是双狄拉克分布。把两者卷积得到的就是总抖动的概率密度眼图上那条浴盆曲线的底部宽度就是这么来的。理解这一点之后看眼图就不会只盯着张不张开而会去看直方图的形状高斯尾巴有多长、双狄拉克的两个峰离得多远。眼图质量监测功能输出的统计结果本质就是这些分布的采样估计。4.3 信道、封装模型与Spice仿真矩阵信道部分要关注三件事损耗随频率的变化、反射阻抗不连续、串扰相邻链路耦合。封装模型不能省因为从芯片焊盘到封装引脚这一小段在10Gbps下已经是传输线模型精度直接决定仿真结果可不可信。Spice模型有传统模型和混合行为级模型两条路。传统模型精度高但仿真慢跑一个长码型可能要几小时混合模型把线性无源部分和行为级部分分开速度快得多适合在PVT角上做扫描。仿真矩阵就是把工艺角、电压、温度、码型长度、信道长度组合起来的一张表缺项就意味着某个角落没验证过。教材还提到统计方法不做逐比特的瞬态仿真而是把信道的脉冲响应和抖动分布做卷积直接算出误码率轮廓。这套方法配合CDR模型使用是长信道评估的常规手段。它的前提假设是线性时不变遇到强非线性比如驱动器限幅就要回到瞬态仿真核对。5. 易漏点与易错点五个最容易在项目里翻车的地方复习阶段最怕的不是不会而是以为会了。下面这五条都是从看起来是常识、实际经常错的位置挑出来的每条按易漏点—为什么漏—怎么补走一遍。第一把HSS核当成复杂数字IO单元。为什么漏数字设计出身的人习惯用建立保持时间看一切HSS的接口在寄存器层面确实像普通同步接口于是很自然地把它归到数字范畴。怎么补但凡速率上了几个Gbps模拟因素就必须进预算——终端匹配、共模电平、AC耦合电容、封装寄生。补的办法是把信号完整性章节的抖动预算当成必做项而不是出问题才回头看。第二重配置不按复位序列走。为什么漏单次配置时顺序对错看不出差别只有在运行中动态改速率、切均衡模式、进PCIe低功耗状态时才暴露而这类场景在实验室里往往被测序简化掉了。怎么补把第2章那段伪代码固化成驱动层的一个函数任何配置变更都走同一条路径并且强制检查lock位和信号检测状态超时就报错而不是重试到天荒地老。第三参考时钟质量被默认合格。为什么漏参考时钟通常由外部时钟芯片提供数据表上写着相位抖动指标看起来达标就过了。怎么补参考时钟要单独核算三件事——抖动尤其经过PLL之后的抖动传递、占空比失真、压摆率与信号电平。单端时钟和差分时钟的接法不同测试要求也不同差分时钟还要做共模和幅度分析。时钟树布线一旦定下来就很难改这是典型的后悔药场景。第四多链路场景漏做去偏斜或者顺序反了。为什么漏单链路调试通了扩到四链路时如果每条链路各自能收到正确码型就以为成了其实跨链路的字节流还是错位的。怎么补明确先位对齐、后去偏斜的顺序在去偏斜缓冲前后各加一个可观测的计数器测量实际skew与缓冲深度的关系把缓冲深度按最坏skew加时钟容差留足余量。第五功耗只算数字动态功耗。为什么漏数字功耗有成熟公式HSS的功耗却分成多个电源域还随速率模式、均衡开关、环回使能变化容易被当成一个固定常数。怎么补按数字逻辑AC/DC 非数字电路 HSS功耗方程三层分别估再把模式相关的部分列成一张表把每种工作模式下的电流加总。芯片级供电设计如果只按典型模式算峰值模式就会掉压。6. 复习清单按模块自检把知识点串成一条链路到这一章不适合再往下堆新内容把前面的东西收成一张自检表更实用。方法是按信号从发送端走到接收端的顺序排每一站问自己三个问题这一站的功能是什么、关键参数有哪些、失败时先看哪个观测点。环节必须能答出的问题自检方式参考时钟单端还是差分抖动与占空比指标是多少能否说出抖动如何传到输出PLL分频比、VCO校准、锁定判据能否画出上电到锁定的时序发送机FFE抽头、速率模式、输出摆幅能否解释过补偿的后果信道与封装损耗、反射、串扰的主要来源能否列出仿真矩阵的维度接收机均衡模式、CDR环路带宽、终端方式能否说清DFE的错误传播协议逻辑编码方式、对齐手段、去偏斜顺序能否手算净荷速率测试诊断PRBS图案、环回路径、边界扫描类型能否区分1149.1与1149.6集成复位序列、时序约束、封装选型能否写出重配置顺序复习时我习惯再加一道量化的自检把链路余量算一遍比背概念更能暴露理解漏洞def link_margin(tx_swing_mv, channel_loss_db, rx_sensitivity_mv, jitter_margin_ui): # 简化模型只核对电压余量与抖动余量两项是否同时为正 rx_level tx_swing_mv * (10 ** (-channel_loss_db / 20)) voltage_margin rx_level - rx_sensitivity_mv return {rx_mv: round(rx_level, 1), voltage_margin_mv: round(voltage_margin, 1), jitter_margin_ui: jitter_margin_ui, pass: voltage_margin 0 and jitter_margin_ui 0} print(link_margin(800, 20, 100, 0.12))channel_loss_db是目标奈奎斯特频率处的信道损耗rx_sensitivity_mv是接收端能识别的最小摆幅jitter_margin_ui是1UI减去总抖动后的剩余。两项余量必须同时为正只满足一项的链路在温变或批次波动下就会失效。从那以后我每次打开一份新的HSS手册都强制走一遍这个顺序先确认参考时钟和PLL能不能锁再确认发送端抽头设了多少、速率模式是哪一档然后才去看协议层配置。跳过前面直接调协议参数翻车的概率高得离谱因为底下那层根本没稳住。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
企业级风控系统架构设计与实时决策优化实践 1. 项目概述:企微风控系统的核心定位企微风控系统是面向企业级业务场景设计的实时风险控制解决方案,其核心价值在于通过"规则引擎行为模式识别动态评估"的三重机制,实现毫秒级风险决策响应。在互联网金融、电商交易、用户认证等高频… · 2026/11/2 20:38:51
机器人仿真三类障碍物生成方法与参数调优实践 1. 障碍物为什么要分三类来做在仿真环境里搭场景,很多人第一步就卡在"往世界里扔障碍物"这件事上。扔几个箱子谁都会,但真正跑算法的时候你会发现,障碍物的行为模式直接决定了你的仿真结果有没有参考价值。我在做移动机器人路径规划… · 2026/11/2 20:38:51
Paperclip:面向AI Agent的React+Node.js轻量协同框架 1. “Paperclip”不是回形针:它是一套面向AI Agent开发的轻量级ReactNode.js协同框架你搜“paperclip”,第一反应可能是办公桌抽屉里那个银色小金属片——但最近半年,在GitHub趋势榜和前端技术社区里,“Paperclip”正悄悄取代“Ne… · 2026/11/2 20:38:51
MCP与A2A并非对立:2026年Agent架构下协议分工与工程选型指南 2026年,做 Agent 相关项目的人几乎绕不开两个缩写:MCP 和 A2A。MCP 这边生态铺天盖地,各家 IDE、浏览器、数据库、甚至安全测试工具都在往上面靠;A2A 那边则有 Google 和 Linux Foundation 背书,主打 Agent 之间的直接… · 2026/11/3 13:24:07
激光SLAM与视觉SLAM技术对比与应用解析 1. 定位技术革命中的双子星2004年DARPA自动驾驶挑战赛上,一辆名为Stanley的改装越野车完成了132英里沙漠穿越,成为首台完成赛程的无人车。当人们打开它的后备箱时,会发现两个关键传感器:旋转式激光雷达和立体视觉相机。这两个设备… · 2026/11/3 13:24:07
从后见之明到先见之明:高效复盘的底层逻辑 前段时间带一个复盘会,项目上线后出了一次不小的故障。大家围坐在一起,每个人都在说自己早就察觉到了风险,有人甚至翻出了聊天记录证明当初提醒过。一个同事半开玩笑地说:“我们现在个个都是 hindsight 大师。”这句话让我愣了很久… · 2026/11/3 13:24:07
类型安全容器的设计与实现:从泛型到高级约束 1. 类型安全容器的核心价值 在软件开发中,我们经常需要处理各种数据集合。传统容器(如Java的ArrayList或C的vector)虽然灵活,但缺乏对元素类型的严格约束,这可能导致运行时出现ClassCastException等类型错误。类型安全… · 2026/11/3 13:24:07
MinGW-w64 配置后 gcc 仍找不到?环境变量 Path 排查指南 有人装完 MinGW-w64,把C:\msys64\mingw64\bin也好、C:\mingw64\bin也好,郑重其事地塞进了环境变量 Path,反复点确定,重启电脑,结果在命令行敲gcc -v,屏幕上还是那句熟悉的“gcc 不是内部或外部命令… · 2026/11/3 13:24:07
Rails附件上传库Paperclip:设计思路、接入步骤与踩坑指南 第一次在一个Rails老项目里看到paperclip这个词时,我愣了一下——这名字直译过来就是“回形针”。回形针是个小物件,但它能把一堆散乱的纸紧紧夹在一起;Thoughtbot当年给这个附件处理库取名paperclip,意思也差不多:把文… · 2026/11/3 13:23:06
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46