从上一篇文章《NFC基础技术》介绍了NFC在应用层中的三种模式:分别是(1)读写模式;(2)p2p模式;(3)ce卡模拟模式。
本篇文章将会针对读写模式进行进一步介绍。
目录:
1.NFC读写模式框架介绍
2.NFC NDEF和NFC RECORD
3.实战例子
1. NFC 读写模式框架
图1 读写模式的框架
如图1所示,在读写模式下,会有一个带NFC芯片的主动设备、一个NFC TAG标签,他们之间的通信协议是NDEF数据规范。
(1)主动设备:通过非接触前段的提供电磁感应,来驱动对TAG的读写。
(2)NFC TAG: NFC Forum定义了四种类型的标签:type1,type2,type3, type4。这四种类型区别在于存储空间大小、数据传输速率、以及底层协议。如图2所示。
图2 四种标签规范的区别
(3)NDEF: NFC Forum定义了两个通用的数据结构用于NFC Device之间(包括R/W模式中的NFC Reader和NFC Tag)传递数据。这两个通用数据结构分别是NFC Data Exchange Format(NDEF)以及NFC Record。
2. NFC NDEF和NFC Record
NFC Data Exchange Format简称为NDEF,它包含了多个NFC Record,如图3所示;而每个Record都遵循约定的组织结构,如图4所示。
图3. nfc ndef 和 nfc record的关系
图4 NFC Rerocd体组织结构
NFC Record由头部header和载荷payload组成。
2.1 Record Header
关于header,分为第一字节和其他字节
2.1.1 Header的第一个字节
MB(Message Begin标志)
ME(Message End标志)
CF(Chunk Flag标志,表示该Record是否为分片Record)
SR(Short Record标志。如果该标志被设置,则图中的4个Payload Length字段仅需一个,这表明Payload数据长度将限制在255字节以内)
IL(ID_LENGTH标志,它用于指明Header中是否包含ID Length和ID这两个字段)
TNF(Type Name Format标志,用于指明Payload的类型,NFC Forum定义了一些常用的Payload类型)
2.1.2 Header的其他字节
Type Length指明Record Header中Type字段的长度。
Payload Length 3~Payload Length 0这4个字段共同指明Payload字段的长度。如果SR标志 被设置,则Record Header仅包含一个Payload length字段。
ID Length指明ID字段的长度。如图所示IL标志未设置,则ID Length和ID字段都不存在。
Type字段表明Payload的类型,NFC Forum定义了诸如URI、MIME等类型的Type,其目 的是方便不同的应用来处理不同Type的数据,例如URI类型的数据就交给浏览器来处理。
ID需要配合URI类型的Payload一起使用,它使得一个NFC Record能通过ID来指向另外一 个NFC Record。
2.2 Payload
payload(载荷)的具体内容,将由2.1介绍的header中的字节来解决。其中起重要决定作用的是第一字节中的TNF。
2.3. TNF
TNF用于描述一个NFC Record中数据(Payload)的类型,为了方便应用程序能正确解析 NFC Record中的数据,NFC Forum规定了一些常用的数据类型,
如图5所示图5 TNF取值
Empty:表示该Record中没有数据,即相当于一个空的NFC Record。
NFC Forum Well-Known Type:由NFC Forum定义的一些较为常用的数据类型,包括 URI、TEXT等,其格式遵循NFC Forum RTD(Record Type Definition)规范。(NFC Forum目前定义的所有WKT类型列表可参考http://www.nfc-forum.org/specs/nfc_forum_assigned_numbers_register)。
MIME:它是Multipurpose Internet Mail Extensions的缩写,遵循RFC2046规范。例如,当 TNF取值为MIME时,其Type字段取值可为"text/plain"或"image/png"等。
Absolute URI:绝对URI,遵循RFC 3986规范。例如某文件的绝对URI
为"http://android.com/robots.txt",而其相对URI则为"robots.txt"。
NFC Forum External Type:也由NFC Forum的RTD规范定义,下文将介绍它。
Unknown:代表Payload中的数据类型未知,它和MIME类型"application/octet-stream"有些 类似,这种类型的数据由相应的应用程序来解析。
Unchanged:这种类型的数据用于NFC Record分片。例如一个大的数据需要通过多个 NFC Record来承载,除第一个NFC Record分片外,该数据对应的其他NFC Record分片都必须 设置TNF为Unchanged。
3.实战例子
3.1 例子1
日常消费领域中,手机对着NFC TAG碰一碰,拉起一个网页,是怎么实现的呢。
拉起网页就是需要手机从tag中识别出网页的Uri,因此tag的需要存储URI。根据2.3节内容,我们可知道它的TNF是一个well known type。
图6. uri record 组织
架设网站URI域名是http://www.nfc.com。它的id code是0x01 (参考http://www.nfc-forum.org/specs/nfc_forum_assigned_numbers_register)
图7 ID CODE示意图
最终的nfc record组织如图8所示
图8. http://www.nfc.com的NFC Record标签案例
现在逐个介绍下图8中的内容。
由于该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"。
扩展阅读:
文章首发在公众号“IoT全屋智能”
接口原型 - IT教程,计算机教程,API相关DEMO