第2章:硬件选型与架构

好,咱们直接进入正题。做POS机上的NFC读卡器,硬件选型是第一步,也是最容易踩坑的一步。我这些年折腾下来,发现很多问题其实在选型阶段就埋下了。

2.1 主控芯片选型:STM32 vs ESP32

主控芯片是整个系统的「大脑」。选哪个?我个人的习惯是先看需求,再看成本,最后看团队熟悉度。

STM32系列,说实话,是嵌入式领域的「老黄牛」。稳定、生态好、资料多。我在做金融级POS机项目时,几乎清一色用STM32。为什么?因为它的CAN、SPI、I2C接口非常成熟,而且有硬件加密模块(CRYP)。

ESP32系列,这两年很火。自带Wi-Fi和蓝牙,价格还便宜。但我要泼点冷水——它的实时性不如STM32。你想想看,NFC读卡对时序要求很苛刻,ESP32的FreeRTOS调度偶尔会「抽风」。我曾经在一个项目中,ESP32读卡偶尔丢数据,查了三天,最后发现是Wi-Fi中断优先级太高,把NFC的中断给抢了。

对比项 STM32F4/F7 ESP32
主频 168-216 MHz 240 MHz
实时性 优秀(硬件中断响应<100ns) 一般(受Wi-Fi/蓝牙影响)
NFC接口 SPI/I2C 硬件支持 SPI 需软件模拟
成本 ¥15-30 ¥8-15
功耗 低(~50mA) 较高(~80mA)
我的建议:如果做量产产品,尤其是过金融认证(PCI PTS)的,老老实实选STM32。如果是做原型验证或者个人项目,ESP32完全够用,开发效率还高。

2.2 NFC控制器芯片选型:PN532 vs PN7150

NFC控制器是读卡器的「心脏」。市面上主流的就是NXP的PN532和PN7150。嗯,这里要注意,这两款芯片虽然都是NXP家的,但定位完全不同。

PN532,老将了。我2016年第一次做NFC项目用的就是它。支持SPI、I2C、UART三种接口,兼容性好。但有个硬伤——它需要外部MCU做大量的协议处理。说白了,它就是个「收发器」,你得自己写卡类型识别、防冲突、数据交换这些逻辑。

PN7150,算是升级版。内置了NFC协议栈,支持ISO/IEC 14443 A/B、Felica、MIFARE等主流卡型。你只需要通过I2C发几条AT指令,它就能自动完成读卡流程。我在做一款智能门锁时用过PN7150,开发周期缩短了至少两周。

关键区别:

  • PN532:需要MCU处理协议,适合有NFC开发经验的团队
  • PN7150:内置协议栈,适合快速开发,但成本高约¥10

我个人更倾向PN7150。为什么?因为现在的POS机对读卡速度要求越来越高。PN7150的读卡延迟能做到50ms以内,而PN532通常在100ms以上。你想想看,顾客刷卡时等半秒和等一秒,体验差别很大。

避坑指南:我曾经在PN532上栽过跟头——它的SPI时钟频率不能超过5MHz,否则数据会错位。当时我为了追求速度,设成了10MHz,结果读卡成功率直接掉到60%。查了两天才发现是时序问题。

2.3 天线设计要点

天线设计,嗯,这是整个硬件里最「玄学」的部分。我见过太多人,芯片选对了,电路画对了,结果天线没调好,读卡距离只有1cm。

天线的基本参数:

  • 工作频率:13.56 MHz(这是NFC的标准频率)
  • 电感量:通常1-2 μH
  • Q值:30-50(太高会窄带,太低会灵敏度不够)
  • 匝数:3-5圈(取决于PCB板层和铜厚)

我个人的设计习惯是:先用NXP的AN11551应用笔记里的公式算一遍,再用仿真软件(比如ADS)微调。但说实话,最终还是要靠实际测试。我记得有一次,仿真结果完美,但实际读卡距离只有2cm。后来发现是PCB的地平面挖空不够,天线磁场被地平面「吸」走了。

天线布局要点:
  1. 天线周围3mm内不要铺铜,尤其是地铜
  2. 天线下方不要走高速信号线(比如SPI时钟)
  3. 匹配电路(LC网络)尽量靠近天线馈点
  4. 天线走线宽度建议0.5-1mm,线间距不小于0.3mm

还有一个容易被忽略的点——天线匹配。PN532和PN7150内部都有可调电容,但外部还是要加串联电容和并联电容。我一般先用网络分析仪测天线的谐振点,然后调整匹配电容,让谐振点落在13.56 MHz ± 200 kHz范围内。

2.4 电源管理方案

电源管理,说白了就是「喂饱」各个芯片。NFC读卡器有个特点——发射功率大,瞬间电流高。PN7150在发射时,峰值电流能到200mA。如果电源纹波太大,读卡就会不稳定。

我的电源架构:

  • 主电源:5V/2A(来自USB或电池)
  • MCU供电:3.3V/500mA(用LDO,比如AMS1117-3.3)
  • NFC供电:3.3V/500mA(用单独的LDO,避免和MCU共用)
  • 天线驱动:5V/1A(直接从主电源取,加滤波电容)

关键点:NFC芯片的供电一定要和MCU分开。我曾经为了省一个LDO,把PN7150和STM32共用一个3.3V电源。结果读卡时,PN7150的电流波动导致STM32复位。嗯,从那以后我再也不省这个钱了。

滤波电容的选择也有讲究。我习惯在NFC芯片的电源引脚附近放三颗电容:100μF(电解)、10μF(陶瓷)、0.1μF(陶瓷)。100μF负责低频纹波,10μF负责中频,0.1μF负责高频噪声。这个组合我用了很多年,没出过问题。

最后提一下功耗。如果POS机是电池供电的,那就要考虑休眠模式。PN7150有低功耗模式,电流可以降到10μA。但要注意,唤醒时需要重新初始化NFC协议栈,大概要花20ms。这个延迟在刷卡场景下可以接受,但如果是非接触式支付,可能会影响用户体验。

好了,硬件选型这块就聊这么多。下一章咱们开始讲电路原理图设计,到时候我会把每个引脚的连接方式都掰开揉碎了讲清楚。