第二讲:电子标签硬件平台——主控芯片选型与外设接口详解
大家好,欢迎来到第二讲。今天咱们聊聊电子标签的硬件平台。说实话,这块内容我琢磨了很久才敢动笔。为什么?因为硬件选型一旦定下来,后面所有软件工作都得围着它转。选错了,后面全是坑。
我个人习惯,做任何嵌入式项目,第一步不是写代码,而是把芯片数据手册翻烂。电子标签这东西,看着简单,其实门道不少。咱们今天就从主控芯片选型开始,一步步把硬件平台搭起来。
2.1 主控芯片选型:STM32 vs ESP32
先说说这两款芯片。STM32和ESP32,我估计大家都听过。但具体到电子标签场景,怎么选?
STM32系列,我用了快十年。它的优势在于稳定、功耗低、外设丰富。特别是STM32L0和L4系列,专门为低功耗设计。我在一个医疗标签项目里用过STM32L051,待机电流能做到1μA以下。嗯,这个数据很关键。
ESP32系列,自带Wi-Fi和蓝牙。如果你需要无线通信,它确实方便。但代价是什么?功耗高。ESP32在深度睡眠模式下,电流大概在5μA左右,比STM32高不少。而且它的ADC精度一般,驱动LCD时偶尔会有闪烁问题。
我建议这样选:
- 纯电子标签(无无线通信):选STM32L0系列,功耗最低
- 需要蓝牙连接手机:选ESP32,省一个蓝牙模块
- 需要低功耗+无线:选STM32WB系列,它内置蓝牙
核心观点:电子标签的主控芯片,功耗是第一优先级。别为了省几块钱选了个高功耗芯片,后面电池撑不住,产品就废了。
我曾经在一个项目中,为了省成本选了某国产M0芯片。结果呢?待机电流标称2μA,实际测出来8μA。电池容量算得好好的,实际寿命缩水了三分之一。从那以后,我选芯片一定先看实测数据,不看宣传。
2.2 外设接口:I2C、SPI、UART怎么分配
电子标签的外设不多,但每个接口都有讲究。咱们一个一个说。
2.2.1 I2C接口
I2C主要用于连接传感器和存储芯片。比如温湿度传感器、EEPROM、加速度计。它的好处是只需要两根线(SCL、SDA),节省IO口。
但I2C有个坑:速度慢。标准模式100kHz,快速模式400kHz。如果你要刷屏,千万别用I2C驱动LCD,会卡到你怀疑人生。
我一般这样分配:
- I2C1:接温湿度传感器(如SHT30)
- I2C2:接EEPROM(存储配置参数)
小技巧:I2C上拉电阻选4.7kΩ比较通用。如果总线电容大,可以换成2.2kΩ。我曾经遇到过I2C通信偶尔失败,查了半天发现是上拉电阻太大,信号上升沿太慢。
2.2.2 SPI接口
SPI是电子标签的“主力接口”。为什么?因为电子墨水屏(E-Ink)基本都是SPI驱动。SPI速度快,全双工,适合传输大量数据。
电子墨水屏的刷新,说白了就是往屏幕里灌数据。一张200x200的黑白图片,大概需要5KB数据。用SPI的话,几毫秒就传完了。如果用I2C,得几十毫秒。
我建议这样分配:
- SPI1:接电子墨水屏(主设备)
- SPI2:接Flash芯片(存储字库或图片)
注意:SPI的时钟频率不要设太高。电子墨水屏一般支持2-4MHz。我试过设到8MHz,结果屏幕显示花屏。后来查手册才发现,屏幕的SPI时序要求比较严格。
2.2.3 UART接口
UART主要用于调试和通信。调试嘛,就是打印日志。通信的话,可以接蓝牙模块或4G模块。
我个人习惯,每个项目至少留一个UART口做调试。别省这个口,否则出了问题你连log都看不到,那才叫抓瞎。
UART的波特率,我一般用115200。够快,也够稳定。如果接蓝牙模块,注意蓝牙的波特率可能不同,需要先配置好。
注意:UART的TX和RX不要接反。我见过不止一个新手,把TX接TX,RX接RX,结果死活通信不上。正确的接法是:TX接对方的RX,RX接对方的TX。
2.3 显示驱动:电子墨水屏的驱动要点
电子墨水屏和普通LCD不一样。它刷新一次需要好几步:
- 发送刷新命令
- 传输图像数据
- 等待刷新完成(约1-3秒)
- 进入睡眠模式
驱动电子墨水屏,我总结了几条经验:
- 不要频繁刷新:电子墨水屏刷新一次耗电约10-30mJ。频繁刷新,电池很快没电。
- 局部刷新:如果只改一小块内容,用局部刷新命令,省电又省时间。
- 刷新完立刻睡眠:屏幕不刷新时,让它进入睡眠模式。电流从几毫安降到几微安。
我曾经做过一个货架标签项目,客户要求每5秒刷新一次。我说不行,电池撑不住。后来改成“内容变化时才刷新”,电池寿命从3天延长到了6个月。你想想看,这个差别有多大。
2.4 功耗管理:从硬件到软件的协同
功耗管理是电子标签的核心。硬件选型再好,软件写不好,功耗照样高。
硬件层面的功耗管理:
- 选择低功耗LDO(如XC6206系列,静态电流1μA)
- 电源路径设计:主控、屏幕、传感器分别供电,不用时关掉
- 使用MOS管控制外设电源
软件层面的功耗管理:
- 主控进入Stop模式或Standby模式
- 外设不用时关闭时钟
- 使用RTC定时唤醒,而不是一直跑着
我一般这样设计功耗策略:
| 工作状态 | 电流消耗 | 说明 |
|---|---|---|
| 运行模式(刷屏) | 20-50mA | 持续1-3秒 |
| 空闲模式(等待) | 1-5mA | 保持时钟运行 |
| 睡眠模式(待机) | 2-10μA | RTC运行,可唤醒 |
| 深度睡眠 | 0.5-2μA | 仅保留唤醒引脚 |
你看这个表格,睡眠模式和运行模式差了上万倍。所以,让系统尽可能待在睡眠模式,是省电的关键。
核心原则:能睡就睡,醒了赶紧干完活再睡。别让芯片闲着没事干还在跑。
我记得有一次,客户说他们的电子标签电池只能用两个月。我一看代码,发现主控每100ms醒来一次,检查有没有按键按下。我说你改成外部中断唤醒,平时深度睡眠。改完之后,电池用了两年。嗯,这就是软件优化的力量。
2.5 本章小结
好了,这一讲的内容就这些。咱们总结一下:
- 主控芯片选型:STM32L0适合纯标签,ESP32适合带无线的
- 外设接口:I2C接传感器,SPI接屏幕,UART接调试
- 显示驱动:电子墨水屏要局部刷新,刷完立刻睡眠
- 功耗管理:硬件选低功耗器件,软件让芯片多睡觉
下一讲,咱们开始动手搭建开发环境,把RTOS移植到STM32上。到时候我会手把手教大家配置工程、编写启动代码。敬请期待。
如果你在选型或驱动方面有疑问,欢迎在评论区留言。我看到了会回复。咱们下期见。
公众号:蓝海资料掘金营,微信deep3321