USB FIFO 接上 FPGA 后,电平和保护怎么做稳

2026-11-083
AI 快速预览详细 收起
本文详细介绍了如何在 USB FIFO 和 FPGA 连接时确保电平稳定和保护措施。通过分析 ProtoBlade V1.0 工程的关键网络,重新计算了 VIO 的下限和 USB 输入保护的电流边界。文章提供了具体的硬件审查、计算和复核方法,帮助开发者避免常见故障。重点包括 VIO 的实际下限应为 1.65V,固件不应将 0.5V 输出直接作为可用 VIO。此外,还提供了自检命令和 PCB 布局建议,以确保项目的成功实施。

USB FIFO 接上 FPGA 后,电平和保护怎么做稳

做多协议调试器时,真正难的是把 USB 数据通道、FPGA 多电源域和外部可变电平接口放在同一块板上,还要让故障可以定位。本文选取立创开源广场的 ProtoBlade V1.0 工程,按同一版嘉立创 EDA 原理图与 PCB 重新核对关键网络,再用器件数据手册重算两个容易被忽略的边界:VIO 能不能真的降到 0.5V,以及 USB 输入保护能承受多大电流。

工程页标注的协议是 GPL 3.0,评论区置顶给出了 GlasgowEmbedded/glasgow 作为上游出处。下面的内容是对公开工程的独立硬件审查、计算和复核,不把第三方工程、上游代码或原图宣称为全部自研;复现时应同时遵守相应许可证。

先看版本和结构

本文使用工程 ID 0535d7dc2545451fac97e2748c5a8f28 的 V1.0 版本,原理图图纸日期为 2025-09-16。整机由 CY7C68013A USB FIFO/8051、iCE40HX8K FPGA、两组 8 路 SN74LVC1T45 电平转换、可调 VIO、电源监测和接口保护组成。FPGA 侧可把同一组引脚复用成 SPI、I2C、UART、JTAG、GPIO、PWM 或逻辑分析通道,USB FIFO 负责把高速数据搬到电脑。

P1 电源、USB 和 FPGA 原理图

图 1 P1 重新从 EDA 编辑器导出的高清原理图。可以沿着 VBUS → TPD3S014 → +5V、+5V → +3V3/+1V2 和 CY7C68013A ↔ iCE40HX8K 三条路径追线。

P2 FIFO 和 FPGA 接口原理图

图 2 P2 的 FIFO、标志信号和 FPGA 连接。本文只据图核对连接关系,没有把“480Mbps”当成实测吞吐量。

USB 输入先看两个电流边界

Type-C 的 CC1、CC2 各接 5.1kΩ 下拉,角色上是设备端 Rd;D+/D− 进入 CY7C68013A,I2C 的 SDA、SCL 则用 2.2kΩ 上拉到 +3V3。P1 在 VBUS 后放了 TPD3S014,这个器件同时承担受限电流开关和 USB 数据线 ESD 保护。

TI 数据手册给出的 TPD3S014 输入工作范围是 4.5–5.5V,连续输出电流为 0.5A,典型限流点约 0.85A。它适合给这块调试器做受限的 5V 输入通道,但不能把它当成 USB 3.x 的 900mA 供电开关。更稳妥的启动顺序是先确认 +5V 已建立,再打开 VIO 和外部端口;发生短路时只把它当作保护动作,不能当成系统正常供电能力。

这里还有一个容易漏掉的热设计问题。若 USB 输入为 5V,而 +3V3 和 +1V2 都由线性稳压器得到,稳压器的耗散取决于 FPGA、FIFO 和外部负载的实际电流。原理图给了测试点和监测器件,复现时应在最大协议负载下记录 VBUS、+3V3、+1V2 和芯片温度,而不是只看空载能否枚举。

VIO 的 0.5V 下限需要收紧

P4 是这块板最值得复核的部分。每个 SN74LVC1T45DCKR 的 A 侧接 +3V3,B 侧接 VIO,DIR 由 FPGA 控制,A/B 两端各有 100nF 去耦;8 路信号组前面还放了 33Ω 串联电阻,用来减小边沿过冲和连接器反射。

P4 可调 VIO、ESD 和 INA233 原理图

图 3 P4 的电平转换、TVS、DAC、LDO 和电源监测。

项目说明把 VIO 描述成 0.5–3.6V 可调,但 SN74LVC1T45 的 VCCA、VCCB 推荐工作范围都是 1.65–5.5V。也就是说,DAC 和 LDO 即使能把电压调到 0.5V,电平转换器也已经离开推荐工作区。对 V1.0 来说,使用这颗转换器时应把固件允许范围收紧为 1.65–3.6V;若确实要支持 1.2V 逻辑,应更换支持该电压的转换器并重新核对 FPGA 的 VCCIO、输入阈值和时序。

VIO 的控制链是 DAC081C081 → R27 49.9kΩ → TPS73101 FB。DAC081C081 由 +3V3 供电,数据手册给出理想输出关系 V_DAC = V_REF × D / 256,其供电范围是 2.7–5.5V;TPS73101 是 1.2–5.5V、150mA 的可调 LDO。启动时 DAC 输出会复位到 0V,因此固件不应在上电后直接使能外部方向。建议按下面的顺序做软件保护:

  1. 先写入受限的 DAC 码值,并等待 VIO 稳定。
  2. 读取 INA233 或板上测试点确认 VIO 落在目标范围。
  3. 最后改变 DIR 和协议状态,避免外部设备在错误电平下被驱动。

下面的小工具是本文新增的静态检查代码,用来在生成配置前拒绝越界值;它不是项目附件,也不替代实测。

VIO_MIN = 1.65       # SN74LVC1T45 推荐下限
VIO_MAX = 3.60       # 本工程的目标上限

def vio_code(vref: float, code: int) -> float:
if not 0 <= code <= 255:
raise ValueError("DAC code must be 0..255")
v = vref * code / 256.0
if not VIO_MIN <= v <= VIO_MAX:
raise ValueError(f"VIO={v:.3f} V is outside the translator window")
return v

def ina233_current(shunt_v: float, shunt_ohm: float = 0.15) -> float:
return shunt_v / shunt_ohm

33Ω、TVS 和 INA233 是三层边界

P4 的 A、B 两组接口各放了 SP3012-06UTG 阵列,靠近连接器的走线再经过 33Ω 串联电阻。三者作用不同:TVS 负责把 ESD 电流导向地,33Ω 负责限制边沿电流和减小振铃,SN74LVC1T45 的输出能力决定正常驱动电流。33Ω 不是短路保护,不能因为有串联电阻就允许热插拔或把两组 VIO 直接短接。

同一页的 INA233 用来监测 VBUS。原理图把分流电阻标成 0.15Ω,并在 IN+、IN− 旁放 4.7Ω 和 100nF 差分滤波。INA233 的分流输入范围是 ±81.92mV,所以理论满量程电流为:

81.92mV ÷ 0.15Ω = 546.1mA

在 0.5A 时分流电阻耗散为 0.5² × 0.15 = 37.5mW。这两个数可以直接写进上位机的告警阈值,但仍需结合电阻精度、布局寄生和采样平均次数校准,不能把满量程当成推荐持续电流。

P3 信号和测试记录

图 4 P3 保存了与信号完整性相关的测试记录。它能帮助定位边沿和回流问题,但图片本身不能替代当前板卡的实测条件说明。

用自检命令把问题拆开

项目给出了可复核的命令链。第一次上电先做 LED、引脚回环和电源电路自检,再进入协议测试:

ProtoBlade run selftest leds
ProtoBlade run selftest pins-loop
ProtoBlade run selftest voltage
ProtoBlade run uart --tx A1 --rx A0 -V 3.3 -b 115200 tty
protoblade run i2c-initiator --scl A0 --sda A1 --pulls -b 100 -V 3.3 scan
protoblade run spi-controller --sck A0 --cs A3 --copi A1 --cipo A2 -f 100 -V 3.3 01 02 03 04

这些命令分别覆盖 LED、引脚回环、板载 DAC/LDO、UART、I2C 和 SPI。它们的价值在于把故障分层:selftest voltage 失败时先查 VIO 和反馈网络,协议命令失败时再查 DIR、33Ω 电阻和连接器。逻辑分析仪示例还要求输入不超过 3.3V;在没有外部衰减或电平转换时不要把 5V 方波直接接入。

PCB 上要重点复核什么

PCB 顶层

图 5 同一 V1.0 工程导出的 PCB 顶层。USB、FIFO、FPGA 和两组接口的位置关系清晰可见。

PCB 底层

图 6 同一 V1.0 工程导出的 PCB 底层。复现时重点检查 TVS 到地的回流、FPGA 电源过孔和连接器旁的地参考。

下单前建议逐项确认:

  • USB D+/D−、FIFO 时钟和 FPGA 时钟附近不要被跨分割地切断,差分/高速线按工程文件标出的阻抗要求处理。
  • TVS 的地回路尽量短,不能让 ESD 电流穿过 FPGA 或电平转换器的公共地。
  • +1V2、+3V3 和 VIO 的去耦电容贴近对应引脚;TPS73101 的反馈线避开高 di/dt 走线。
  • 外部端口第一次连接时固定 VIO、确认 DIR,再插入目标设备;项目页面已经明确禁止带电热插拔。

复现边界和结论

公开工程的 Windows CLI 流程依赖 oss-cad-suite、MSYS2、GTKWave 和 Zadig。本文只复核了同一版本的 EDA 图、器件数据手册和项目页给出的命令,没有焊接实物,也没有把项目页中的波形截图重新标成本文实测结果。真正复现时,先用低压、限流电源和无源回环验证,再逐步接入外设。

这块板最有价值的地方不是“支持很多协议”这句宣传,而是把 USB FIFO、FPGA、多电压域和可保护的外部接口放进一个能追线、能自检的工程。最需要修正的地方也很明确:SN74LVC1T45 的 VCCB 下限是 1.65V,固件不能把 DAC 的 0.5V 输出直接当成可用 VIO。 把这个边界写进配置检查,再配合 INA233 电流告警和分层自检,复现时才不会把一次错误电平变成一组损坏的外设。

资料与许可

技术交流,欢迎关注微信公众号:美男子玩编程。

创作许可协议

本项目采用 CC BY(署名) 进行许可。

评论(0)
- 没有更多了 -