4、手环硬件电路设计:EEPROM在手环中的电路连接、上拉电阻选择、去耦电容布局

好,咱们这一章来聊聊硬件电路设计。说实话,很多做软件的朋友觉得硬件就是“连连看”,把引脚对上就行了。其实没那么简单。EEPROM虽然是个小芯片,但电路设计搞不好,数据读写就会出各种怪问题。我当年就吃过这个亏,后面会跟大家细说。

4.1 EEPROM在手环中的电路连接

先看最基本的连接方式。EEPROM通过I2C接口跟主控芯片通信。I2C只需要两根线:SCL(时钟线)和SDA(数据线)。

在手环这种小体积设备里,我习惯用AT24C02或者AT24C04这类小容量EEPROM。它们都是8个引脚,封装小,功耗低。具体引脚连接如下:

EEPROM引脚 连接对象 说明
A0/A1/A2 GND 地址选择,接地表示器件地址为0x50
WP GND 写保护,接地允许写入
SCL 主控I2C时钟引脚 接上拉电阻到VCC
SDA 主控I2C数据引脚 接上拉电阻到VCC
VCC 3.3V电源 手环一般用3.3V供电
GND 公共地

这里有个小细节:A0/A1/A2三个地址引脚,我全部接地。这样EEPROM的I2C地址就是0x50(7位地址)。如果你需要挂多个I2C设备,可以通过改变这些引脚的接法来分配不同地址。

WP引脚是写保护。接地就是允许写入。如果你想让数据只读,可以把这个引脚接高电平。不过在手环里,我们经常要写入步数、心率这些数据,所以直接接地就行。

注意: 我曾经遇到过一个坑——WP引脚悬空。有些芯片内部没有下拉电阻,WP悬空时电平不确定,导致写入时灵时不灵。排查了两天才发现是这个问题。所以,WP引脚一定要明确接高或接低,别悬空。

4.2 上拉电阻选择

I2C总线是开漏输出,所以SCL和SDA必须接上拉电阻。这个电阻选多大,其实有讲究。

上拉电阻的值决定了两个东西:

  • 信号上升时间——电阻越小,上升越快
  • 功耗——电阻越小,静态电流越大

在手环这种电池供电的设备里,功耗是头等大事。我个人习惯选4.7kΩ到10kΩ之间的电阻。具体怎么选?我给大家一个参考:

总线电容 推荐上拉电阻 适用场景
小于100pF 10kΩ 手环内部短距离走线
100pF~200pF 4.7kΩ 走线稍长或挂多个设备
大于200pF 2.2kΩ 长距离或高速模式

手环里EEPROM离主控芯片很近,走线也就几厘米。总线电容很小,用10kΩ完全够用。而且10kΩ的静态电流只有0.33mA(3.3V/10kΩ),对电池很友好。

小技巧: 如果你不确定该选多大,可以先焊10kΩ。如果发现I2C通信偶尔失败,再换成4.7kΩ。我一般会在PCB上预留两个电阻位,方便调试时更换。

嗯,这里还要说一句。有些开发板喜欢用1kΩ甚至更小的上拉电阻。那是为了兼容各种恶劣环境。但在手环这种受控环境里,没必要。电阻太小,功耗上去了,电池扛不住。

4.3 去耦电容布局

去耦电容,说白了就是给芯片“稳压”用的。EEPROM在写入数据时,瞬间电流会变大。如果没有去耦电容,电源电压可能会掉下来,导致写入失败。

我见过不少新手,原理图上画了电容,PCB布局时却放得老远。这样效果大打折扣。去耦电容的核心原则就一句话:离芯片电源引脚越近越好

具体到EEPROM,我建议这样做:

  • 主电容:100nF(0.1μF)——放在VCC和GND之间,距离引脚不超过2mm
  • 备用电容:10μF——放在PCB板级电源入口处,做整体滤波

为什么选100nF?因为100nF的谐振频率在几十MHz,正好覆盖EEPROM工作时的噪声频段。10μF是电解或钽电容,负责滤除低频纹波。

布局要点:
  • 100nF电容要放在EEPROM的VCC引脚旁边,走线越短越好
  • 电容的接地端要直接打过孔到地平面,不要绕路
  • 如果PCB空间允许,可以在VCC引脚两侧各放一个100nF

你想想看,如果电容放得远,走线长了就有寄生电感。高频噪声来了,电容根本来不及响应。那这个电容就等于白放了。

我记得有一次做手环原型,EEPROM写入数据总是出错。用示波器一量,VCC引脚上有毛刺,幅度有200mV。后来把100nF电容从5mm外挪到紧贴引脚,毛刺直接降到30mV以下,问题就解决了。所以,布局真的不是小事。

4.4 完整的电路原理图

把上面说的综合起来,一个典型的EEPROM电路就是这样的:

// EEPROM AT24C02 在手环中的电路连接

// 主控芯片(如nRF52832)
// I2C_SCL -> P0.27
// I2C_SDA -> P0.26

// EEPROM部分
// Pin 1 (A0) -> GND
// Pin 2 (A1) -> GND  
// Pin 3 (A2) -> GND
// Pin 4 (GND) -> GND
// Pin 5 (SDA) -> 上拉电阻 -> VCC (3.3V)
// Pin 6 (SCL) -> 上拉电阻 -> VCC (3.3V)
// Pin 7 (WP)  -> GND
// Pin 8 (VCC) -> VCC (3.3V)

// 上拉电阻:R1 = R2 = 10kΩ (0402封装)
// 去耦电容:C1 = 100nF (0402封装),紧贴Pin 8放置
// 板级电容:C2 = 10μF (0805封装),放在电源入口

这个电路看起来简单,但每个元件的位置和取值都有讲究。你照着这个做,基本不会出问题。

再次提醒: 不要为了省空间把去耦电容省掉。EEPROM写入时的瞬态电流可以达到几毫安,没有电容稳压,数据写入可靠性会大打折扣。尤其是手环这种移动设备,电池供电本身就有纹波,更需要去耦电容来稳住电压。

好了,这一章的内容就这些。EEPROM的电路设计,说白了就是三件事:接对线、选对电阻、放好电容。看起来简单,但每个细节都关系到数据读写的稳定性。下一章咱们开始写代码,真正让EEPROM跑起来。