3、原理图设计:最小系统电路、USB接口电路、加密芯片接口电路、电源电路、指示灯与按键电路、PCB设计要点

好,咱们进入原理图设计环节。说实话,很多工程师觉得画原理图就是照着参考设计抄一抄,没什么技术含量。但我个人觉得,原理图才是整个产品的灵魂。你想想看,PCB布局乱了可以重画,固件写崩了可以重烧,但原理图要是埋了坑,那后面全是泪。

这一章,我会把加密狗的几个核心电路模块拆开来讲。每个模块我都会结合自己踩过的坑,给你说清楚「为什么这么画」以及「千万别那么画」。

3.1 最小系统电路

最小系统,说白了就是让MCU能跑起来的最基本电路。包括电源、时钟、复位、下载接口。嗯,这里要注意,加密狗的主控我一般选STM32F0或GD32F103这类低成本Cortex-M0/M3芯片,性价比高,货源也稳。

3.1.1 时钟电路

我习惯用外部8MHz晶振,配合两个22pF负载电容。为什么不用内部RC?因为加密狗需要和主机做USB通信,内部RC的精度不够,容易导致USB枚举失败。

关键参数:

  • 晶振:8MHz,±10ppm
  • 负载电容:22pF(实际值根据PCB寄生电容微调)
  • 反馈电阻:1MΩ(并联在晶振两端)
  • 限流电阻:串在晶振输出脚,一般220Ω

我曾经在一个项目里偷懒,用了内部RC振荡器做USB HID设备。结果呢?十台电脑里有三台识别不出来,插拔好几次才能认到。后来老老实实换成外部晶振,问题全消。所以啊,该花的钱不能省。

3.1.2 复位电路

复位电路很简单,一个10kΩ上拉电阻加一个100nF电容到地。但有个细节——我建议在复位引脚上再并联一个0.1μF的瓷片电容,用来滤除高频噪声。有些MCU对复位引脚的噪声特别敏感,稍微有点干扰就复位了。

我的习惯:复位引脚上再串一个100Ω电阻,这样即使外部有ESD打进来,也能先扛一下。别问我怎么知道的,问就是烧过芯片。

3.1.3 下载接口

SWD接口,四根线:SWDIO、SWCLK、GND、VCC。我建议把SWO也引出来,方便调试时看printf输出。别省这个引脚,等你调试到怀疑人生的时候,就知道SWO有多香了。

// SWD接口引脚定义(以STM32F0为例)
// Pin1: VCC (3.3V)
// Pin2: SWDIO (PA13)
// Pin3: SWCLK (PA14)
// Pin4: GND
// Pin5: SWO (PB3)  // 可选,强烈建议引出

3.2 USB接口电路

USB接口是加密狗和主机通信的通道。这里面的坑,我数都数不过来。

3.2.1 USB D+/D- 差分对

USB是差分信号,D+和D-必须等长布线,误差控制在5mil以内。我见过有人把这两根线走成「蛇形」,结果信号质量一塌糊涂。其实不用那么夸张,只要保证它们走在一起,长度差不超过50mil就行。

注意:D+和D-上要加22Ω串联电阻,靠近MCU端放置。这个电阻用来抑制信号过冲,也能起到一定的ESD保护作用。我有个同事没加这个电阻,结果USB眼图测试直接挂掉。

3.2.2 USB电源管理

USB VBUS是5V,但MCU一般工作在3.3V。所以需要一颗LDO。我推荐AMS1117-3.3,便宜又好用。输入加10μF电解电容,输出加10μF+0.1μF去耦。

另外,VBUS上要加一个500mA自恢复保险丝。为什么?因为USB规范要求每个端口最大输出500mA,如果你的加密狗短路了,保险丝能保护主机USB口不被烧掉。我曾经见过一个客户的产品,没加保险丝,插到电脑上直接把南桥干废了……

3.2.3 ESD保护

USB接口是热插拔的,ESD风险极高。我建议在D+、D-、VBUS上各加一颗ESD保护二极管。型号用PESD5V0S1UB或类似的,结电容要小于5pF,否则会影响USB信号质量。

ESD保护电路布局要点:

  • ESD器件要尽量靠近USB座子放置
  • ESD器件的接地过孔要靠近器件本身
  • 走线要先经过ESD器件,再到MCU

3.3 加密芯片接口电路

加密芯片是加密狗的核心。我常用的是LKT系列或ATECC608A。接口一般是I2C或SPI。

3.3.1 I2C接口

I2C只需要两根线:SCL和SDA。上拉电阻用4.7kΩ,如果总线长度超过10cm,可以降到2.2kΩ。注意,加密芯片的I2C地址要避开MCU上其他I2C设备的地址。

// I2C连接示例
// MCU SCL --> 加密芯片 SCL
// MCU SDA --> 加密芯片 SDA
// 上拉电阻 R1=R2=4.7kΩ 到 VCC
// 加密芯片地址:0x6C (7位地址)

我遇到过一个问题:加密芯片的I2C引脚没有加滤波电容,结果在强电磁干扰环境下,通信偶尔会出错。后来我在SCL和SDA上各加了一个10pF电容到地,问题解决。这个电容不能太大,否则会拉长信号边沿,影响通信速率。

3.3.2 SPI接口

如果加密芯片支持SPI,我建议优先用SPI。速度比I2C快,而且抗干扰能力更强。SPI需要四根线:CS、SCLK、MOSI、MISO。

布线建议:SPI的四根线要尽量短,且远离电源和时钟等噪声源。CS线要加10kΩ上拉,防止浮空时误触发。

3.4 电源电路

加密狗的电源电路虽然简单,但却是最容易出问题的地方。

3.4.1 电源架构

USB 5V → LDO (3.3V) → MCU + 加密芯片 + 其他外设。LDO的输出电流要大于200mA,我一般选500mA的,留点余量。

器件 典型功耗 备注
MCU (STM32F0) 50mA 全速运行
加密芯片 10mA 待机<1mA
LED指示灯 10mA 每个LED
其他 20mA 预留

3.4.2 去耦电容

每个IC的电源引脚旁边都要放一个0.1μF瓷片电容,位置尽量靠近引脚。另外,PCB的电源入口处放一个10μF电解电容,用来吸收低频纹波。

千万别犯的错:去耦电容离IC引脚太远。我见过有人把电容放在PCB背面,结果走线绕了一大圈,根本起不到去耦作用。记住,电容离IC引脚的距离不要超过3mm。

3.5 指示灯与按键电路

指示灯用来显示加密狗的工作状态,按键用来触发一些操作(比如进入固件升级模式)。

3.5.1 LED指示灯

LED用GPIO驱动,串一个330Ω限流电阻。我习惯用两个LED:一个绿色(电源指示),一个红色(通信指示)。红色LED可以用PWM控制亮度,实现呼吸灯效果。

// LED驱动电路
// GPIO --> 330Ω --> LED --> GND
// GPIO高电平时LED亮
// 注意:GPIO的驱动能力一般只有20mA,不要直接驱动大功率LED

3.5.2 按键电路

按键用10kΩ上拉电阻,按下时接地。软件里要做去抖处理,一般延时10-20ms。我建议在按键两端并联一个100nF电容,硬件去抖,效果更好。

我的经验:按键的GPIO要配置成内部上拉输入,这样外部只需要一个按键到地,省一个电阻。但要注意,内部上拉的阻值一般是40kΩ左右,抗干扰能力不如外部10kΩ上拉。如果产品要过EMC测试,还是用外部上拉吧。

3.6 PCB设计要点

原理图画完了,PCB设计才是真正考验功力的时候。我总结几个关键点:

3.6.1 布局原则

  • 电源区与信号区分开:LDO和滤波电容放在一起,远离USB接口和加密芯片
  • USB差分对优先走线:D+和D-要等长、等距,走线宽度0.3mm,间距0.3mm
  • 加密芯片靠近MCU:I2C/SPI走线越短越好,不要超过5cm
  • 晶振靠近MCU:晶振和负载电容要放在MCU同一侧,走线尽量短

3.6.2 接地处理

我建议用完整的地平面,不要分割。USB座子的外壳地要单独走线,通过一个1MΩ电阻+100nF电容连接到主地,这样可以防止USB外壳上的静电直接打到主地上。

接地黄金法则:

  • 单点接地:模拟地和数字地在电源入口处单点连接
  • 地平面完整:不要在地平面上走信号线
  • 过孔要足够:每个地焊盘至少打2个过孔到地平面

3.6.3 散热考虑

加密狗一般功耗不大,但LDO在输入输出压差大时会有一定发热。我建议在LDO的散热焊盘上打多个过孔,连接到PCB背面的铜皮上,帮助散热。

好了,原理图设计这块就讲这么多。下一章咱们聊PCB Layout的具体操作,到时候我会拿一个实际项目来演示。记住,原理图设计时多想一步,后面就能少走十步弯路。