NDEF及NFC Record

1. NDEF和NFC Record之间的关系

根据NFC Forum的定义,R/W模式下,NFC设备之间每一次交互的数据都会封装在一个NDEF Message中,而一个NDEF Message可以包含多个NFC Record,真正的数据则封装在NFC Record中。图8-5展示了NDEF Message和NFC Record之间的关系。

由上图可知,一个NDEF Message可包含一个或多个NFC Record。在一个NDEFMessage中,第一个NFC Record需设置其MB位(Message Begin)为1,表示它是该消息中第一个NFC Record,最后一个NFC Record需设置ME位(Message End)位为1,表示它是此消息中最后一个NFC Record。

NFC Record本身的组织结构如图所示。NFC Record分为NFC Record Header(头部信息)和Payload(数据载荷)两大部分。Record Header中最重要的是其第一字节。该字节有6个标志信息,分别如下。

  • Record 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类型,详情见下文分析)

  • Record 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。
    NFC Record中,常令初学者感到困惑的是TNF字段,其作用是什么?来看下文。

  • TNF和RTD

TNF用于描述一个NFC Record中数据(Payload)的类型,为了方便应用程序能正确解析NFC Record中的数据,NFC Forum规定了一些常用的数据类型,如下表所示。

目前NFC支持七种数据类型:

  1. Empty:表示该Record中没有数据,即相当于一个空的NFC Record
  2. NFC Forum Well-Known Type:由NFC Forum定义的一些较为常用的数据类型,包括URI、TEXT等,其格式遵循NFC Forum RTD(Record Type Definition)规范。下文将详细介绍它。
  3. MIME:它是Multipurpose Internet Mail Extensions的缩写,遵循RFC2046规范。例如,当TNF取值为MIME时,其Type字段取值可为"text/plain"或"image/png"等。
  4. Absolute URI:绝对URI,遵循RFC 3986规范。例如某文件的绝对URI为"http:/ android.com/robots.txt",而其相对URI则为"robots.txt"。
  5. NFC Forum External Type:也由NFC Forum的RTD规范定义,下文将介绍它。
  6. Unknown:代表Payload中的数据类型未知,它和MIME类型"application/octet-stream"有些类似,这种类型的数据由相应的应用程序来解析。
  7. Unchanged:这种类型的数据用于NFC Record分片。例如一个大的数据需要通过多个NFC Record来承载,除第一个NFC Record分片外,该数据对应的其他NFC Record分片都必须设置TNF为Unchanged。关于这部分内容,读者可参考NDEF规范的2.3.3节"Record Chunks"
    在TNF七大类型中,NFC Forum通过RTD规范定义了其中的WKT(Well-KnownType)和External Type两种类型。虽然RTD规范全长只有20来页,但阅读起来比较枯燥,在此,笔者总结其核心内容。

简单点说,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字段取值为"Gc"
  • External Type:为第三方组织定义的类型,目前NFC Forum没有定义相关的数据
    类型。

NFC Record实例

URI Record Type实例

URI Record Type属于NFC Forum Well-known Type的一种,其对应的Type字段取值为"U"。对于这种类型的NFC Record,其Payload组织结构如表所示。

在URI Record Payload中,第一个字节指明URI的ID码,表8-4为NFC Forum定义的几种ID码。

了解上述信息后,我们来看"http:/ www.nfc.com"这样的信息该如何封装为一个NDEF消息,图8-7所示为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 RecordType。
根据本节对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"

Text Record Type实例

Text Record Type和URI Record Type类似,其Payload组织结构如表8-5所示。

图8-8所示为携带"Hello World"字符串信息的NDEF消息各字段的取值情况。可参考 URI Record进行解析。

高通 NFC开发基础知识 之 “NDEF及NFC Record”相关推荐

  1. 高通 NFC开发基础知识 (未完待续)(目前是主要择录,参考 邓凡平:深入理解Android:WiFi模块 NFC和GPS卷)

    NFC开发相关 NFC概述 NFC(Near Field Communication,近场通信)也叫做近距离无线通信技术.该技术最早由Philips和Sony两家公司于2002年年末联合推出.2004 ...

  2. 高通子系统subsystem基础知识

    翻译了高通相关文档部分内容,结合sm4350平台项目做的总结: 1,基本概念 Subsystem The system on chip (SoC) consists of a main APSS pr ...

  3. 高通驱动开发参考(二)

    第1章 Driver相关模块介绍 1.1 REX简介 虽说目前QSC60x5平台上采用L4操作系统,REX只是L4上面的一个Task.但高通为了开发的兼容性,提供的API仍然采用老的一套接口(可能内部 ...

  4. Day01_网页开发基础知识、HTML概述、HTML标签

    01.01_网页开发基础知识 代码编写工具 python PyCharm Subline iPython... HTML HBulider Dreamweaver WebStorm Eclipse.. ...

  5. SP 短信开发-基础知识篇

    SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...

  6. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  7. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...

  8. IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议

    1.前言 IM应用从服务端数据的角度来看,它是一种很特殊的应用场景,抛开基础数据.增值业务和附属功能不谈,单从IM聊天工具的立身之本--聊天数据来说,理论上是不需要在服务端存储的(或者说只需要短暂存储 ...

  9. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之Pinctrl子系统和GPIO子系统的使用

    文章目录 前言 1.Pinctrl子系统 1.1.为什么有Pinctrl子系统 1.2.重要的概念 1.3.代码中怎么引用pinctrl 2.GPIO子系统 2.1.为什么有GPIO子系统 2.2.在 ...

最新文章

  1. Magent搭建Memcached集群
  2. Linux学习之CentOS(八)--Linux系统的分区概念
  3. make zImage和make uImage的区别和mkimage工具的使用
  4. 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...
  5. 大学生如何成功就业。
  6. WDM驱动程序入门(1)-Hello WDM
  7. 盘点中兴通讯强悍的战斗力
  8. sublime用cmd窗口调试python_Sublime Text设置程序输出窗口为dos窗口
  9. TCP流模式与UDP数据报模式
  10. python进阶书籍 流畅的python
  11. 2020-10-13 Comsol学习1
  12. 基于高德地图导航的路径爬取
  13. 多元时间序列因果关系分析
  14. Java将毫秒(时间戳)转时分秒格式或者年月日
  15. php数据库操作类库doctrine使用全攻略
  16. 非标产品和标准产品的区别(关于3C)
  17. 教你如何赚你的第一桶金 - 2048(包括源代码)
  18. [Tool] 仿博客园插入代码的 WLW 插件
  19. VVC/VTM:帧间预测——Combined inter and intra prediction (CIIP)
  20. 基础编程题目集(15 分题)

热门文章

  1. ESP8266-01s MQTT固件烧录
  2. STM32+ESP8266+MQTT连接阿里云服务器(一、烧写MQTT固件)
  3. ISP 和IAP 原理与区别
  4. Exploitation and Exploration
  5. 数据分析之Excel的基本功能(下)
  6. Vue技术栈(全家桶)
  7. 【GANs】Generative Adversarial Nets
  8. 代码随想录——求根节点到叶节点数字之和
  9. 求10个数中的最大值及其对应的下标
  10. 搭载专业游戏芯片,这款百元真无线耳机很强吗?开箱实测一番