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引脚是写保护。接地就是允许写入。如果你想让数据只读,可以把这个引脚接高电平。不过在手环里,我们经常要写入步数、心率这些数据,所以直接接地就行。
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Ω),对电池很友好。
嗯,这里还要说一句。有些开发板喜欢用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跑起来。