NFC(Near Field Communication,近场通信)也叫做近距离无线通信技术。该技术最早由Philips和Sony两家公司于2002年年末联合推出。2004年,Nokia、Philips、Sony等公司还共同组建了一个名为NFC Forum的非盈利性组织来推广和发展NFC技术。
从原理上说,NFC和Wi-Fi类似,二者都利用无线射频技术来实现设备之间的通信。不过,和Wi-Fi相比,NFC的工作频率为13.56MHz,有效距离为4cm左右,目前所支持的数据传输速率有106kbps、
212kbps和424kbps三种。
NFC发展过程
通过图8-1所示的NFC技术演化历程可知,NFC融合了三条主要的技术发展路线
RFID技术路线(左图)
无线射频识别技术。该技术路线发源于条形码(Barcodes),然后发展出了RFID,最终出现了NFC中的两个重要组件NFC Tag(标签)和NFC Reader。NFC Tag的作用和Barcodes类似,它是一种用于存储数据的被动式(Passive)RFID Tag,其最重要的特征就是NFC Tag自身不包含电源组件,所以它工作时必须依靠其他设备(比如NFC Reader)通过电磁感应的方式向其输送电能。和NFC Tag相对应的组件是NFC Reader,它首先通过电磁感应向NFC Tag输送电能使其工作,然后根据相关的无线射频通信协议来存取NFC Tag上的数据。
磁条卡(Magnetic Strip Cards)技术路线 (右图)
该路线最终演化了NFC使用的Proximity Coupling Smart Card技术(有效距离为10cm,对应的规范为ISO/IEC14443。注意,图中的Close Coupling Smart Card的有效距离为1cm,对应的规范为
ISO/IEC 10536。Vicinity Coupling Smart Card的有效距离为1m,对应的规范为ISO/IEC 15693)。粗略来看Smart Card和RFID Tag类似,例如二者都只存储一些数据,而且自身都没有电源组件,但Smart Card在安全性上的要求远比RFID Tag严格。另外,Smart Card上还能运行一些小的嵌入式系统(如Java Card OS)或者应用程序(Applets)以完成更为复杂的工作。
移动终端线路(中间)
演化了携带NFC功能的终端设备(图中间)。随着移动终端越来越智能,NFC和这些设备也融合得更加紧密,使得NFC的应用场景得到了较大的拓展。智能手机可通过NFC来和AP交换安全配置信息。
一个与之类似的例子是NFC Connection Handover技术,它描述了两台智能终端如何通过NFC相关协议来选择合适的数据传输方式(例如Bluetooth或Wi-Fi,受限于传输速率以及有效距离,NFC本身不适合大数据量传输)。
NFC支持如下3种工作模式:仿真卡模式(Card Emulation Mode),点对点模式(P2P mode),读卡器模式(Reader/writer mode)。
Application之下的三个箭头描述了三种运行模式所使用的协议栈。这部分内容将留待下文分析。
读卡器模式 (R/W)
数据在NFC芯片中,可以简单理解成“刷标签”。本质上就是通过支持NFC的手机或其它电子设备从带有NFC芯片的标签、贴纸、名片等媒介中读写信息。通常NFC标签是不需要外部供电的。当支持NFC的外设向NFC读写数据时,它会发送某种磁场,而这个磁场会自动的向NFC标签供电。
以支持NFC功能的智能终端为例,NFC R/W运行模式所包含的组件如图所示:
图中展示了一个包含NFC芯片的智能终端与NFC Tag交互所涉及的组件。
注意 这里需要特别指出的是:虽然NFC Froum只有四种类型的Tag,但由于NFC本身源自RFID技术,二者在一些底层协议上也相互兼容,所以很多RFID Tag也能被NFC Reader识别和操作。
NFC Forum定义了两个通用的数据结构用于NFC Device之间(包括R/W模式中的NFC Reader和NFC Tag)传递数据。这两个通用数据结构分别是NFC Data Exchange Format(NDEF)以及NFC Record。具体可参考NDEF及NFC Record
仿真卡模式(CE)
数据在支持NFC的手机或其它电子设备中,可以简单理解成“刷手机”。本质上就是将支持NFC的手机或其它电子设备当成借记卡、公交卡、门禁卡等IC卡使用。基本原理是将相应IC卡中的信息凭证封装成数据包存储在支持NFC的外设中 。
在使用时还需要一个NFC射频器(相当于刷卡器)。将手机靠近NFC射频器,手机就会接收到NFC射频器发过来的信号,在通过一系列复杂的验证后,将IC卡的相应信息传入NFC射频器,最后这些IC卡数据会传入NFC射频器连接的电脑,并进行相应的处理(如电子转帐、开门等操作)。
点对点模式
该模式与蓝牙、红外差不多,用于不同NFC设备之间进行数据交换,不过这个模式已经没有有“刷”的感觉了。其有效距离一般不能超过4厘米,但传输建立速度要比红外和蓝牙技术快很多,传输速度比红外块得多,如过双方都使用Android4.2,NFC会直接利用蓝牙传输。这种技术被称为Android Beam。所以使用Android Beam传输数据的两部设备不再限于4厘米之内。
点对点模式的典型应用是两部支持NFC的手机或平板电脑实现数据的点对点传输,例如,交换图片或同步设备联系人。因此,通过NFC,多个设备如数字相机,计算机,手机之间,都可以快速连接,并交换资料或者服务。
NFC使用的是无线射频技术。在RF层,与之相关的规范是ISO 18092(NFC Interface and Protocol I,简称NFCIP-1,该规范定义了NFC RF层的工作流程)和ISO14443 Type A、Type B,以及FeliCa。ISO 14443全称为非接触式IC卡标准,它从RF层面定义了如何与不同的非接触式IC卡(其实物可以是NFC Tag、RFID Tag、Smart Cards)交互。ISO 14443定义了Type A和Type B两种非接触式IC卡。除了ISO等标准组织制定的规范外,NFC Forum也制定了一系列的标准和规范
由图所示的NFC Forum规范框架可知,NFC Forum本身只定义了P2P模式和R/W模式相关的规范,规范的细节将留待下文详细介绍。CE模式比较复杂,下文也会讨论和它相关的一些知识。
在RF层,NFC Forum定义了三个主要规范。
不同的NFC标签之间差异很大,有的只支持简单的读写操作,有时还会采用支持一次性写入的芯片,将NFC标签设计成只读的。当然,也存在一些复杂的NFC标签,例如,有一些NFC标签可以通过硬件加密的方式限制对某一区域的访问。还有一些标签自带操作环境,允许NFC设备与这些标签进行更复杂的交互。这些标签中的数据也会采用不同的格式。但Android SDK API主要支持NFC论坛标准(Forum Standard),这种标准被称为NDEF(NFC Data Exchange Format,NFC数据交换格式)。
NDEF数据的操作
Android SDK API支持如下3种NDEF数据的操作:
1)从NFC标签读取NDEF格式的数据。
2)向NFC标签写入NDEF格式的数据。
3)通过Android Beam技术将NDEF数据发送到另一部NFC设备。
用于描述NDEF格式数据的两个类:
1)NdefMessage:描述NDEF格式的信息,实际上我们写入NFC标签的就是NdefMessage对象。
2)NdefRecord:描述NDEF信息的一个信息段,一个NdefMessage可能包含一个或者多个NdefRecord。
NdefMessage和NdefRecord是Android NFC技术的核心类,无论读写NDEF格式的NFC标签,还是通过Android Beam技术传递Ndef格式的数据,都需要这两个类。
非NDEF数据的操作
对于某些特殊需求,可能要存任意的数据,对于这些数据,我们就需要自定义格式。这些数据格式实际上就是普通的字节流,至于字节流中的数据代表什么,就由开发人员自己定义了。