TYPE-C CC引脚功能全解析:正反插识别、PD供电协商与Alt Mode调试指南
简介这份PDF资料围绕TYPE-C接口中的CCConfiguration Channel功能展开面向硬件工程师、嵌入式开发者及对USB Type-C协议感兴趣的进阶学习者帮助厘清正反插识别、接口配置、PD供电协商与Alternate Mode切换等核心机制。资源包共1个PDF文件大小约878KB内容以图文结合方式讲解CC1/CC2引脚的上拉与下拉电阻逻辑、MUX数据路径切换、VL160典型电路、Emarker线缆与VCONN供电、PD2.0/3.0/3.1功率档位及PPS微调以及DisplayPort Alt Mode的两种通道模式与激活流程。目前已有6685人学习下载适合作为接口协议入门与电路设计排错时的速查参考也可配合扩展坞、显示器连接等实际场景理解CC在设备互操作中的关键作用。1. 拆解 TYPE-C CC 功能从正反插到 240W 供电一份硬件工程师的落地笔记很多人调 TYPE-C 接口时第一反应是抓 USB 协议分析仪看数据包结果发现设备连 VBUS 都没出压根没进入枚举阶段。问题往往出在最底层——CCConfiguration Channel引脚的状态没配对。这份资料把 CC1/CC2 的五大功能拆得很细插入检测与正反插识别、DFP/UFP 接口配置、PD 协议供电协商、Vconn 与 Emarker 线缆管理、Alternate Mode 激活。它适合做扩展坞、显示器、移动电源、多口充电器的硬件工程师也适合固件里要写 PD 策略的嵌入式开发者。如果你正被“插上没反应”“正反插有一面不识别”“PD 协商跳不到 20V”这类问题卡住这份笔记能帮你把 CC 这条链路从头理到尾。2. CC 引脚电气特性Rp/Rd 阻值怎么选正反插识别怎么落地2.1 DFP 与 UFP 的阻值逻辑TYPE-C 接口里 CC1 和 CC2 是两根独立的配置通道线。DFP主机端在 CC1 和 CC2 上各挂一个上拉电阻 Rp 到 VBUS 或 3.3VUFP设备端在 CC1 和 CC2 上各挂一个下拉电阻 Rd 到地。未连接时DFP 端 CC 引脚被 Rp 拉到高电平VBUS 上的 MOSFET 保持关断。插入后线缆把 DFP 的某一根 CC 和 UFP 的某一根 CC 接通Rd 把该引脚拉低DFP 检测到电平跌落判定设备接入打开 VBUS 供电。这里有个容易翻车的点Rd 的典型值是 5.1K不是随便找个 10K 就能用。5.1K 对应的是标准 UFP 宣告如果阻值偏大DFP 端检测到的电压可能落在“未识别”区间导致 VBUS 不输出。Ra 的典型值是 0.8K 到 1.2K用于标识线缆里的 Emarker 芯片或 Vconn 供电请求。2.2 正反插识别的硬件路径正反插识别不是靠机械结构而是靠 CC1 和 CC2 谁被拉低来判断。线缆不扭转时DFP 的 CC1 连到 UFP 的 CC1线缆扭转时DFP 的 CC1 连到 UFP 的 CC2。DFP 端的 CC 逻辑控制器检测到哪根引脚有下拉就知道插头方向然后控制 MUX 切换 TX/RX 差分对。以 VL160 这类支持 USB3.1 的 MUX 为例它的 CC 检测引脚直接连到 TYPE-C 座子的 CC1/CC2内部比较器判断哪边有效再通过 I2C 或 GPIO 告诉主控。实际布线时CC1 和 CC2 到 MUX 的走线要等长且远离高速差分对否则 CC 上的噪声可能导致误判方向。# 用万用表静态测 CC 对地阻值快速判断板子有没有焊错 # 红表笔接地黑表笔点 CC1 和 CC2 测试点 # DFP 端主机板CC1/CC2 对地应有约 56K 到 100K 的阻值Rp 分压后 # UFP 端设备板CC1/CC2 对地应接近 5.1K # 如果测到 0 欧或开路先查电阻有没有贴反、虚焊上面这段不是代码是产线调试时最省事的排查手段。很多“正反插有一面不识别”的板子拆开一看就是 CC2 的 5.1K 电阻贴到了 CC1 位置或者 MUX 的 CC 检测脚虚焊。静态阻值测一遍比直接上电抓波形快得多。2.3 接口类型配置DFP、UFP 与 DRPDFP 只做主机CC 上只有 RpUFP 只做设备CC 上只有 RdDRP双角色端口则要在 Rp 和 Rd 之间动态切换常见于手机、笔记本这类既能当主机又能当设备的接口。DRP 的切换逻辑是初始状态挂 Rd 当设备检测到对方是 DFP 后再按需切换成 DFP 角色。这个切换过程由 CC 逻辑控制器自动完成但固件里要配置好切换超时和重试次数否则会出现“手机连电脑电脑认不到手机”的玄学问题。提示DRP 端在切换角色时VBUS 和 CC 的状态要严格按状态机走不能同时使能 Rp 和 Rd否则会触发对方的过流保护。3. PD 协议协商从 5V 到 48VRp 档位与 PPS 参数怎么配3.1 非 PD 设备的电流档位不支持 PD 协议的设备DFP 靠 Rp 的阻值来宣告电流能力。标准里分三档默认档对应 USB2.0 的 500mA 或 USB3.0 的 900mA1.5A 档对应 5V1.5A3A 档对应 5V3A。Rp 的阻值不是随便选的DFP 端通过测量 CC 上的电压来反推档位。如果 Rp 选错UFP 可能按 500mA 取电结果带不动负载表现为“插上充电但电量不涨”。电流档位Rp 阻值典型CC 电压DFP 端检测适用场景默认档56K约 0.4VUSB2.0/3.0 标准下行口1.5A 档22K约 0.8V中等功率充电器3A 档10K约 1.2V大功率充电器、扩展坞这张表是调试时最常查的。注意 CC 电压是 DFP 端在连接后测到的值不是空载值。如果测出来偏离太多先查 Rp 的精度再查 CC 走线上有没有漏电。3.2 PD 协议版本与功率上限支持 PD 协议的设备CC 上会跑 BMC 编码的 PD 报文。PD2.0 和 PD3.0 最大支持 20V5A合计 100W。PD3.0 增加了 PPSProgrammable Power Supply电压最小步进 20mV电流最小步进 50mA适合给电池做精细充电。PD3.1 把电压上限拉到 48V功率到 240W向下兼容 PD2.0 和 PD3.0。实际写固件时PD 策略要处理几个关键点Source Capabilities 报文的 PDO 列表要按优先级排列Request 报文里的电压和电流要落在对方宣告的范围内PPS 模式下要周期性发 Refresh 报文否则对方会超时退回默认档。常见翻车是 PPS 电压设了 9V但对方只支持 5V 和 12V 固定档协商直接失败VBUS 掉回 5V。# PD 协商状态机里判断 PDO 是否匹配的简化逻辑 # 假设 source_pdos 是从对方 Source Capabilities 解析出的列表 # 每个元素是 (voltage_mv, max_current_ma, is_pps) def select_pdo(source_pdos, target_mv, target_ma): # 先找固定档里电压最接近且不低于目标的 fixed [(v, i) for v, i, pps in source_pdos if not pps and v target_mv] if fixed: best min(fixed, keylambda x: x[0]) return best[0], min(best[1], target_ma) # 固定档不满足再找 PPS 档 pps [(v, i) for v, i, pps in source_pdos if pps] if pps: # PPS 档通常只宣告最大电压和最大电流电压可调 max_v max(v for v, _ in pps) max_i max(i for _, i in pps) if max_v target_mv: return target_mv, min(max_i, target_ma) # 都不满足退回 5V 默认档 return 5000, 500这段逻辑说明的是PD 协商不是“我要多少就给多少”而是从对方宣告的能力里挑一个双方都能接受的。参数 target_mv 和 target_ma 来自上层策略比如电池充电曲线。如果返回 5000/500说明协商降级了这时候要查对方 Source Capabilities 里到底宣告了什么而不是反复重试。3.3 Vconn 与 Emarker 线缆标准 TYPE-C 线缆里如果带 Emarker 芯片DFP 端会通过 CC 引脚检测到 Ra0.8K 到 1.2K然后把另一根 CC 脚切换成 Vconn 供电给 Emarker 芯片上电。Emarker 芯片上电后通过 CC 上的 PD 报文告诉 DFP 这根线缆的电流能力、数据速率和 ID。没有 Emarker 的线缆DFP 只能按默认 3A 能力供电跑不了 5A。调试时如果发现“换了根线就能跑 100W原装线只能 65W”大概率是原装线里的 Emarker 没被正确识别。先查 CC 上有没有 Ra再查 Vconn 电压有没有出来。Vconn 的典型值是 3.3V 或 5V由 DFP 端提供电流能力一般不小于 100mA。4. Alternate Mode 激活DP Alt Mode 的 MUX 切换与 AUX 通道4.1 DP Alt Mode 的两种模式TYPE-C 接口跑 DisplayPort 时有两种模式。一种是 USB3.0 2-Lane DPUSB3.0 的 TX/RX 差分对占两对DP 占两对DP 支持 1 路 4K30HzHBR2或 4K60HzHBR3。另一种是 4-Lane DP四对高速差分全给 DP支持完整的 DP 协议带宽更高但 USB3.0 数据不能同时跑。选哪种模式取决于产品定位。扩展坞一般选 USB3.0 2-Lane DP因为要同时保留 USB 数据和视频输出纯视频转接线选 4-Lane DP把带宽全给显示。4.2 Alt Mode 激活流程DP Alt Mode 的触发靠 PD 的 VDMVendor Defined Message。流程大致是DFP 通过 CC 发 Discover Identity读 UFP 的 ID再发 Discover SVID读对方支持的 Alternate Mode如果对方支持 DPDFP 发 Enter ModeUFP 确认后双方切换 MUX把 TYPE-C 的高速差分对从 USB3.0 切到 DP。AUX 辅助通道走 SBU1 和 SBU2。这里的关键是 MUX 切换的时机。如果 MUX 切早了USB3.0 枚举还没完成系统会认不到 USB 设备切晚了DP 信号出不来。常见做法是在 PD 协商完成后先发 Enter Mode 命令等 UFP 回 ACK再切 MUX最后通知显示驱动重新读取 EDID。# 用 lsusb 和 dmesg 观察 Alt Mode 切换时的内核日志 # 插入支持 DP Alt Mode 的扩展坞后执行 dmesg | grep -i typec\|dp_alt\|displayport # 正常日志会显示 # typec port0: Enter Mode SVID 0xff01 # displayport: DP Alt Mode activated, 2 lanes # 如果只看到 Enter Mode 没有 activated查 MUX 的 I2C 配置这段命令是 Linux 环境下验证 Alt Mode 是否激活的快捷方式。如果内核日志里只有 Enter Mode 没有后续的 DP 激活说明 MUX 没切过去或者 DP 驱动没收到通知。先查 MUX 的供电和 I2C 地址再查设备树里有没有配错 lane 映射。4.3 AUX 通道与 SBU 引脚AUX 是 DP 的辅助通道用来读 EDID、做链路训练。在 TYPE-C 上AUX 走 SBU1 和 SBU2。如果 SBU 引脚没接或接反DP 能协商成功但显示不出画面或者分辨率上不去。调试时用示波器点 SBU1/SBU2看有没有 AUX 的差分波形。没有波形就先查 MUX 的 SBU 通道有没有使能。5. 避坑与排查CC 调试中最容易翻车的五个点5.1 现象插上设备 VBUS 不出CC 电压正常原因VBUS 上的 MOSFET 驱动电路有问题或者 DFP 端的 CC 检测逻辑判定为“未识别”。常见是 Rd 阻值偏大导致 CC 电压落在阈值边缘。解决先测 CC 对地阻值确认 Rd 是 5.1K。再查 MOSFET 的栅极驱动电压有些方案用电荷泵栅极电压不够会导致 MOSFET 不完全导通VBUS 有电压但带载就掉。5.2 现象正反插有一面不识别原因CC1 或 CC2 的走线断了、电阻虚焊或者 MUX 的 CC 检测脚只接了一路。解决用万用表测两面插入时 CC1/CC2 的对地阻值对比是否一致。不一致就查焊接和走线。MUX 的 CC 检测脚要确保 CC1 和 CC2 都接到不能只接一根。5.3 现象PD 协商跳不到 20V一直停在 5V原因Source Capabilities 里没有宣告 20V 档或者 Request 报文里的电压超出了对方宣告范围。也有可能是 CC 上的 BMC 信号质量太差报文 CRC 校验失败。解决用 PD 分析仪抓 CC 上的报文看 Source Capabilities 里到底有哪些 PDO。如果对方确实没宣告 20V那协商失败是正常的。如果有 20V 但 Request 被拒查 Request 里的电压和电流是否在 PDO 范围内。信号质量差的话查 CC 走线有没有串扰或者加小电容滤波。5.4 现象Emarker 线缆识别不到功率上不去原因CC 上的 Ra 没被检测到或者 Vconn 没供电。有些方案里 Vconn 和 CC 的切换逻辑写错了导致 Ra 检测和 Vconn 供电冲突。解决先测 CC 上有没有 Ra 的阻值。有 Ra 但 Vconn 没出来查 Vconn 的使能信号和供电电路。Vconn 一般由 DFP 端的 LDO 或 DC-DC 提供使能信号来自 CC 逻辑控制器。5.5 现象DP Alt Mode 协商成功但黑屏原因MUX 没切到 DP 通道或者 AUX 通道不通。也有可能是 EDID 读取失败显示驱动拿不到显示器参数。解决先查 MUX 的 I2C 配置寄存器确认 lane 映射切到了 DP。再测 SBU1/SBU2 有没有 AUX 波形。没有波形就查 MUX 的 SBU 通道使能位。EDID 读不到的话用 I2C 工具直接读显示器的 EDID 地址看能不能读到数据。6. 进阶技巧用 PD 分析仪和示波器把 CC 链路一次调通调 CC 链路最怕的是“盲调”——不知道 CC 上到底跑了什么报文也不知道 MUX 切没切。我一般会强制走一遍完整流程先静态测阻值再上电抓 CC 波形最后用 PD 分析仪看协商报文。PD 分析仪选支持 BMC 解码的能直接列出 Source Capabilities、Request、Accept、PS_RDY 这些报文。抓的时候注意触发条件设成 CC 上的电压跌落这样插入瞬间的报文都能抓到。如果分析仪显示 Request 发出去了但没有 Accept先查 CC 上的信号质量再看对方是不是在忙别的状态。示波器点 CC 的时候探头要选高阻的否则会影响 CC 上的电平。触发设成下降沿时基调到 1ms 每格先看插入瞬间的电压变化。正常情况是 CC 从高电平跌到 0.4V 左右然后开始跑 BMC 报文。如果跌下去又弹回来说明接触不良或者 Rd 没焊好。# 用 i2c-tools 读 MUX 的寄存器确认 lane 映射 # 假设 MUX 的 I2C 地址是 0x20lane 配置寄存器是 0x05 i2cget -y 1 0x20 0x05 # 返回值 bit[3:0] 表示 lane 映射 # 0x0 USB3.0 模式0x1 2-Lane DP0x2 4-Lane DP # 如果读出来是 0x0 但系统已经进了 DP Alt Mode说明 MUX 没收到切换命令 i2cset -y 1 0x20 0x05 0x1 # 手动切到 2-Lane DP 后再看 dmesg 有没有 DP activated这段 I2C 操作是验证 MUX 是否响应切换命令的直接手段。如果手动写寄存器能切过去说明 MUX 硬件没问题问题在固件没发切换命令。如果手动写也没反应查 MUX 的供电和 I2C 上拉电阻。从那以后我每次调 TYPE-C 接口都强制先测 CC 静态阻值再上电抓 PD 报文最后验证 MUX 切换。这三步走完90% 的 CC 相关问题都能定位到具体环节。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Python自动化脚本开发实战:10个高效工具详解

Python自动化脚本开发实战:10个高效工具详解

1. 项目概述:Python自动化脚本的价值与应用场景作为一名长期与Python打交道的开发者,我深刻体会到自动化脚本在日常工作中的巨大价值。Python凭借其简洁的语法、丰富的库生态和跨平台特性,成为自动化任务的首选工具。这些脚本不仅能将我们从重…

2026/10/15 8:09:14 阅读更多 →
Simulink绘制Bode图:开环与闭环频域分析实战指南

Simulink绘制Bode图:开环与闭环频域分析实战指南

简介:这份资源面向学习自动控制原理、需要掌握频域分析方法的本科生与工程技术人员,针对传统用MATLAB M语言绘制Bode图耗时费力、不便于直观理解频域指标的问题,改用Simulink可视化工具演示开环与闭环Bode图的绘制流程。资源包共1个PDF文件&a…

2026/10/15 8:09:14 阅读更多 →
artcraft:从意图到成品的创意工具链设计与工程实践

artcraft:从意图到成品的创意工具链设计与工程实践

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个词,我脑子里蹦出来的不是某个具体工具,而是一种很朴素的冲动——把“art”和“craft”捏在一起。艺术和手艺,一个偏表达,一个偏实现。很…

2026/10/15 8:08:13 阅读更多 →

最新新闻

贪心算法实战:Prim最小生成树从原理到堆优化

贪心算法实战:Prim最小生成树从原理到堆优化

1. 从一个真实场景说起:为什么我们需要最小生成树很多人第一次接触最小生成树这个概念,是在算法课上听老师念PPT,什么“带权无向连通图”“边权和最小”“无环子图”,听完一头雾水,考试前背个模板就过去了。但如果你真…

2026/10/15 13:20:52 阅读更多 →
外贸独立站3类页面合格度,怎么用脚本一次跑完

外贸独立站3类页面合格度,怎么用脚本一次跑完

给外贸独立站做内容改版,最容易卡在验收:产品页的参数补全了没有、文章页能不能答上标题那个问题、问答页有几条。这些判断过去都靠人眼看,改完一批就没人再回头看一遍。这篇把三类页面的判断标准写成可计算的指标,配一段能跑的脚…

2026/10/15 13:20:52 阅读更多 →
SAP成本中心与内部订单:核心区别、配置逻辑与实操避坑指南

SAP成本中心与内部订单:核心区别、配置逻辑与实操避坑指南

1. 成本中心与内部订单到底在解决什么问题刚接触SAP财务模块的朋友,十有八九会在成本中心和内部订单这两个概念上卡住。我第一次配这两个东西的时候,盯着屏幕看了半天,心里想的是:不都是归集费用吗,搞两套东西出来不是…

2026/10/15 13:20:52 阅读更多 →
USB3300 ULPI PHY设计实战:高速USB接口原理图与驱动调试要点

USB3300 ULPI PHY设计实战:高速USB接口原理图与驱动调试要点

简介:面向STM32F2XX/F4XX开发者的USB3300高速USB接口控制器资料包已公开。USB3300支持USB 2.0高速传输(480Mbps),内置PHY层,适合需要快速数据交换的嵌入式场景;该压缩包既有芯片与官方板级设计文档&#xf…

2026/10/15 13:20:52 阅读更多 →
TongLINK/Q vs RabbitMQ:消息中间件运维实战与国产化迁移指南

TongLINK/Q vs RabbitMQ:消息中间件运维实战与国产化迁移指南

1. 先搞清楚定位:这两个中间件是干什么的干中间件运维这些年,我最大的感受是:很多事故不是因为中间件本身有多脆弱,而是接手的人没搞明白手里这个组件在系统里到底承担什么角色。TongLINK/Q和RabbitMQ就是典型例子——一个是国产商…

2026/10/15 13:20:52 阅读更多 →
2026知乎优质博主筛选指南:技术、产品、运营与行业盘点

2026知乎优质博主筛选指南:技术、产品、运营与行业盘点

站在 2026 年这个时间点,知乎上的互联网类内容其实已经变了好几轮。早几年大家靠"干货长文"起家,后来短视频截流、图文号被算法打压,能坚持写长文的博主本身就是一种筛选。但问题也随之而来——真正值得关注的人,往往藏…

2026/10/15 13:19:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →