Api Demo | 接口原型

NFC读写模式

2021-06-01T08:32:24
--------------------------------------------------------------------------------------------------------

 从上一篇文章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的介绍,这种类型RecordPayload包含ID Codedata两个部分。 

    ID Code取值为0x01占据1字节(代表"http://www"),而data为"nfc.com"占据7字节,所以整 Payload长度为8字节,故Payload length字段取值为0x08当应用程序获取Payload信息后,将根据ID CodeData的取值最终计算出对应的URI "http://www.nfc.com"



扩展阅读:

  1. NFC基础技术

  2. 无线通信技术的4个基础概念


文章首发在公众号“IoT全屋智能