深入理解NFC
NFC(Near field communication,近场通信)也叫做近距离无线通信技术。
从原理来说,NFC和wifi类似,二者都利用无线射频技术来实现设备之间的通信。
但是,和WIFI相比,NFC的工作频率为13.55Hz,有效距离为4cm,支持的传输速率有106kps、212kps和424kps三种。
1 NFC基础知识
1.1 NFC概述
NFC融合了三条主要的数据发展路线
RFID技术路线,即无线射频识别技术
磁条卡技术路线
移动终端线路,演化了携带NFC功能的终端设备
NFC的技术框架
由图可知。
从用户角度(即Application层之上)来看,NFC有三种运行模式(operation mode)。
Reader/write模式:简称R/W,和NFC Tag/NFC Reader相关
Peer-to-Peer模式:简称P2P,它支持两个NFC设备交互。
NFC Card Emulation模式:简称CE,它能把携带NFC功能的设备模拟成Smart Card,这样就能实现诸如手机支付、门禁卡之类的功能。
1.2NFC R/W运行模式
左边的只能终端扮演了NFC Reader角色
在R/W模式中,交互操作的发起方只能是NFC Reader,因此它也称为Initiator或Active Device
右边的NFC Tag,由于需要NFC Reader通过电磁感应为其提供电能,所以在R/W模式中,NFC Tag只能作为交互操作的Target
NFC Forum定义了四种类型的Tag,分别为Type1,Type2,Type3和Type4.
NFC Forum定义了两个通用的数据结构用于NFC Device之间(包括R/W模式中的NFC Reader和NFC Tag)传递数据。这两个通用数据结构分别为NFC Data Exchange Format(NDEF)以及NFC Record
NFC四种不同类型的Tag有何区别
虽然NFC Tag有四种不同类型,但为了保证最大兼容性,NFC Forum建议NFC设备之间尽量使用通用数据结构NDEF和NFC Record来交换信息。
NFC R/W 模式涉及的规范较多,包括:
NFC Reader如何与不同类型的Tag交互,这部分内容涉及非常底层的一些协议。
NDEF和一些常用数据类型定义。
NDEF和NFC Record
(1)NDEF和NFC Record之间的关系
NFC设备之间每一次交互的数据都会封装在一个NDEF Message中,而一个NDEF Message可以包含多个NFC Record,真正的数据则封装在NFC Record中。
在一个NDEF Message中,第一个NFC Record需要设置其MB位(Message Begin)为1,表示它是该消息中第一个NFC Record,最后一个NFC Record需设置ME位(Message End)位为1,表示它是此消息中最后一个NFC Record。
NFC Record分为NFC Record Header(头部信息)和Payload(数据载荷)两大部分。
Record Header 中最重要的是其第一字节。该字节有6个标志信息,分别为
MB(Message Begin标志)
ME(Message End标志)
CF(Chunk Flag标志,表示该Record是否为分片Record)
SR(Short Record标志,如果该标志被设置,则图中的4个Payload Length字段仅需一个,这表明Playload数据长度将限制在255字节以内)
IL(ID_LENGTH标志,用于指明Header中是否包含ID Length和ID这两个字段)
TNF(Type Name Format标志,用于指明Payload的类型,NFC Forum定义了一些常用的Payload类型)
Type Length 指明Record Header中Type字段的长度
Payload Length3~Payload Length0 这4个字段共同指明Payload字段的长度。如果SR标志被设置,则Record Header仅包含一个Payload length字段
ID Length指明ID字段的长度。
Type字段表明Payload的类型,NFC Forum定义了诸如URI、MIME等类型的Type,其目的是方便不同的应用来处理不同Type的数据,例如URI类型的数据就交给浏览器来处理。
ID需要配合URI类型的Payload一起使用,它使得一个NFC Record能通过ID来指向另外一个NFC Record
(2)TNF和RTD
TNF用于描述一个NFC Record中数据(Payload)的类型,NFC Forum规定了一些常用的数据类型。
Empty:该Record中没有数据,即相当于一个空的NFC Record
NFC Forum Well-Known Type:由NFC Forum定义的一些较为常见的数据类型,包括URI、TEXT等,其格式遵循NFC Forum RTD(Record Type Definition)规范。
MIME:multipurpose Internet Mail Extensions的缩写,遵循RFC2046规范。
Absolute URI:绝对URI
NFC Forum External Type,后面介绍
Unknown:代表Payload中的数据类型未知。
Unchanged:这种类型的数据用于NFC Record分片。例如一个大的数据需要通过多个NFC Record来承载,除第一个NFC Record分片外,该数据对应的其他NFC Record分片都必须设置TNF为Unchanged。
在TNF七大类型中,NFC Forum通过RTD规范定义了其中的WKT(Well-KnownType)和External Type两种类型。
简单来说,WKT就是NFC Forum自己定义的一些常用数据类型,目前常用类型如下。
URI Record Type:用于存储URI数据,对于Type字段取值为“U”
Text Record Type:用于存储文本数据,对于Type字段取值为”T”
Signature Record Type:用于存储数字签名数据,对于Type字段取值为“Sig”
Smart Poster Record Type:智能海报,用于存储与该海报相关的一些咨询信息,如图片、相关介绍等,对于Type字段取值为”Sp”。
Generic Control Record Type:用于传递控制信息,对于Type字段取值为“Ge”
External Type:为第三方组织定义的类型,目前NFC Forum没有定义相关的数据类型
2.NFC Record实例
(1)URI Record Type
URI Record Type属于NFC Forum Well-known Type的一种,其对应的Type字段取值为“U”
对于这种类型的NFC Record,其Payload组织结构
在URI Record Payload中,第一个字节指明URI的ID码
像http://www.nfc.com这样的信息该如何封装为一个NDEF消息
由于该NDEF消息只包含一个NFC Record,所以这个唯一的NFC Record将设置MB和ME标志位为1,由于数据量小于255字节,所以SR标志位为1.最后,该Record携带的数据属于URI类型,它为Well-Known Type 的一种,所以TNF 取值为0x01.
Type Length字段取值为0x01,对应的Type字段取值为”U”,代表URI Record Type
URI Record的介绍,这种类型Record的Payload包含ID Code和data两个部分。
ID Code取值为0x01占据1字节(代表”http://www”),而data为”nfc.com”占据7个字节,所以整个Payload长度为8字节,故Payload length字段取值为0x08.
当应用程序获取Payload信息后,将根据ID Code和Data的取值最终计算出对应的URI为http://www.nfc.com
(2)Text Record Type实例
携带“Hello World”字符串信息的NDEF消息各字段的取值情况。
至此NFC R/W运行模式介绍完毕。在R/W模式下,对应用程序而言最重要的工作就是解析NDEF消息。NFC Forum定义了七种数据类型,其中内容比较丰富的属于NFC Forum Well Known Type。