PCIe转USB3.0扩展卡:xHCI、BAR0与5Gbps链路排查
简介:VL805 数据手册(Revision 0.85)面向硬件工程师、PCB 设计人员以及 PCI-E 转 USB 3.0 扩展方案开发者,围绕四端口 USB 3.0 主控芯片的选型、原理图设计与板级调试展开。手册正文系统梳理产品特性、系统概述、引脚图与引脚功能、PCI 配置寄存器、回流焊制程指南、封装机械规格及封装顶部标记等模块,并说明 SuperSpeed、High-Speed、Full-Speed、Low-Speed 下行端口,xHCI 规范,电池充电与中国充电,UAS/Turbo 驱动以及与 Windows 8 内置驱动的兼容情况;对引脚定义、PCI 配置空间、回流焊曲线、封装尺寸和顶部丝印也有明确说明,适合在扩展卡选型、原理图评审、PCB 封装建库、寄存器调试和试产导入等环节查阅。包内共 1 个 PDF 文件,压缩包约 936KB,篇幅轻量、便于随查随用。已有 3614 人学习下载,可作为 VL805 扩展卡设计、驱动适配和硬件问题排查的案头参考。
1. 一块扩展卡背后的错觉:PCIE 转 USB3.0 到底翻译了什么
多数人对 PCIE 转 USB3.0 的想象是:芯片这一头收 PCIe 包,那一头翻译成 USB 包,两边对等。翻完 VL805-DataSheet 那套引脚表和配置寄存器就会发现完全不是这回事——对操作系统来说,它只是 PCIe 总线上一个普通端点,BAR0 里挂一块 64 位 MMIO 窗口,窗口后面摆着 xHCI 规范定义的那几百个寄存器。USB3.0 的协议栈整个跑在主机侧驱动里,芯片干的是 DMA 搬运、链路训练和端口时序。
这个反直觉的分工能解释一堆现象:为什么这张 pci-e USB3.0扩展卡插上去免驱;为什么 Class Code 写错一位系统就装错驱动;为什么 SuperSpeed 差分对上那颗电阻的精度能决定你跑 5Gbps 还是 480Mbps。把手册从后往前读——先看它对外暴露了什么,再看内部怎么兑现——比顺着产品特性一路读下去有用得多。
2. PCIe 侧:BAR0 里那块 64 位 MMIO 窗口,凭什么让系统“看见”四个 USB 口
2.1 配置空间前三十二字节决定了驱动会不会认它
手册第 5 章把 Header 区(00h–3Fh)列得很细,真正决定命运的其实只有三个字段:Vendor ID 默认 1106h、Device ID 默认 3483h、Class Code 默认 0C0330h。前两个是身份牌,靠它们精确匹配厂商驱动;第三个是类别牌,靠它匹配操作系统自带的通用驱动。
0C0330h 拆开看:base class 0Ch 表示 Serial Bus Controller,subclass 03h 表示 USB,programming interface 30h 表示 xHCI。这三个字节缺一不可。如果 prog-IF 被写成 20h,那是 EHCI 的签名,系统会去加载 USB 2.0 的增强主机控制器驱动,结果就是设备管理器里一个黄色感叹号,硬件本身没毛病,只是被认错了门。
注意:一些厂商的量产工具允许改 Subsystem ID(2Ch–2Fh 与 5Ch–5Fh 两组),后者标注为“SW can update”。改身份牌不影响 Class Code 匹配,改类别牌才致命。
想快速确认手里这张卡到底报的是什么,直接在 Linux 下读配置空间:
# 按 VID:DID 精确匹配,打印前 256 字节配置空间 lspci -d 1106:3483 -xxx # 只关心类别码和 BAR,用 -vv 更直观 lspci -d 1106:3483 -vv | grep -E "Class|Region 0|Capabilities"第一行输出里的Class 0c03后面如果跟着30,说明类别码正确。-vv里Region 0: Memory at ...就是 BAR0 被 BIOS 分配到的物理地址,如果显示<unassigned>或者全 F,问题不在芯片而在上游资源分配。
2.2 BAR0 的 64 位地址与 xHCI 寄存器块的定位方式
手册 10h–13h 是 XHCI Memory Mapped I/O Low Base Address,默认值 00000004h。这个默认值有意思:bit2:1 固定读回 10b,表示这是一块 64 位可预取内存空间,低 12 位在地址计算时被硬件忽略——因为 xHCI 寄存器块要求 4KB 对齐。高 32 位在 14h–17h,默认全 0。
为什么非要用 MMIO 而不是 I/O 端口?xHCI 的能力寄存器块加上运行寄存器块、端口寄存器组、 Doorbell 数组,加起来远超 64KB 的 I/O 空间上限,而且端口状态轮询是高频访问,out/in指令的开销和不可缓存特性都不合适。MMIO 让这些寄存器直接落在内存地址空间里,驱动ioremap之后就是几条 load/store。
驱动侧拿到 BAR 之后的第一件事不是急着初始化,而是读 CAPLENGTH 定位运行寄存器块:
/* 把 BAR0 映射进内核地址空间,xHCI 所有寄存器都在这个窗口内 */ void __iomem *base = ioremap(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0)); u8 caplen = readb(base + 0x00); /* 能力寄存器块字节长度 */ u32 hcsparams1 = readl(base + 0x04); /* HCSPARAMS1 */ u32 maxports = (hcsparams1 >> 24) & 0xFF; /* bit31:24 = Number of Ports */ /* 运行寄存器块的基址 = 能力块基址 + CAPLENGTH,不是固定偏移 */ void __iomem *opbase = base + caplen;caplen的作用是解耦:xHCI 规范允许厂商在能力块里塞自定义扩展寄存器,只要把 CAPLENGTH 报大一点,后面的运行寄存器整体后移。写死偏移的驱动换个固件版本就会读错地方。
hcsparams1的 bit31:24 是端口数,bit7:0 是 MaxSlots(可同时寻址的设备槽位数),bit15:8 是 MaxIntrs。这里有个手册级别的坑:第 2 章 System Overview 的正文写着 “The root hub consists of two downstream facing ports”,但产品特性页写的是 4-Port,引脚表里 DP1 到 DP4 四组差分对齐全。以引脚和产品名为准,正文那句是笔误。端口数读出来应该是 4,如果真读到 2,大概率是固件版本和硬件不匹配——这种情况在拆机卡的混装批次里并不罕见。
2.3 100MHz 参考时钟、PEXRST# 与 PEXCREQ# 的握手顺序
PEXCLK+ / PEXCLK− 在 21、22 脚,外部提供的 100MHz 差分参考时钟。手册给了一个很具体的容差:SSC 允许 +300ppm 到 −2300ppm。这个不对称不是随手写的——扩频时钟的调制方式是中心频率向下偏移,正向余量小、负向余量大是行业惯例。如果主板的参考时钟来自一颗没开 SSC 的普通晶振,落在 0ppm 附近,当然也在范围内。
剩下的边带信号构成一套完整的上电握手:
| 引脚 | 编号 | 方向 | 作用 | 典型接法 |
|---|---|---|---|---|
| PEXRST# | 19 | 输入 | PCIe 复位,拉低触发芯片内部硬复位 | 接主板 PERST# |
| PONRST# | 31 | 输入 | 上电复位 | RC 延时到电源稳定 |
| PEXCREQ# | 30 | 输出 | CLKREQ#,请求开/关参考时钟 | 接主板对应引脚 |
| PEXWAKE# | 20 | 开漏输出 | 链路重新激活、系统唤醒 | 上拉,接 WAKE# |
PEXCREQ#的存在意味着这颗芯片支持在链路空闲时让主板关掉参考时钟省电,等有 USB 事件再拉低请求时钟回来。PEXWAKE#则把 USB 侧的插入事件冒泡到 PCIe 侧,进而唤醒整机。这两个信号如果不接,功能上看不出问题——设备照样能用,只是 S3 唤醒和空闲省电失效。很多廉价扩展卡正是在这里省了两根线,用户只会觉得“这卡插着不让电脑睡”。
复位时序手册没给具体纳秒数,常见的实现思路是:三路电源全部爬升到阈值以上、25MHz 晶振起振稳定之后,PEXRST# 再保持至少几十毫秒才释放。手册第 6 章那份回流焊曲线和第 7 章封装机械图说明它面向的是板载设计,时序得由整板设计者兜底。
3. USB3.0 侧:SuperSpeed 与 High-Speed 为什么必须是两套独立的线
3.1 全双工与半双工在物理层就分道扬镳
引脚表把这件事摊得很明白。以端口 1 为例:SSTX1+ / SSTX1− 在 52、53 脚,SSRX1+ / SSRX1− 在 55、56 脚,而 USB2D1+ / USB2D1− 在 58、59 脚。四组 SuperSpeed 差分对加一组 USB2.0 差分对,一共五对线服务一个物理口。
这不是设计者偷懒不肯复用。USB 2.0 的高速模式是半双工,一对 D+/D− 靠方向切换完成收发;USB 3.0 的 SuperSpeed 是全双工,独立的发送对和接收对可以同时工作,5Gbps 的单向带宽才成立。想把两者塞进同一对线,就得在物理层做时分复用,链路训练、均衡、共模电平全都对不上——本质上等于重新发明一套协议。
所以芯片内部是两套 PHY:一套 USB3.0 PHY(供电引脚标成 VCCA10SSRX12、VCCA33SS12 那一类),一套 USB2.0 PHY。二者共享的只有端口状态机和上行通道,物理介质从插头开始就是分开的。这也是为什么一根 USB 3.0 线比 2.0 线粗一圈——里面多了三对屏蔽差分对。
注意:SS 发送对通常需要串联 AC 耦合电容(百纳法级别),这是规范要求而非可选。电容漏贴或贴成小容值,表现为 SuperSpeed 设备插上后枚举超时,然后自动回落到 High-Speed。
3.2 SSREXT 上那颗 6.04K 电阻:一颗被动件决定 5Gbps 还是 480Mbps
第 4 章模拟命令块里有一行很容易被略过:SSREXT 在第 50 脚,需要外接一颗 6.04K、精度 1% 的电阻到地,作为 SuperSpeed USB 的带隙基准。第 48 页的 System Overview 里又强调了一遍 “advanced process” 和 “low working temperature”,这颗电阻就是那个“先进工艺”得以稳定工作的锚点。
它的作用是给 SS PHY 提供精确的偏置电流。偏置电流决定发送摆幅、决定接收端终端匹配、决定共模电平。1% 是硬指标,因为这颗电阻的误差会直接折算成眼图张开度的收缩。用 5% 精度会怎样?芯片不会坏,USB2.0 部分完全正常,键盘鼠标照用,只有 SuperSpeed 链路训练失败——而失败的处理方式是静默回落到 High-Speed,用户侧毫无感知。
这种故障模式最阴。插上一块移动固态硬盘,能认盘、能读写,就是速度只有理论值的十分之一。没有报错,没有黄色感叹号,只有一条藏在日志里的降速记录:
# 插着 SS 设备却只跑 480Mbps 时,内核只记一行,不报错 dmesg | grep -i xhci | grep -iE "port|speed" # 典型输出:xhci_hcd 0000:03:00.0: Port 1: 480 Mbps # 期望看到的是:Port 1: 5 Gbps如果同一根线、同一个口,换台机器就跑到 5Gbps,那基本可以判定是这颗电阻或者 SS 差分对上的 AC 耦合电容出了问题。这也是为什么维修时万用表量通断没用的原因——1% 和 5% 在万用表上都是“有阻值”。
3.3 四个端口的能力边界与充电协商
产品特性页写得很清楚:四个下游端口全部支持 SuperSpeed、High-Speed、Full-Speed、Low-Speed 四档。这一点值得强调,因为同期不少方案是“两个 SS 口 + 两个纯 HS 口”的混合配置,插错口就掉速。VL805 是四口全规格。
充电部分在 Rev 0.85 里新增了 China Charging,加上原有的 BC 1.2 和 Apple Charging 支持。这类协商不是纯硬件比较器能干的事:DCP(专用充电口)靠 D+/D− 上的分压组合广播电流能力,CDP(充电下行口)还要在枚举间隙做握手,让设备知道“我能给你 1.5A,同时我还能传数据”。芯片得在 USB2.0 PHY 上参与这套电平游戏,所以充电能力跟主控是绑定的,不是外加个电源芯片就能升级。
边带信号这边是每口一对:
| 信号 | 端口 1/2/3/4 | 类型 | 含义 |
|---|---|---|---|
| USBHPE1#–4# | 44 / 42 / 40 / 38 | 开漏输出 | 端口电源使能,低有效 |
| USBHOC1#–4# | 43 / 41 / 39 / 37 | 输入 | 过流指示,低有效 |
#后缀意味着低电平有效,接反了逻辑就全拧。过流引脚不接的话,芯片默认认为电流正常,真短路时不会切断端口电源——保护电路形同虚设。手册把这些脚放在 Side Band 一节而不是 USB 接口一节,很容易在做原理图时漏掉。
4. 上电与固件:三个电源域、25MHz 晶振和那段可刷写的 MCU 代码
4.1 三个电源域分别喂给谁,以及 suspend 电源为什么不能省
手册的电源引脚表列了三组:
| 引脚名 | 引脚号 | 电压 | 供给对象 |
|---|---|---|---|
| VDD | 9, 29, 45, 60 | 1.05V | 内核主电源 |
| VSUS33 | 32, 46 | 3.3V | 挂起域 3.3V |
| VSUSUSB | 3, 12, 43, 54, 63 | 1.05V | USB PHY 挂起域 1.05V |
另有三组 PHY 专用供电:VCCA33PEX(23 脚,PCIe PHY 3.3V)、VCCA10SSRX12 与 VCCA33SS12(54/63 与 57/66,端口 1、2 的 PHY)、VCCA10SSRX34 与 VCCA33SS34(3/12 与 6/15,端口 3、4 的 PHY)。
“suspend”这个词是关键。系统进 S3 之后主电源 VDD 是可以断的,但 USB 口必须还能检测到设备插入、必须还能响应唤醒事件、必须还能给手机充电。所以 USB PHY 和一部分检测逻辑挂在常供的 suspend 电源上,功耗压到毫安级。
这张表有两处标注重叠:GND 标了 13 脚,而端口 4 的 SSRX4− 也标 13 脚;VSUSUSB 列了 3、12、43、54、63,其中 54、63 又同时出现在 VCCA10SSRX12 里。这类重叠在早期版本的手册里不算罕见,实际布线以参考原理图为准,别拿这份表直接画封装。
4.2 25MHz 晶振:为什么不能蹭 PCIe 那路 100MHz
SSXI 在第 47 脚,SSXO 在第 48 脚,接一颗 25MHz 晶体。手册补了一句:SSXI 也可以由外部时钟源直接驱动,此时要求 1.05V 摆幅、SSXO 悬空。
为什么不用现成的 PCIe 100MHz 参考时钟分频?因为两个协议对抖动的容忍模型不一样。PCIe 的参考时钟允许扩频,扩频本身是有意引入的周期性频偏;USB3.0 的 SuperSpeed 载波是 5GHz,由 25MHz 倍频上去,对参考源的相位噪声要求是另一套账。共用一个时钟源意味着两边的抖动预算要合并计算,任何一边超标都会拖累另一边。多用一颗晶体,多花几分钱,换来两个时钟域彻底解耦——这笔账在量产板上算得过来。
SSXI 支持外部驱动这个选项,是给多卡同步或者板上有统一时钟树的场景留的口子。真要用的话注意摆幅是 1.05V,接 3.3V 电平的时钟源会直接打穿输入级。
4.3 SPI Flash 与 FW_VERSION:芯片内部其实跑着一套 MCU
第 4 章的 SPI Flash Interface 一节给了四根线:SPICS#(34 脚,片选)、SPISCLK(35 脚,时钟)、SPISI(36 脚)、SPISO(33 脚)。这里有个方向命名的坑:表里 SPISI 标的是 O(输出)、SPISO 标的是 I(输入),因为命名是从芯片自身角度出发的——芯片输出数据到 Flash 的输入脚,所以叫 SPISI。做原理图时按“芯片视角”连,别按信号名里的 I/O 直觉连。
这四根线存在,说明芯片里有独立于 PCIe 和 USB 的第三个处理器子系统,它有自己的固件、自己的存储。手册在 XHCI 特定寄存器区(40h–FFh)里对应放了两组线索:
- 50h–53h 是 XHCI MCU Firmware Version,只读,默认 00000000h
- 48h–4Bh 是 XHCI CRCR Mirror Low Register,Command Ring 指针的镜像,调试用
前者是判断固件有没有跑起来的唯一窗口。读出来是 0,意味着 MCU 没有从 Flash 取到有效代码,或者 Flash 是空片:
# 直接读配置空间 50h 偏移处的 4 字节固件版本号 setpci -s 03:00.0 50.l # 非 0 说明 MCU 已启动;恒为 0 则检查 SPI Flash 是否空片、CS 是否虚焊固件可升级这件事本身就是设计取舍。产品特性页写了两条路径:用工具在 DOS 或各版本 Windows 下刷写,或者把固件整合进系统 BIOS 走板载设计。后者对 OEM 友好——整机厂发一次 BIOS 更新就能修一批芯片的 errata,用户完全无感。前者对售后友好——刷坏了还能进 DOS 救回来。
代价是外部 Flash 成了单点。空片、虚焊、容量不匹配,表现都是“设备能枚举但 MMIO 全 0”或者“压根不枚举”。而 PCIe 侧的基础配置空间是硬件固化的(VID、DID、Class Code 都是 RO),所以哪怕固件全废,lspci依然能看见这张卡——这个特性在定位故障时非常有用:能看见卡但读不到固件,问题在 Flash;连卡都看不见,问题在链路或供电。
4.4 SMI#:为什么老主板进 BIOS 之前 USB 键盘是活的
SMI# 在第 18 脚,开漏输出,手册的描述只有一句:为了支持 BIOS 下的 USB 功能,需要把这根线接到平台芯片组;如果不需要,用 10K 电阻上拉到 3.3V。
这句话背后是一整套 Legacy USB 机制。BIOS 阶段操作系统还没起来,没有 xHCI 驱动,但用户要能用 USB 键盘进设置界面。做法是:芯片检测到 USB 输入事件后拉低 SMI#,触发 CPU 进入系统管理模式,在 SMM 里跑一段极简的 USB 轮询代码,把键码翻译成 PS/2 扫描码塞进 8042 的缓冲区,BIOS 那边看到的就还是一个传统键盘。
这也解释了那个经典现象:某些老机器上,BIOS 里 USB 键盘完全没反应,进了系统就正常。不是键盘坏了,是 SMI# 没接或者 SMM 里的那段代码没实现。手册把它归在 Side Band 而不是功能章节,做板载设计时很容易被当成“可选项”删掉,删完就在售后收到一堆“进不去 BIOS”的投诉。
SMI#是开漏输出,必须上拉。手册给的是 10K 到 3.3V,用 4.7K 也能工作,但功耗会上去一点。
5. 排查手册:五类现场故障的现象、成因与定位路径
5.1 枚举类故障:设备管理器里的黄叹号
现象:插上扩展卡,系统能发现新硬件但装不上驱动,或者装完带黄色感叹号;lspci能看到设备,但dmesg里 xHCI 初始化报错退出。
原因:Class Code 的 programming interface 字节不是 30h。有些批次的卡在出厂前被工具改过 Subsystem ID,操作失误连带改了类别码;也有的是山寨方案商为了绕开驱动白名单故意改的,改完忘了改回来。
解决:lspci -xxx看 0Ah 偏移(Class Code 在 09h–0Bh,小端序读出来是 0C 03 30 三个字节,实际输出顺序为 30 03 0C)。确认是 0C0330 而不是 0C0320 或 0C0310。类别码是 RO 属性,改不了,只能换卡或找厂商工具重刷。
现象:lspci里 BAR0 显示<unassigned>或者地址全是 F。
原因:BIOS 没给这块 BAR 分配地址空间。多卡并联、老平台、开了大量 Above 4G 解码限制时都可能出现。64 位 BAR 需要连续的高地址空间,资源碎片化时分配失败。
解决:换插槽、关掉 BIOS 里的 Above 4G Decoding 再试、或者干脆换平台。这一条是纯平台问题,跟芯片无关。
5.2 链路类故障:SS 设备只跑 480Mbps
现象:USB 3.0 移动硬盘插上能用,测速只有 40MB/s 上下,dmesg里该端口显示480 Mbps而不是5 Gbps。换机器就正常。
原因:SSREXT(50 脚)上的 6.04K 电阻用了 5% 精度、阻值漂移,或者干脆漏贴。也可能是 SS 差分对上的 AC 耦合电容漏贴、贴反、容值不对,或者差分对没做阻抗控制。
解决:先看电阻本体丝印和实测阻值,1% 精度的电阻通常有五位标注。再查 AC 耦合电容是否贴装到位。差分阻抗这块只能用 TDR 或者让板厂出阻抗测试报告,万用表量不出来。
现象:插 SS 设备时枚举超时,反复重试几次后回落到 HS 才认到。
原因:SS 差分对的走线过长、过孔过多、或者与高速信号(尤其是 PCIe 的 TX/RX 对)平行走线过长,串扰把眼图压塌了。
解决:缩短 SS 走线、远离 PCIe 差分对、保证参考平面完整。这条只能改板,改不了就接受降速。
5.3 电源与固件类故障:能看见设备但完全不能用
现象:lspci能看到 1106:3483,但setpci -s xx:xx.x 50.l读出来恒为 0,设备管理器里报“该设备无法启动”。
原因:SPI Flash 空片、虚焊,或者上电时序不对导致内部 MCU 没启动。VSUS33 和 VDD 的上电顺序如果反了,MCU 会在电源未稳时开始取指,取到乱码后进死循环。
解决:先量 Flash 的 CS 脚有没有片选波形(示波器抓上电瞬间),没有波形说明 MCU 没启动,问题在电源时序;有波形但读不到固件,说明 Flash 是空的或者数据损坏,用工具重刷。
现象:系统休眠后唤醒不了,或者唤醒后 USB 口全部失效,必须重启。
原因:PEXWAKE# 没接、或者 VSUS33/VSUSUSB 这两路 suspend 电源被设计成跟主电源一起断。休眠时 USB PHY 没电,插设备不会有任何事件,自然唤不醒。
解决:确认 suspend 电源来自常供的待机电源轨,不随主电源关闭。量一下 S3 状态下 SSXI 有没有 25MHz 振荡——没有振荡说明 PHY 域整个断电了。
6. 设计取舍:把复杂度推给操作系统,代价是什么
回头看这颗芯片的所有设计选择,其实都指向同一个方向:把复杂度尽量推给主机侧。
xHCI 规范本身就是这个思路的产物。USB 2.0 时代的 EHCI 只定义高速部分,全速/低速设备要靠 companion controller 兜底,主板上一颗 EHCI 配两三颗 OHCI/UHCI,驱动里全是兼容分支。xHCI 一次性把四档速度、所有传输类型统一进一套寄存器模型,硬件侧的工作变成了“填好描述符、按 Doorbell、等事件”——真正的调度逻辑全在驱动里。
这么做的好处,产品特性页写得很直白:Windows 8 内置驱动直接兼容,四口全规格,免驱。代价是芯片的可玩性被锁死在一套标准接口里,厂商能做的差异化只剩下固件层和边带信号。
| 设计选择 | 换来了什么 | 付出了什么 |
|---|---|---|
| xHCI 标准接口,Class Code 固定 | 免驱,跨系统通用 | 无法做私有加速,功能受规范约束 |
| 外部 SPI Flash 存固件 | 可升级、可修 errata | 多一颗料,空片即变砖,多一处失效点 |
| 独立 25MHz 晶振 | 与 PCIe 时钟域解耦,抖动预算独立 | 多一颗被动件,多两脚布线 |
| 三组独立电源域 | S3 下能检测插入、能充电 | 上电时序敏感,布线复杂度上升 |
| SuperSpeed / High-Speed 双 PHY | 全双工 5Gbps,向下兼容 | 一个口五对差分线,PCB 层数和面积成本上升 |
我自己踩得最深的一次,是拿一块二手扩展卡做压力测试,插着 SSD 跑了一晚上没报错,第二天才发现全程跑在 480Mbps。日志里那一行Port 1: 480 Mbps从头到尾都在,只是我压根没往那儿看。
从那以后,我拿到任何一颗 xHCI 主控,都强制走一遍三处确认:先lspci -xxx看 Class Code 是不是 0C0330,再lspci -vv看 BAR0 有没有分到地址,最后setpci读 50h 的固件版本号是不是非 0。三处全过,才认为这颗芯片处于可调试状态;任何一处不对,后面的活都是白干。
这套检查顺序没有任何玄学,就是把手册第 5 章那 18 页寄存器按重要性排了个序。附录里的回流焊曲线和封装图当然也重要,但那是板厂的事;对调驱动、查故障的人来说,配置空间那几十个字节才是全部。希望帮到你。
本文还有配套的精品资源,点击获取