VL805 PCIe转USB3.0四口扩展卡硬件设计与调试指南
简介:面向硬件工程师、嵌入式开发与PC扩展卡设计者的VL805芯片数据手册,聚焦PCI-E转USB3.0主控方案,可用于扩展卡选型、原理图与PCB布局、驱动适配及量产工艺参考。包内为1个PDF文件,约936KB,内容围绕4端口USB3.0主控制器展开,涵盖产品特性、系统概述、引脚图与引脚功能、PCI配置寄存器、回流焊制程指南、封装机械规格及封装顶部标记等章节。读者可据此核对USB3.0/2.0与xHCI规范兼容性、四路下游端口对SS/HS/FS/LS设备的支持,了解电池充电、固件升级、Windows 8内置驱动及UAS/Turbo驱动等要点,并获取寄存器配置、焊接参数与封装尺寸信息,便于硬件设计、调试和制造环节查阅。目前已有3614人学习下载。
1. 一块丝印磨花的 PCIe 转 USB3.0 卡,能救你的只有原始手册
手上只有一块丝印磨掉一半的扩展卡,插进主板,系统里连个未知设备都不冒出来,这时候论坛帖子救不了你,能救你的只有那颗芯片的原始手册。VL805-DataSheet 就是这么一份东西:18 页,Rev 0.85,2012 年 11 月定稿,把一颗四口 USB3.0 主控从产品特性、系统框图、68 个引脚的功能定义,一路写到 PCI 配置空间里每一个 bit 的默认值和读写属性。它不教你怎么画板,但它决定了你画板时哪些线不能省、哪些电阻不能换、哪些寄存器读出来不对就说明链路压根没通。适合三类人:接手别人留下的 PCIE 转 USB3.0 扩展卡要改版的硬件工程师、要在载板上做 on-board 设计的嵌入式开发者,以及卡在「能认到设备但四个口跑不满」想找根因的调测人员。USB3.0 扩展这件事,玄学少,手册读得细不细才是分水岭。
2. 把这颗四口 xHCI 控制器读薄:带宽账、端口数与选型边界
2.1 先算带宽账:一条 x1 Gen2 喂不饱四个 5Gbps 口
很多人拿到手册直接从第 3 章引脚图开始翻,画完板子调通,插满四个盘才发现速度全塌下来。问题不在硬件,在第一条约束上:VL805 对上只有一条 PCI Express 2.0 x1 链路。
PCIe 2.0 x1 是 5 GT/s 线速率,8b/10b 编码,裸带宽 500 MB/s。TLP 头、DLLP、ACK/NAK、流控信用更新都要吃一份,实测有效载荷普遍落在 380~420 MB/s 区间。这条链路是四个 USB 口共享的,不是每口一条。
USB 3.0 单口这边同样是 5 Gbps + 8b/10b,理论 500 MB/s。UASP 模式下实测普遍在 380~420 MB/s,跑 BOT 模式只有 280~320 MB/s。也就是说,单口跑一块 SATA SSD 时,瓶颈可能先在 USB 协议开销上,PCIe 侧刚好跟得上;一旦两口同时压满,PCIe x1 立刻变成唯一瓶颈。
| 链路 / 端口 | 线速率 | 编码方式 | 裸带宽 | 实测有效载荷 |
|---|---|---|---|---|
| PCIe 2.0 x1(上行) | 5 GT/s | 8b/10b | 500 MB/s | 380~420 MB/s |
| USB 3.0 单口 UASP | 5 Gbps | 8b/10b | 500 MB/s | 380~420 MB/s |
| USB 3.0 单口 BOT | 5 Gbps | 8b/10b | 500 MB/s | 280~320 MB/s |
| USB 2.0 单口 HS | 480 Mbps | NRZI + 位填充 | 60 MB/s | 35~42 MB/s |
选型时我一般这样估:把每个口预期的稳态带宽加起来,除以 0.8 的协议效率系数,看总数有没有越过 400 MB/s。四个口各挂一个 2.5 寸机械盘盒(单口 130~160 MB/s)同时拷数据,合计已经顶到上限,这时候表现是「都能用,但谁都跑不满」;如果只挂一个 NVMe 硬盘盒加三个键鼠/U 盘/串口设备,那是它的舒适区,单口能跑到 400 MB/s 上下。
提示:手册第 1 章只写「SuperSpeed 5 Gbps」,没有给聚合吞吐的数字。带宽账要自己算,别指望手册替你判断这颗芯片适不适合多盘位场景。
2.2 手册内部三处对不上的地方,用哪个为准
Rev 0.85 是预发布版号,文档里前后不一致的地方不止一处,第一次读很容易被带偏。
第一处最要命:第 2 章 System Overview 原文写「The root hub consists of two downstream facing ports」,但第 1 章产品特性写的是「Four down-stream ports」,第 4 章引脚功能表实打实列了 SSTX1~4 / SSRX1~4 四组 SuperSpeed 差分对、USB2D1~4 四组 USB 2.0 差分对,侧带信号也是 USBHPE1#~4#、USBHOC1#~4# 各四路。三处对一处,结论明确是四口,那句「two downstream facing ports」是文档遗留。
第二处:偏移 3Dh 的 Interrupt Pin,默认值栏写 00h,描述栏写「Fixed at 01h (INTA#)」。实际读出来是 01h,描述栏是对的。
第三处:电源引脚表里,3、12、54、63 这几个脚号同时出现在 VSUSUSB(1.05V 挂起)和 VCCA10SSRX(USB PHY 1.05V)两个域的描述里。布板时按同一个 1.05V 网络处理、再用磁珠分组隔离即可,不必纠结表格里的归属文字。
遇到手册自相矛盾,我的处理优先级是:引脚图 > 引脚功能表 > 系统概述 > 特性列表。理由是引脚图对应封装定型,改一次要重开光罩;概述文字由文档工程师后期撰写,最容易残留旧版本内容。这条经验在别的芯片手册上同样成立。
2.3 什么场景该选它,什么场景趁早换方案
VL805 的定位很清楚:把一条 PCIe 链路变成四个向下兼容的 USB 口。手册列的应用场景是主板、笔记本、ExpressCard、Add-in Card、嵌入式系统和扩展坞,这几个方向它都合适。
适合的场景:老平台补 USB3.0 口、工控机前面板扩展、嵌入式载板做 on-board 设计(固件可以直接并进 BIOS,省掉一颗 SPI Flash)、扩展坞做四口下行、ExpressCard 形态的便携扩展。它对 USB 2.0 和 1.1 设备完全向下兼容,四口都支持 SS/HS/FS/LS 四种速率,老设备插上去不需要额外 hub。
不该选的场景也很明确:要多口同时满速,选 PCIe x4 通道的桥片或者双芯片方案;要 USB PD 供电,这颗只做到 Battery Charging 1.2 加 Apple Charging 和中国充电规范,没有 PD 协商能力;要 10 Gbps,那是 USB 3.1 Gen2 的活,跟它无关。
驱动面要提前想清楚。Windows 8 起系统内置 xHCI 驱动,插上即用;Windows 7 / Vista / XP 必须装原厂那套 in-house UAS/Turbo 驱动,手册修订记录里专门为此加了一条。做产品出货时,Win7 下的驱动签名是个绕不开的现实问题,最好在方案评审阶段就定下来要不要保留 Win7 支持。Linux 侧走 xhci_hcd 加 uas,内核 3.x 之后基本免驱,但要确认 uas 模块真的加载上了,否则会自动退回 BOT 模式,速度直接掉三成。
3. 原理图阶段的引脚翻译:电源域、时钟基准与 SPI 固件通路怎么落
3.1 三组电源域:1.05V 核心、3.3V 挂起与 USB PHY 供电
先把最容易翻车的一条说清楚:PCIe 插槽上没有 1.05V。VL805 的 VDD 是 1.05V 核心电压,引脚 9、29、45、60,这一路必须板上自己做 DC-DC 从 3.3V 或 12V 降下来。很多人对着引脚表找了一圈插槽供电,最后发现少画了一颗 buck。
| 电源网络 | 引脚号 | 电压 | 作用 |
|---|---|---|---|
| VDD | 9, 29, 45, 60 | 1.05V | 数字核心 |
| VSUS33 | 32, 46 | 3.3V | 挂起域 3.3V |
| VSUSUSB | 3, 12, 54, 63 | 1.05V | USB PHY 挂起域 |
| VCCA33PEX | 23 | 3.3V | PCIe PHY |
| VCCA10SSRX12 / VCCA10SSRX34 | 54, 63 / 3, 12 | 1.05V | USB PHY 1.05V |
| VCCA33SS12 / VCCA33SS34 | 57, 66 / 6, 15 | 3.3V | USB PHY 3.3V 挂起 |
去耦按「每个电源脚一颗 0.1μF、每组一颗 1μF、整域一颗 10μF 以上体电容」铺。1.05V 那一路如果用同步 buck,开关频率选在 1MHz 以上,输出纹波压到 30mV 以内,电感别贴着 SSXI 晶振放。我一般给 1.05V 轨留 2A 余量——手册没有给典型功耗曲线,四口同时带大电流设备时的峰值只能靠余量兜。
3.3V 从插槽取电,要注意 PCIe x1 插槽的 3.3V 供电余量本身有限,四个口同时挂移动硬盘这种负载,总功耗要提前核一遍,别等样机回来才发现插槽那一路被拉塌。
3.2 25MHz 晶振、100MHz 参考时钟与那颗 6.04K 电阻
时钟这块分三部分,每一部分都有坑。
主时钟走 SSXI(47)/ SSXO(48),25MHz 晶振。手册明确写了 SSXI 也可以由外部时钟源直接驱动,条件是 1.05V 摆幅,此时 SSXO 悬空。这里有个硬约束:外部时钟摆幅不能上 3.3V,直接灌 3.3V 方波会把引脚打坏。做板间同步时钟共用的设计时要加电平转换。
晶振选型上,USB 3.0 规范要求参考时钟精度在 ±300ppm 以内,实际选 ±30ppm 的常规无源晶振就够,负载电容按晶振规格书算,别照抄参考设计的 12pF。起振不起来的现象是 SSXI 上有微弱波形但频率跑偏,或者压根没有波形,先查负载电容和 ESR 匹配。
PCIe 参考时钟是 PEXCLK+(21)/ PEXCLK-(22),100MHz 差分,由插槽或主板提供,手册写明允许 SSC,范围是 +300ppm 到 -2300ppm。做 Add-in Card 时这一对直接从金手指接过来,做 on-board 设计如果没有 SSC 时钟源,用本地 100MHz 差分振荡器也可以,但要确认整条链路两端都开或都关 SSC。
SSREXT(50)脚外接一颗 6.04K、1% 精度的电阻到地,这是 SuperSpeed PHY 的 bandgap 基准。这颗电阻必须 1%,必须靠近引脚放,地要干净。我见过用 5.1K 凑合的板子,结果是 SuperSpeed 设备全部降速到 USB 2.0 模式工作,查了两天才查到这颗电阻上。手册写得很清楚,只是没人愿意翻到那一行。
3.3 SPI Flash 的 DI/DO 方向:最容易接反的四根线
固件通路有两条:外挂 SPI Flash,或者把固件并进系统 BIOS(手册原文是「Option to integrate firmware in system BIOS」,on-board 设计常用后者,能省一颗料和一段布线)。
外挂方案的四根线在 33~36 脚,方向从芯片角度定义:
| 引脚 | 脚号 | 手册标注方向 | 接到 SPI Flash 的哪一脚 |
|---|---|---|---|
| SPICS# | 34 | O | 片选 CS# |
| SPISCLK | 35 | O | 时钟 SCLK |
| SPISI | 36 | O | Flash 的数据输入 DI / SI |
| SPISO | 33 | I | Flash 的数据输出 DO / SO |
这里就是血泪经验:SPISI 名字看着像「SPI In」,实际标注是 O,也就是这颗芯片的输出。命名参照的是 SPI Flash 那一侧(Slave In),不是主控这一侧。按字面理解把 SPISI 接到 Flash 的 SO 上,现象是 PCIe 侧枚举完全正常、lspci 能看到设备,但四个 USB 口一个都不工作,读 50h 偏移的固件版本寄存器返回 0x00000000。我第一次遇到时以为是 Flash 空片,换了两颗新的才发现是线序问题。
Flash 选型用 3.3V 的 SPI NOR,容量按固件大小留一倍余量。板上一定留烧录通路,我一般放一个 6 pin 排针(VCC / GND / CS# / CLK / DI / DO),手册提到的升级工具支持 DOS 和 Windows XP 到 8,实际产线用得多的是夹具直接夹 Flash 烧。走 BIOS 内嵌方案时,SPI 那组脚按参考设计做上拉/下拉处理,别悬空。
3.4 侧带信号:Power Enable、Over Current、SMI# 与 WAKE#
侧带信号是这颗芯片好用与否的分水岭,尤其是过流检测这一路。
USBHPE1#~4#(44 / 42 / 40 / 38)是开漏输出、低有效,用来使能外部的 VBUS 负载开关。开漏结构意味着你必须外接上拉,而且只能驱动低电平有效的使能脚。如果手上的负载开关是高电平 EN,中间要加一级反相,别硬接。
USBHOC1#~4#(43 / 41 / 39 / 37)是输入、低有效,接过流检测开关的 FLAG 输出。不用过流检测时,必须上拉到 3.3V 表示「无过流」。这一路悬空是最常见的翻车点:芯片读到的是不确定电平,很容易误判成过流,然后直接把端口关断,现象是插上设备一点反应没有,或者插上几秒后掉电。
PONRST#(31)是上电复位输入,需要一个 RC 延时或者专用复位芯片,保证 1.05V 和 3.3V 都稳定之后再释放。PEXRST#(19)是 PCIe 复位,从插槽来,低有效,拉低时芯片执行内部硬件复位。SMI#(18)是开漏输出,只在要支持 BIOS 下的 USB 键盘鼠标(Legacy USB)时才接到平台芯片组,不用的话按手册用 10K 上拉到 3.3V。PEXWAKE#(20)是唤醒输出,PEXCREQ#(30)是 CLKREQ#,接插槽对应信号。TESTEN(51)内部下拉,正常工作必须悬空,接高会进测试模式。
4. 从 QFN68 到回流焊:布板约束与上电复位链的硬约束
4.1 差分对走线:PCIe 与 SuperSpeed 的阻抗与等长
板子上有三类差分对,阻抗目标不一样,别一把尺子量到底。
PCIe 的 PEXTX0±(24 / 25)和 PEXRX0±(27 / 28)按 100Ω 差分控制。USB 3.0 的 SSTX / SSRX 四组按 90Ω 差分控制,USB 2.0 的 D+/D- 也是 90Ω。对内等长控制在 ±5mil 以内,对间不需要严格等长,TX 和 RX 是两条独立链路。
AC 耦合电容这一项经常被忽略:PCIe TX 侧和 USB 3.0 SSTX 侧都需要 100nF 耦合电容,常见做法是放在靠近连接器一侧,0402 封装,别用大封装引入寄生电感。换层时紧邻信号过孔放回流地过孔,差分对不要跨分割,跨了就是阻抗突变。
ESD 保护器件选低容值的,USB 3.0 那几对差分线上的 TVS 结电容要压到 0.5pF 以下。用了普通 USB 2.0 的 TVS,眼图会直接塌掉,现象是 SuperSpeed 设备时通时不通,或者只能跑在 USB 2.0 模式。这条在调试阶段极难定位,因为它不报错,只是降速。
4.2 QFN68 8x8 的散热焊盘与回流焊曲线
封装是 QFN 68、本体 8x8 mm 的绿色封装,引脚间距很细,布线前一定翻到手册第 7 章 Package Mechanical Specifications 核对实际尺寸和焊盘图形,别凭经验画。
中间那颗散热焊盘是重点。必须打过孔阵列到地平面,我一般用 3x3 个 0.3mm 过孔,塞孔或者背面开窗,帮助回流时排气。钢网开孔按 60%~70% 覆盖率分格开,别整片开满——整片开满的结果是回流时芯片被锡膏浮起来,侧面引脚虚焊,而且 QFN 侧面爬锡看不见,AOI 判不出来,只能靠 X-Ray。
回流焊曲线手册第 6 章有 General Reflow Profile Guidelines,实际操作要跟锡膏厂商给的曲线取交集。无铅 SAC305 的通用区间是:预热 150~180°C 保持 60~120 秒,恒温 180~200°C 保持 60~90 秒,217°C 以上回流 60~90 秒,峰值 245±5°C,升降温速率不超过 3°C/s。升温太快容易立碑和锡珠,降温太快焊点会脆。
| 阶段 | 温度区间 | 时间 | 速率 |
|---|---|---|---|
| 预热 | 150~180°C | 60~120 s | 1~3 °C/s |
| 恒温 | 180~200°C | 60~90 s | < 2 °C/s |
| 回流 | >217°C | 60~90 s | 峰值 245±5°C |
| 冷却 | 217°C 降至室温 | — | < 3 °C/s |
QFN 是湿敏器件,拆封后按包装标签的 MSL 等级控制车间暴露时间,超时的话 125°C 烘烤 24 小时再用。这一步省不得,受潮的板子过炉之后表现是「能跑,但偶尔抽风」,比直接坏掉更难查。
4.3 上电与复位顺序:PONRST#、PEXRST# 和那 100ms
上电顺序搞错,症状是「冷启动认不到,热重启就认到」,很多人会误判成 BIOS 问题。
正确顺序是:3.3V 挂起域先稳(VSUS33 常供)→ 1.05V 核心起来 → PONRST# 释放 → 主机释放 PEXRST# → PCIe 链路训练 → 枚举。PEXRST# 释放之前,100MHz 参考时钟必须已经稳定,这个时间窗按 PCIe CEM 规范留够 100ms。PONRST# 的 RC 延时给 10ms 到 100ms 都行,关键是确保 1.05V 已经进入稳压区。
还有一个隐蔽的坑:VSUS33 是常供的,1.05V 掉电时如果 3.3V 还在,IO 口可能有反灌电流。按参考设计加肖特基或者用带使能时序控制的电源芯片,别省这一颗。
5. 五条把板子救回来的排查记录:从不过枚举到降速到 USB2.0
5.1 上电与枚举阶段:先量电压,再看复位
坑一:插上完全没反应,lspci 里连设备都不出现。
现象是主板 BIOS 和设备管理器里都找不到任何新增 PCIe 设备,插槽供电正常。原因大概率在三条线上:1.05V 没起来、PEXRST# 被拉死、或者 100MHz 参考时钟没到芯片。解决路径是拿万用表先量 VDD 四个脚的 1.05V,再量 PONRST# 和 PEXRST# 的静态电平,最后用示波器看 PEXCLK± 有没有 100MHz 差分波形。我遇到过一块板子是 PEXRST# 被误接到 GND,芯片一直处于复位状态,查了半天才发现是一个测试点焊盘短了。
坑二:能枚举,四个口全不工作,固件版本读出来是 0。
现象是 lspci 能看到设备、BAR 也能分配,但插任何 USB 设备都没反应,用 setpci 读 50h 偏移返回 0x00000000。原因是 SPI Flash 的 DI/DO 接反,或者 Flash 是空片没烧固件。解决是把 SPISI 与 SPISO 对应到 Flash 的 DI 与 DO(注意方向按 3.3 节的表),重新烧录固件。判断顺序建议先读固件版本寄存器,再动烙铁,能省很多返工。
坑三:冷启动不认,重启一次就认。
现象很典型:断电再上电,设备消失;软重启之后一切正常。原因是 PONRST# 的 RC 延时不够,1.05V 还没稳就释放了复位,芯片内部状态机进了异常分支。解决是把 RC 时间常数加到 50ms 以上,或者换带电源监控的复位芯片。这类问题在实验室反复热重启时完全看不出来,只有拔电源才复现。
5.2 链路与传输阶段:降速、掉盘和过流误报
坑四:单口能跑满,插第二个盘就掉,或者全部降到 USB 2.0。
现象是单独插一块 SSD 能跑到 400 MB/s,插第二块时要么掉盘,要么两块都变成 40 MB/s 的 USB 2.0 速率。原因有两个方向:一是 VBUS 供电不足,四个口同时带大电流负载把 5V 拉塌;二是 USBHOC# 悬空导致误报过流,芯片主动把端口降级或关断。解决是先量每个口 VBUS 在满载时的实际电压(低于 4.75V 就要改负载开关或加大体电容),再确认 USBHOC1#~4# 都有 10K 上拉到 3.3V。供电和过流这两件事经常同时出问题,建议一起排查。
5.3 驱动与固件阶段:能认到但跑不起来
本文还有配套的精品资源,点击获取