/NFC

基于Android的NFC(近场通讯)开发

基于Android的NFC开发

github:https://github.com/aeroyoung
last update 2016/10/27 PM 6:00 

目录

NFC:近距离无线通信技术,分为主动模式和被动模式。 三种工作模式:

  • 读写模式:由手机(NFC设备)作为发起者,以TAG作为目标者。
  • P2P,2个NFC设备连接,实现数据的传递。Android4.2以上,2个NFC手机会直接用蓝牙传输,这种技术叫Android Beam
  • 卡模拟,类似IC卡,用于支付等

NFC协议基础

技术标准和规范

  • ISO 14443 (A/B)技术标准。A/B的编码方案和初始化方法不同,国内大部分的卡都是type-A的。type-B更开放一些。
  • NFCIP-1 标准规范
  • MIFARE 标准规范
  • Felica 由sony开发的一种标准规范

TAG

TAG指的是符合NFC标准的标签或者卡片

NFC Forum定义的四种tag类型

  • type-1 96bytes,106kb/s TOPAZ,ISO 14443,可读可重写,可配置为只读 by 恩智浦(飞利浦)
  • type-2 512bytes,106kb/s MIFARE UL NXP可读可重写,可配置为只读 by 恩智浦(飞利浦)
  • type-3 Felica sony公司,读写模式是在生产的时候就确定了,不可更改
  • type-4 ISO 14443,读写模式是在生产的时候就确定了,不可更改 国内用的多的是type-2

NXP特定的tag类型

Mifare TAG:ISO 14443,可读可重写,可配置为只读

NDEF协议

NFC Data Exchange Format,NFC数据交换格式,是一种二进制的消息封装格式。 一个NDEF信息包括若干个Record,每个Record有Header和Payload(内容)。具体可看NFCForum-TS-NDEF_1.0的3.2

RTD协议

NFC Record TyPE Definition相当于NDEF的子协议。分为三种:

Example

NDEF数据: D1 01 0F 54 02 65 6E 68 65 6C 6C 6F 2C 77 6F 72 6C 64 21 解析结果: hello,world!

16进制 二进制/AscII 说明
D1 11010001 这是一个Record的Header,每一位对应一个定义,见NFCForum-TS-NDEF_1.0的第三章
01 00000001 type length=1
0F 00001111 内容(payload)长度=15
54 ascii='T' RTD协议文本类型
02 00000010 语言码长度LANG=2
65 6E ascii="en" 英语
其他 全部转为ascii hello,world

Android NFC API

三重过滤机制

接收端根据数据格式和标签类型调用Activity,称为 Dispatch,Activity需要定义Intent Filter。三重过滤的依次匹配顺序如下

  1. NDEF_DISCOVERED 只过滤NDEF格式的数据
  2. TECH_DISCOVERED 根据标签中所支持的数据存储格式进行匹配
  3. TAG_DISCORVERED 最后一重

TECH_DISCOVERED模式中要列出支持的数据格式,有以下这些:

TagTechnology The interface that all tag technology classes must implement.
NfcA Provides access to NFC-A (ISO 14443-3A) properties and I/O operations.
NfcB Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.
NfcF Provides access to NFC-F (JIS 6319-4) properties and I/O operations.
NfcV Provides access to NFC-V (ISO 15693) properties and I/O operations.
IsoDep Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.
Ndef Provides access to NDEF data and operations on NFC tags that have been formatted as NDEF.
NdefFormatable Provides a format operations for tags that may be NDEF formattable.

这个表说明不同的芯片(解决方案、采用不同的标准实现的)卡中数据格式是不一样的,比如之前我们提到的MIFARE Classic数据格式就是NfcA,比如深圳通公交卡,MIFARE DESFire数据格式是IsoDep,我们使用的二代身份证用的就是NfcB,Felica用的就是NfcF,德州仪器的VicinityCard卡用的是NfcV,而Android分享文件就是实用的Ndef格式传输数据。