把 USB 转串口塞进 Type-C 头后还要解决哪些硬件问题
把 USB 转串口塞进 Type-C 头后还要解决哪些硬件问题
很多 USB 转 TTL 小板的功能并不复杂,真正让它难做的是体积和边界条件:Type-C 公头的机械尺寸已经固定,PCB 又要足够薄,USB 供电、串口电平和焊接空间还不能互相牵制。TinySerial 把 CH343P、Type-C 夹板式公头和四针边缘焊盘放进一块小板里,适合给没有调试口的板子临时接入串口。
这篇文章按实际工程审查的顺序重新梳理它的电路和 PCB,并补上一套主机端串口自检方法。重点是把“看起来能工作”拆成几件可以分别核对的事情:USB 角色有没有配置对,5 V 和 3.3 V 有没有越过电平边界,板厚是否真的适合 Type-C 夹板,以及 TXD、RXD 在边缘焊盘上的方向是否明确。
先锁定工程版本
本文核对的是 TinySerial 项目版本 73fdbee1d46c4295b07d85cd2f14cfbd。原理图文档版本为 f7218c99c9524fcebd6bbd09bff4f0d7,PCB 文档版本为 75023ba6d64d4b28bb1a36ba137fe960。原理图和 PCB 图均从对应版本的嘉立创 EDA 工程重新导出,正文中的网络名、位号和焊盘顺序以这两个版本为准。

图 1 同一 EDA 版本的原理图总览,左侧是 Type-C 和 VBUS 入口,中间是 CH343P,右侧是可选状态灯和边缘焊盘。
Type-C 公头部分不只是把 USB 线剪短
Type-C 夹板式公头的关键是 CC 和 VBUS。图 2 中,CC1 通过 R1(5.1 kΩ)下拉到地,表明这块板作为受电端使用。没有这个下拉,主机可能不会把它当作一个有效的受电设备。这个项目采用的是固定方向的夹板式公头,另一组 CC/高速复用引脚做了不连接标记,装配时不能把它当成双向翻转的全功能 Type-C 接口。
VBUS 没有直接送进芯片,而是先经过 F1,型号标注为 ASMD0603-075。这颗器件放在连接器和后级 5 V 电源之间,作用是把插拔或后级故障的风险限制在入口一侧。具体保持电流、动作时间和替代料,需要按 BOM 与供应商数据再确认,不能仅凭型号后缀推算。

图 2 Type-C 连接器、CC1 下拉和 VBUS 串联保护器件。D+、D−从连接器直接引到 CH343P 的 USB 数据脚。
CH343P 的供电关系决定了串口电平
图 3 把芯片周边单独放大后,电源关系很清楚:VDD5 接 +5V,VIO 接 +3V3,V3 是芯片内部 3.3 V 相关电源脚,旁边配置了 1 µF、1 µF 和 0.1 µF 的去耦电容。这样处理的结果是 USB 侧使用 5 V 供电,UART 的 I/O 参考电平由 3.3 V 域决定。
这也是接线时最容易犯错的地方。四针焊盘虽然把 +5V 引了出来,但 TXD 和 RXD 是 3.3 V 电平,不能因为 USB 端是 5 V 就把它们接到 5 V MCU 的推挽输出上。目标板如果只有 5 V UART,应先确认其输入高电平门限和是否需要电平转换;GND 必须共地,不能只接 TXD/RXD。

图 3 CH343P 的 VDD5、VIO、V3、D+、D−、TXD 和 RXD 网络。电源脚旁的三颗去耦电容应靠近芯片摆放。
USB 数据线在原理图中以 D+、D− 成对出现。它们在板上距离很短,但仍应保持连续参考平面,避免被大面积分割或过孔切断回流路径。这个项目的定位是 USB 2.0 全速串口适配器,不能把“线路短”直接等同于已经完成阻抗、眼图或 EMI 验证。
状态灯和四针焊盘各自承担什么任务
TNOW 状态灯被放在一个蓝色虚线框内,旁边明确写着“不使用 TNOW 时可不焊接”。这意味着 LED1、R2 和 R3 是可选装配项,不影响最小串口功能。装配前仍要对照 CH343P 数据手册确认 TNOW 的有效电平和输出能力,再决定 LED 极性以及 4.7 kΩ、1 kΩ 两个电阻是否同时装上。
图 4 还给出了 EdgePad_4P 的顺序。以原理图从上到下的编号为准,1 到 4 依次是 +5V、TXD、RXD、GND。如果把这四个焊盘朝向目标板排线,TXD 应连接目标板的 RX,RXD 应连接目标板的 TX。建议第一次接线只焊 GND、TXD、RXD,确认枚举和收发正常后再接 +5V,避免目标板已经有独立电源时发生反向供电。

图 4 TNOW 指示灯可不装,四针边缘焊盘的网络顺序为 +5V、TXD、RXD、GND。
PCB 顶底面要和机械尺寸一起看
PCB 顶层图(图 5)可以看到 Type-C 金手指占据板子上端,CH343P 位于中部,底部留出边缘焊盘和装配空间。中央芯片及周围 0402/0603 器件的密度已经不适合手工随意补焊,返修时需要先确认烙铁或热风不会碰到连接器焊脚。

图 5 从 EDA 导出的 PCB 顶层,红色为顶层铜箔,紫色为板框。
底层图(图 6)保留了 TinySerial、CH343P 和方向箭头等丝印。它们不仅是装饰,量产或返修时可以用来确认板子的正反面和插入方向。底层丝印如果被焊盘或连接器遮住,建议在下单前重新检查可读性。

图 6 从 EDA 导出的 PCB 底层,蓝色为底层铜箔,绿色为底层丝印。
0.8 mm 板厚是下单前必须复核的参数
项目说明要求板厚为 0.8 mm,但 EDA 的 3D 预览默认显示为 1.6 mm。对于夹板式 Type-C 公头,这不是外观参数,而是能否插入和夹紧的机械约束。下单前至少做三件事:
- 在 PCB 工程的板材设置中明确改为 0.8 mm,并重新检查连接器焊盘、板边和开槽。
- 用实际连接器的机械图核对板厚公差、焊盘长度和板边倒角。
- 让打样文件、BOM 和装配备注使用同一个厚度值,避免工厂按默认 1.6 mm 生产。
如果这三项没有完成,3D 预览只能当作布局参考,不能当作“已经适配 Type-C 插头”的证明。
用主机脚本先做串口边界检查
下面的脚本只检查主机能否打开串口、发送固定字节并在回环时收到同样的数据。它不假设已经焊接到实体目标板,也不把一次成功打开串口当成速率、波形或电平测试。
#!/usr/bin/env python3
"""TinySerial 主机端最小自检,依赖 pyserial >= 3.5。"""
from __future__ import annotations
import argparse
import sys
import time
import serial
PATTERN = bytes((0x55, 0xAA, 0x00, 0xFF, 0x5A))
def check_port(port: str, baud: int, loopback: bool) -> int:
try:
with serial.Serial(port=port, baudrate=baud, timeout=0.5) as ser:
ser.reset_input_buffer()
ser.write(PATTERN)
ser.flush()
if not loopback:
print(f"已发送 {len(PATTERN)} 字节到 {port},未执行回读。")
return 0
deadline = time.monotonic() + 1.5
received = bytearray()
while len(received) < len(PATTERN) and time.monotonic() < deadline:
received.extend(ser.read(len(PATTERN) - len(received)))
if bytes(received) != PATTERN:
print(f"回读不一致:期望 {PATTERN.hex()},实际 {bytes(received).hex()}")
return 2
print("回环字节校验通过。")
return 0
except serial.SerialException as exc:
print(f"无法打开或访问 {port}: {exc}", file=sys.stderr)
return 1
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("port", help="例如 COM7 或 /dev/ttyUSB0")
parser.add_argument("--baud", type=int, default=115200)
parser.add_argument("--loopback", action="store_true", help="先将 TXD 与 RXD 短接")
args = parser.parse_args()
return check_port(args.port, args.baud, args.loopback)
if __name__ == "__main__":
raise SystemExit(main())
安装依赖后,先在没有目标板的情况下确认系统能识别串口:
python -m pip install "pyserial>=3.5"
python tinyserial_loopback.py COM7 --loopback
执行回环测试时必须把 TXD 和 RXD 短接;连着目标板时不要使用 --loopback,此时只能验证枚举、打开端口和目标板实际回包。本文已对脚本做 Python 语法编译检查,未进行实体焊接、示波器波形、温升和实际 6 Mbps 速率测试,因此这些结果不在本文承诺范围内。
接线与排错顺序
| 现象 | 优先检查 | 常见原因 |
|---|---|---|
| 电脑完全不枚举 | Type-C 插入方向、VBUS、GND、CC1 下拉 | 板厚不匹配、焊脚虚焊、CC1 未接地 |
| 能枚举但目标板无数据 | TXD/RXD 是否交叉、双方电平 | 把 TX 接 TX、目标板只接受 5 V 或未共地 |
| 回环失败 | 四针焊盘顺序、短接位置、串口占用 | 把 +5V 当成 TXD,或端口被其他程序打开 |
| 插入后板子反复复位 | 目标板已有电源仍接入 +5V | 发生反向供电或 USB 供电能力不足 |
| 状态灯不亮 | TNOW 极性、R2/R3 装配、数据手册有效电平 | 可选灯未焊、LED 极性反接、输出能力不足 |
复现边界
本文完成了同版本原理图、PCB 顶底面和关键网络的静态核对,并给出可直接复制的串口边界检查脚本。它解决的是“下单前和第一次接线时应该先检查什么”,不替代生产厂家的 DRC、连接器机械验证和实体电气测试。特别是 0.8 mm 板厚、Type-C 夹持可靠性、USB 信号完整性以及 CH343P 的实际速率,仍需要在真实板卡和目标环境中单独验证。
工程资料与许可
- 项目工程:TinySerial
- 立创开源项目版本:
73fdbee1d46c4295b07d85cd2f14cfbd - 原理图版本:
f7218c99c9524fcebd6bbd09bff4f0d7 - PCB 版本:
75023ba6d64d4b28bb1a36ba137fe960 - 项目声明许可:CERN Open Hardware License,项目说明标注为 CERN-OHL-P
- 本文图片:对应 EDA 版本重新导出的原理图和 PCB 顶底面,做了裁剪与尺寸优化;未用项目原文低清配图替代。
- 本文验证范围:网络与位号静态核对、Python 脚本语法检查;未做实体焊接和仪器实测。
技术交流,欢迎关注微信公众号:美男子玩编程。




