Showing Posts From
Nfc
- 22 Jun, 2026
一文入门NFC技术
NFC(Near Field Communication,近场通信)是在当今的消费类电子产品中应用非常广泛的高频RFID(射频识别)技术。本文对于该技术相关的基础理论与应用知识进行了较为充分的总结,借此建立对NFC技术的基础性认识。 NFC技术基础及其与RFID的差异比较 NFC 技术规范运行在全球免授权的 13.56 MHz 频段。与蓝牙或Wi-Fi通过主动发射电磁波(远场辐射)来进行通信的技术不同,NFC 采用的是电感耦合(近场原理)方式来交换信息。 > 所谓的电感耦合,可以想象成一个空心变压器:在两者通信过程中,读写器(主设备)的天线线圈产生交变磁场,当标签(从设备)靠近时,其天线线圈会感应出电流,从而不仅能传输数据,甚至还能为无源标签供电。 !image.png 如果只看以上的这个电感耦合的工作原理的话,就会发现NFC技术与普通的RFID,以及汽车电子领域的无钥匙系统RKE/PEPS等系统所采用的通信技术如出一辙。那么具体而言,NFC 在应用中又有哪些比较特殊的地方呢? 可通过以下表格来对三者的技术规格和应用领域进行对比: !f85c44ab-817f-4e3c-ba85-3c6c3e291820.png 具体来讲,区别主要是: - NFC 只工作在13.56MHz频段,而另外两者都有多个频段可选。 - NFC 的通信距离定位小于 10cm(实际产品中为了过认证,通常只做到 1~3 厘米),这种极短的通信距离是刻意为之的物理级安全屏障,它确保每一次数据交换,都必然伴随着用户主观的物理触碰(Tap)动作,可防止被远距离恶意窃听。而传统RFID和汽车PEPS系统的通信距离一般都有十几米乃至几十米。 - NFC 的工作模式更为灵活,可以支持三种工作模式和通信身份转换,而传统的RFID和汽车PEPS系统都是典型的固定读写器与标签(即发射器与接收器)之间的工作关系。 - NFC 的核心应用价值在于可以传输富文本数据,而另外两者的标签里通常只存一串极其简单的 UID(唯一识别码)或几段加密的密钥,只能用于身份比对。 NFC系统架构及其工作模式 在消费电子产品的 PCB 级设计中,一个完整的 NFC 射频前端系统通常包含以下三个核心部分: !image.png - NFC Controller (NFC 控制器 IC): 它内部集成了射频收发器(Transceiver)、调制解调器以及协议处理微控制器。该控制器模块通常通过 I2C 或 SPI 接口与主控(MCU/SOC)通信。高端的 NFC 控制器内部会自带固件,直接输出标准的 NCI(NFC Controller Interface)指令集,这样可以极大减轻主控的底层驱动开发压力。 - EMC 滤波与天线匹配网络 (Matching Network): NFC 芯片输出的信号是方波,包含有大量谐波。因此在硬件调试过程中,需要在芯片 Tx/Rx 引脚和天线之间设计 LC 滤波电路(滤除 13.56 MHz 以外的干扰)以及阻抗匹配网络,确保芯片输出的阻抗与天线的阻抗实现共轭匹配,从而达到最大的能量传输效率。 - NFC 天线 (Antenna): 通常是一圈几匝的电感线圈。在消费类电子中,天线可以是 PCB 上的走线(成本最低,但占用面积大),也可以是 FPC 柔性电路板(常贴在设备机壳内侧),或者定制的铁氧体绕线天线(适用于金属环境)。 现代全功能 NFC 芯片(例如 PN7160 或 ST25R3916)在内部射频架构的设计上是完全对称的,即同时包含发射和接收链路。在具体的通信过程中,它通过底层的开关矩阵和状态机来动态扮演主从角色。 这些全功能 NFC 芯片的射频引脚上,通常包含有两组射频通路: - Tx 路径 (发射端): 内部是一个功率放大器(PA),连接到 VDD_PA 供电。它的任务是驱动外部 LC 谐振天线,向外辐射出 13.56MHz 的交变磁场。 - Rx 路径 (接收端): 内部是一个高灵敏度的检波器和解调器,负责监听天线上的微小电压幅度变化或相位偏移。 因此,如果产品中的 NFC 芯片是这类全功能芯片,也就意味着其硬件射频结构是完整的,可同时具备 Tx(发场)和 Rx(听场)能力。而对于 无源 NFC 标签(如耗材贴纸)这类产品形态而言,其硬件结构就是残缺的。也就是说,它没有内部供电的 Tx PA,只有天线线圈、整流电路(从磁场取电)和一个调节自身阻抗的电子开关,只有 Rx 能力。 NFC的三种通信模式 在系统开发中,NFC 具有以下三种标准的工作模式: !image.png - 读/写模式 (Reader/Writer Mode): 最常见的模式。设备主动产生磁场,去读取或写入一个无源的 NFC 标签(Tag)/智能卡。这种模式下,当前设备的 NFC 芯片开启其内部的 PA,持续通过 Tx 引脚向天线泵入能量,产生稳定的 13.56MHz 磁场。而且在此后的通信过程中,即使是读取信息,设备也要保持 Tx 磁场不断。 - 卡模拟模式 (Card Emulation Mode): 设备表现得像一张标准的非接触式智能卡(如门禁卡、公交卡、银行卡),由外部设备(如闸机)提供磁场。此时设备 NFC 芯片会彻底关闭 Tx PA,不再对外辐射能量,以节省功耗。当闸机的磁场会在卡设备天线上感应出电压。NFC 芯片的能量收集管脚(或专用的唤醒管脚)检测到这个场,唤醒主控。 - 点对点模式 (Peer-to-Peer, P2P Mode): 两个有源的 NFC 设备靠近时,建立双向通信通道进行数据交换(当然,目前在消费类硬件中,较少使用该模式作为核心数据传输通道,多用于握手,例如辅助建立WiFi连接)。两个设备都是 NFC 全功能设备,在两个设备靠近时通过握手协商双方在后续通信中的角色,确定后固定一方为Initiator,另外一方为Target。 那么接下来的问题是:_已知全功能 NFC 的射频链路设计是对称的,且 NFC 有以上三种工作模式,那么对于一个全功能NFC设备而言,它在后续的工作状态中,如何主动或者被动的选择究竟是以以上三种模式中的哪一种模式和哪一种角色来工作呢?_ 答案是:依赖于NFC 的发现循环 (NFC Discovery Loop),以及主控芯片(MCU)的主动配置介入。 对于一个没有被主控端(MCU)强制限定某一特定模式的全功能 NFC 控制器而言,它在通电待机后,会在底层自动跑一个基于时分复用的状态机,这个状态机被称为 Discovery Loop。 大致的工作逻辑就是,这个状态机会在 Poll-Listen-Sleep 这三个状态之间频繁切换,通常一个完整周期在几百毫秒级别。如果在这个状态切换中通过Poll模式检测到无源标签,就会以读写模式工作;如果检测到外部的闸机,就会以卡模拟的模式来工作。 !b78ed372-8f4f-42a0-aac6-cd8a710780cf.png 当然,在实际的产品开发中,这种全开所有模式跑循环的工作模式,既耗电低效,又容易引起不必要的交互冲突。而通常情况下,一个产品中所包含的 NFC 功能的应用场景都是明确的。因此,在进行系统实现时,就应该在系统初始化时,在主控MCU的应用程序中根据产品NFC功能的业务逻辑需求,主动配置好路由表和发现规则,而不是完全没有现在的在后台反复低效轮询。 - 如果产品的NFC功能应用场景主要是读被动的NFC标签,完全不需要被手机、闸机等当成卡片去读的话,就可以直接通过主控MCU和NFC芯片之间的NCI指令,把芯片的 Listen State 和 P2P 模式去掉。此时,芯片的 Discovery 循环里就只剩下 Poll 和 Sleep,变成了一个纯粹的主动读写器。 - 而如果产品的NFC应用场景中,既需要当读卡器(读取用户的实体门禁卡),又需要当做一张卡(让带有 NFC 门禁卡功能的手机碰一下开门)。此时就要保留完整的 Discovery Loop。 但无论如何,在电池供电的电子产品中,为了极致省电,Poll 状态通常会被替换为 LPCD (Low Power Card Detection,低功耗卡片检测)。 在这个LPCD状态下,设备的 Rx 不再发送完整的协议包,而是每隔几百毫秒发一个极短的脉冲场,仅仅检测天线的电感量有没有发生微小的偏移(因为金属或卡片靠近会导致天线失谐)。如果检测到失谐,才真正唤醒去执行完整的 Poll 过程。这样的话,只有当有人将卡片实际贴到天线上引起电感失谐时,芯片才会被真正唤醒去发场,能将待机功耗从数十毫安降至微安级别。 什么是NCI指令集? 以上提到,部分高端的 NFC 控制器在其内部会运行一个固件,可支持标准的NCI(NFC Controller Interface)指令集,在 NFC 的工作模式设置时,主控MCU就是通过 I2C 或者 SPI 等硬件接口,向 NFC 芯片发出NCI指令来与NFC芯片进行交互。那么这个NCI指令集究竟是什么呢? 在没有 NCI(NFC Controller Interface,NFC 控制器接口)指令集标准之前,各家 NFC 芯片厂商的底层寄存器和控制逻辑五花八门,软件工程师如果想换一颗 NFC 芯片,几乎要把整个驱动层重写一遍。针对这个问题,NFC Forum 制定了 NCI 标准,目的就是彻底屏蔽底层射频时序和物理链路的复杂性。 在 NCI 指令集的加持下,主控处理器只需要通过 I2C 或 SPI 向 NFC 芯片发送标准化的 NCI 字节流,芯片就会自动去处理那些复杂的射频唤醒、冲突检测和底层协议校验方面的事情。这样的话,如果后续在产品的开发过程中,要更换NFC芯片的话,只要换一个同样支持NCI指令集的NFC芯片就好,主控端的驱动层和应用层几乎不需要做任何改动。(当然,现实中没有这么理想,一些厂家会在NCI指令的框架基础上增加一些自定义指令,这部分就需要额外调试) NCI 规范把在物理总线(如 I2C,SPI)上传输的数据包(Packet)严格划分为四种类型: - CMD (Command - 控制指令): 主控 (MCU/SoC) NFC 芯片,是主控下发的动作指令。 - RSP (Response - 指令响应): NFC 芯片 主控,针对 CMD 的同步应答,芯片在收到 CMD 后必须在极短的时间内回复 RSP。 - NTF (Notification - 异步通知): NFC 芯片 主控。芯片主动上报的异步事件。 - DATA (数据包): 双向,纯粹的业务层数据透传。当底层连接建立后,主控和卡片/外部设备之间读写的真实数据(如 NDEF 富文本、URL)都会被封装在 DATA 包中。 !image.png 在软件研发阶段,NCI 的标准化特性为团队分工带来了极大的便利: - BSP / 驱动层:驱动工程师不需要懂任何 NFC 协议栈的逻辑,只需要在 Linux/RTOS 中调通 I2C 或 SPI 接口,并配置好一个 GPIO 中断引脚(用于 NFC 芯片向主控发送 NTF 通知时触发中断)。在 Linux 系统下,这通常体现为一个简单的字符设备节点(如 /dev/pn544 或通过 I2C 核心层注册的设备),这个节点的唯一作用就是透明传输 NCI 字节流。 - 协议栈 (中间件):NCI 报文的解析和组装由中间件完成。 NXP 提供了基于 Linux 的 libnfc-nci 库。如果是 Android 系统,AOSP 源码中的 system/nfc 已经内建了极其完善的 NCI 协议栈。 - Linux 应用层 / APP :应用层开发人员直接调用协议栈/中间件暴露出来的上层 API 即可,比如 nfc_enable()、nfc_read_ndef() 等等。 MIFARE/FELICA/IEC14443 在 NFC 标准确立之前,各家芯片大厂在 13.56MHz 的高频 RFID 领域,都提出来自己的底层调制方式和私有数据格式。后来,NFC Forum 成立,它的伟大之处不在于发明了一种全新的射频技术,而是向下兼容了这些大厂所推出的私有解决方案,并向上统合成了标准的 NDEF 数据格式。 在这个领域,NFC 针对以下五个主流技术流派提供了兼容性的支持: - MIFARE:由 NXP 主导,是目前全球普及率最高的非接触式智能卡技术,它底层主要基于 ISO/IEC 14443 Type A 射频标准。应用非常广泛,小区门禁卡、酒店房卡、交通卡、一次性纸质门票/贴纸用的都是这种技术。 - FeliCa :是由 Sony 研发的独立标准,对应于日本工业标准 JIS X 6319-4。日本的 Suica(西瓜卡)、香港的八达通(Octopus)是它的绝对主场。 - ISO/IEC 14443 Type B:当年制定 14443 标准时,NXP 主导了 Type A,而意法半导体(ST)、摩托罗拉等联合主导了 Type B,更适合处理高密度的加密运算。 国内的第二代居民身份证、各种接触/非接触式银行卡(EMV 标准)、电子护照等,几乎清一色采用 Type B 标准。 - ISO/IEC 15693:相比前几种技术,牺牲了通信速率,换取了更远的读写距离,读写距离可以达到 几十厘米,且支持多标签同时快速防碰撞读取。典型应用是图书馆自助借还书系统、滑雪场非接触式雪票、医用试剂盒的批量盘点。 !image.png 面对市场上非接触卡的这么多种五花八门的底层芯片,如果我们要对这些卡进行扫描,Linux 应用层或 APP 开发团队如果直接去解析它们底层的扇区(Sector)或块(Block),面对的兼容性问题会非常棘手。 对此,NFC Forum 定义了 Type 1 到 Type 5 五种标准的“NFC Tag Types”,强制将上述底层硬件进行了抽象映射。只要底层芯片符合这些 Type,主控抓取上来的就都是结构化的标准富文本数据,开发团队直接在 Cloud 或 APP 层解析标准负载即可,这样就实现了业务层与物理卡片的解耦,这些不同的卡标准的兼容性问题就迎刃而解了: - Type 1: 基于老式的 Innovision Topaz。 - Type 2: 完美映射 MIFARE Ultralight 及 NXP NTAG 系列。 - Type 3: 完美映射 Sony FeliCa。 - Type 4: 映射 ISO 14443 A/B(涵盖了 DESFire 和 CPU 卡)。 - Type 5: 映射 ISO 15693。 参考资料 - https://www.cnblogs.com/bluestorm/p/17705366.html - https://www.sony.co.jp/en/Products/felica/NFC/forum.html - 【NFC原理】学会这些知识,你也可以成为NFC领域的小专家!