NFC 基础

来源:互联网 发布:程序化交易软件 编辑:程序博客网 时间:2024/06/07 18:45

一、什么是NFC

NFC 是 Near Field Communication (近场通信)的缩写,是一种短距离的无线通信技术,在4cm以内才能建立连接。与蓝牙、WiFi相比,NFC的通信距离更短,数据传输速度更快。NFC允许在NFC标签与Android设备或Android设备之间传输数据。NFC主要有三种通信模式:读写模式、P2P模式、卡模拟模式。

  • 读写模式:允许带NFC功能的设备读写NFC 标签。(例如手机便可以充当NFC标签的读卡器或写卡器)

  • P2P模式:允许NFC设备与其他NFC设备(如带NFC功能的Android手机之间)交换数据,这种操作模式在Android Beam中被使用。

  • 卡模式模式:允许NFC设备将自己模拟成一张NFC卡。而这张模拟出来的NFC卡可以供其他NFC reader 读取信息。

二、NFC的使用场景

NFC前景光明,已经成为时下讨论的一个热点,与蓝牙、WiFi在通信方面形成鼎立之势,越来越多手机也开始支持NFC,NFC 在生活中的应用场景越来越广泛。

  • NFC手机变身公交卡、门禁卡…
  • NFC支付与充值
  • 耳机、打印机、镜头以及各种智能穿戴设备可以利用NFC快速配对连接
  • 预先写入功能的NFC贴片让手机快速进行场景切换。
  • NFC交换名片
  • …………..

三、NFC 数据交换格式

虽然NFC标签所含储存的数据可为任何形式,但许多Android Frameword API 基于NFC 论坛标准的一种数据格式 NDEF(NFC Data Exchange Format).

NFC 通过 NDEF Message (NDEF消息)传输数据,而NDEF Message 由多条 NDEF Record(NDEF记录)组成。
NDEF消息结构

NDEF Record 的格式如下:
NDEF Record

其中第一个byte记录的信息含义如下:

名称 大小 描述 MB(Message Begin) 1 bit 1/true表示该记录是首记录,0/false表示该记录非首记录 ME(Message End) 1 bit 1/true表示该记录是尾记录,0/false表示该记录后还有记录 CF(Chunk Flag) 1 bit 0表示该记录未被切换,1表示该记录被切块 SR(Short Record) 1 bit 0表示该记录是长记录,PAYLOAD LENGTH占4 Byte;1表示该记录是短记录,PAYLOAD LENGTH占1 Byte IL(ID_LENGTH) 1 bit 0表示该记录没有ID_LENGTH和ID域,1表示该记录有ID_LENGTH和ID域 TNF (Type Name Format) 3 bit 用于描述记录中数据(Payload)的类型,如0x01(即二进制001)表示well-known type

四、TNF 和 RTD

这里写图片描述

  • 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-Known Type)和External Type两种类型。

WKT就是NFC Forum自己定义的一些常用数据类型,目前常用类型如下:

  • URI Record Type:用于存储URI数据,Record中Type取值为 “U”

  • Text Record Type:用于存储文本数据,Record中Type取值为 “T”

  • Signature Record Type:用于存储数字签名数据,Record中Type取值为”Sig”

  • Smart Poster Record Type:智能海報,用于存储与海报相关的一些咨询信息,如图片、相关介紹等,Record中Type取值为”Sp”。

  • Generic Control Record Type:用于传递控制信息,Record中Type取值 为”Ge”

External Type:为第三方组织定义的类型,目前NFC Forum沒有定义相关的数据类型

五、Well-Known Type (TNF=ox01)

RTD_TEXT

文本记录类型,NDEF Record中Type取值为 “T”,Payload的组成结构如下:

Name Offset(bytes) Length(bytes) Content Status 0 1 这个byte最高位(第7位)为0,表示实际的文本内容采用UTF-8编码,为1表示采用UTF-16码表,第6位固定为0,第0至5位表示Language Code的长度 Language Code 1 < n > 语言码,文本使用的语言。例如”en-US”、”jp”等,这个字段的信息使用US-ASCII编码 Text n+1 < m > 实际的文本内容,编码方式由Status字段最高位决定

RTD_TEXT 实例分析

NDEF数据: D1 01 0F 54 02 65 6E 68 65 6C 6C 6F 2C 77 6F 72 6C 64 21

Hex值 解析 D1=11010001 B 1、该NDEF只有1个Record 2、该NDEF为短记录,且无ID和ID_Length 3、NFC Forum well-known type 01 Type_Length =1 0F Payload_Length=15 54 Type=54=”T”,Type为文本记录类型 02 语言码长度为2 65 6E 65 6E = “en”, 表示文本是英语 68 65 6C 6C 6F 2C 77 6F 72 6C 64 21 hello,world!

解析结果: hello,world!

RTD_URI

URI 记录类型,NDEF Record中Type取值为 “U”,Payload的组成结构如下:

Name Offset Size Value Description Identifier code 0 1 URI identifier code URI identifier code,对应下表 URI Field 1 N UTF-8编码的字符串 URI的剩下的值或完整值(当 identifier code 为 0x00)

URI Identifier Code 对应表

Decimal Hex Protocol 0 0x00 无前缀,URI Field 是包含完整的URI 1 0x01 http://www. 2 0x02 https://www. 3 0x03 http:// 4 0x04 https:// 5 0x05 tel: 6 0x06 mailto: 7 0x07 ftp://anonymous:anonymous@ 8 0x08 ftp://ftp. 9 0x09 ftps://

RTD_URI 实例分析

NDEF数据: D1 01 0A 55 01 62 61 69 64 75 2E 63 6F 6D

Hex值 解析 D1=11010001 B 1、该NDEF只有1个Record 2、该NDEF为短记录,且无ID和ID_Length 3、NFC Forum well-known type 01 Type_Length =1 0A Payload_Length=10 55 Type=55=”U”,Type为URI记录类型 01 identifier code 对应 http://www. 62 61 69 64 75 2E 63 6F 6D baidu.com

解析结果: http://www.baidu.com

对NFC协议知识的理解和掌握,是开发Android NFC 应用的必备基础。后续将会整理 Android NFC 开发中的三种模式:读写模式、点对点模式、卡模拟模式。

1 0
原创粉丝点击