Wide band network
½带½络
文章编号:
1002-8692
(2011)
21-0084-05
基于
Android
的
NFC
实现与应用
(华东师范大学 信息科学技术学院,
上海
200241)
胡星波,
晏渭川
【摘
行的开源移动设备操½系统,
NFC
技术和
Android
结合,
可以极大促进双方的发展。重点研究了
NFC
在
Android
上的实现架构,
详细描述了关键点的实现技术,
并给出了实际测试结果。
【文献标识码】
A
要】
近距离无线通信
(NFC)
是一种简单的、
非触控式的互联技术,
在电子消费领域有着广泛的应用。Android 是½前最流
【关键词】
近场通信;
NFC;
Android;
实现
【中图分类号】
TN99;
TP319
Implementation and Application of NFC Based on Android
HU Xingbo, YAN Weichuan
【Abstract】
Near Field Communication (NFC) is a simple and contactless communication technology, and it’ very popular in
s
architecture based on Android system is emphatically researched. Key technical points of its implementation are described, and
【Key
words】
near field communication; Android; implementation
a demo is given to show its result.
(School
of Information Science and Technology, East China Normal University, Shanghai 200241, China)
consuming electronic filed. Android is one of the most popular mobile operating system, and it’ open-source. Combining NFC
s
and Android together, it will do well for the development of both technology. In this paper, the NFC implementation
0
引言
NFC)
是由飞利浦公司和索尼公司共同开发的一种非接
,
触式识别和互联技术,
可以在移动设备、
消费类电子产
品、 和智½设备间进行近距离无线通信。NFC 提供了
PC
一种简单的、
非触控式的解决方案,
可以让消费者简单直
近距离无线通信技术
(Near
Field Communication,
进一步促进
Android
的普及和发展,
丰富其应用功½。
1 NFC
技术
1.1 NFC
基础
cation,
RFID)
技术,
½和
RFID
有区别。NFC 采用双向识
别和连接,
通信双方不存在固定的主从关系,
通信可以
由任意一个
NFC
设备发起。NFC 是在
RFID
和互联技术
NFC
发源于无线射频识别
(Radio-frequency
identifi⁃
观地交换信息、
访问内容与服务
[1]
。NFC 整合了非接触式
读卡器、
非接触式智½卡和点对点
(Peer-to-Peer)
通信功
技术的结合,
将会给消费者提供极大的生活便利,
例如移
½,
为消费者开创了全新的便捷生活方式。手机和
NFC
动支付、
½½服务信息、
身½识别、
公共交通卡等应用,
在
医疗保健、
优惠券、
智½海报等许多领域有也有巨大的应
用½力。
Android
是由
Google
公司设计的开源智½操½系统,
的基础上融合演变而来的一种新技术,
是一种短距离无
线通信技术标准。它可以在单一芯片上集成非接触式
读卡器、
非接触式智½卡和点对点的通信功½,
运行在
13.56 MHz
的频率范围内,
½在大约
10 cm
范围内建立
424 kbit/s,
甚至可提高到
848 kbit/s
以上
[3]
。
NFC
终端有
3
种工½模式:
设备之间的连接,
传输速率可为
106 kbit/s, kbit/s,
212
1)主动模式,
NFC
终端½为一个读卡器,
主动发出
2)被动模式,
NFC
终端可以模拟成一个智½卡被
3)双向模式,
双方½主动发出射频场来建立点对点
NFC
技 术 符 合 ½ 际 标 准 化 组 织 的
ISO18092
和
在手机和平板电脑等移动设备领域有着普遍的应用。在
Android
上配备了
LCD、
触摸屏、
GPS、
WiFi、
蓝牙、
重力传
感器、
感光器等实用外设,
同时支持
3G
语音和数据业
velopment Kit,
SDK)
而且源代码是开放的。大量的应用
,
统
[2]
。Android 系统的开放性以及强大的通信功½,
½得
NFC
的各种应用½在
Android
上便捷地实现,
同时也可以
自己的射频场去识别和读/写别的
NFC
设备;
务。Android 不仅提供基于
Java
开发的
SDK
(Software
De⁃
程序支持,
½得
Android
成为最为流行的智½手机操½系
读/写,
它只在其他设备发出的射频场中被动响应;
的通信
[3]
。
ISO21481
标准,
兼容无线智½卡
ISO14443
标准
[4]
,
符合欧
基金项目:
上海市数字出版领域科技支撑计划项目
(09dz1501700)
84
2011年第35卷第21期
(总第371期)
Wide band network
½带½络
洲计算机协会的
ECMA-340/356/373
标准
[5]
。NFC 论坛
Wire Protocol,
SWP)
连接
SIM
卡和主机控制器接口
(Host
Control Interface,
HCI) NFC
规范完全兼容。HCI 接口
的
支持
HSU,
和
I
2
C。其物理连接示意图如图 2
所示
[7]
。
SPI
Host
PN544
Host Interfaces
HT80C51MX
SE Interface
1.Wired Card Mode
Secure
Element
(NFC
Forum)
是由诺基亚、
飞利浦和索尼于
2004
年成立
的非赢利性行业协会,
是致力于推动
NFC
技术的专业组
织。NFC 论坛的技术架构及协议规范旨在发展近场通信
技术规范,
确保设备和服务的相互协调,
普及市场对
NFC
NFC
论坛推出了一系列的技术规范,
以确保设备与设备
阅读器之间的通信,
规范包括数据交换格式
(Data
Ex⁃
nition,
RTD)
伴 随 技 术 规 范
、
(NFC
Text RTD Technical
URI RTD Technical Specification)
以及各种标签
(Tag)
的
操½规范
[6]
。在近距离传输技术方面,
飞利浦的
MIFARE
技术和索尼的
FeliCa
技术与
NFC
标准兼容,
并且均得到
技术充分具备½功率、
½价格、
广泛的兼容性等特点,
而
的技术。
1.2
广泛的应用,
实际已经成为了标准的一部分。因此
NFC
½
NFC
成为未来近距离无线通信领域一种极有竞争力
在
Android
的应用设计中,
采用的是恩智浦半导½
NXP PN544
芯片
技术的了解和认可。该论坛现有成员已经超过
150
名。
change Format,
NDEF)
记½类型定义
、
(Record
Type Defi⁃
Specification)
和有关互联½资源的基本技术规范
(NFC
CIU
Contactless Coprocessor
Analog Cless Interface
SIGOUT
SIGIN
2.Card Emulation Mode
(Virtual Card Mode)
2 Android NFC
架构与实现
2.1
基本概念
中的数据,
并以
NDEF
(NFC
Data Exchange Format)
消息
格式进行交互。标签还可以是另外一个设备,
NFC
设
即
备工½在卡模拟模式。
构:
为了支持
NFC
功½,
Android
允许应用程序读取标签
图
2 PN544
控制器接口
(NXP
Semiconductors)
推出的
PN544
芯片,
该芯片是符合
(ETSI)
制定的最新
NFC
规范,
½够为手机制造商和电信
营运商提供完全兼容的平台,
用以推广
NFC
设备和服
的非接触式应用,
如移动支付、
交通和大型活动票务以及
而改善用户的½用½验。
直接从手机
SIM
(用户识别模块)
卡进行资料共享等,
进
PN544
的其他主要优势包括:
物理面积小,
易于实现
务。PN544 芯片可应用于手机,
为用户提供一系列崭新
业界标准的
NFC
控制器,
同时符合欧洲电信标准协会
在
Android NFC
的½件架构中,
定义了以下数据结
1)NFC
管理器
(NFC
Manager)
是提供给应用程序
,
2)NFC
适配器
(NFC
Adapter)
。一个
NFC
适配器代
的编程接口,
Android
应用程序访问
NFC
功½的入口,
是
主要为获取一个
NFC
适配器的实例。
表一个
NFC
设备,
提供一切
NFC
的操½,
包括
NFC
设备
开关、
标签读写、
NDEF
数据交互、 安全访问、
NFC
点对点
通信等。
尺寸设计优化;
½功耗优化;
可选断电和½电压工½模
式;
主机基带支持
MIFARE 1K/4K
读写功½;
可选模块化
通用½件堆栈,
不受平台限制;
优化天线设计,
实现最½
射频性½。
PN544
支持标签和工½模式如图
1
所示。
NFC-IP&2
specific modes
NFC Forum
Reader
(PCD-VCD)
ISO/IEC 14443A
ISO.IEC 14443B
ISO/IEC 15693
Card
(PICC-VICC)
ISO/IEC 14443 A
ISO/IEC 14443 B
Type B
递的数据的标准封装格式,
是由一个或多个
NDEF
数据
COVERED Intent
来读取
NDEF
消息。
以有一个或多个
NDEF
记½。
3)NDEF
消息
(NDEF
Message)
是设备和标签间传
,
记½组成。在应用程序中通过接收
ACTION_TAG_DIS⁃
的
NDEF
数据包的基本组成单元。一个
NDEF
数据包可
2.2 Android NFC
架构与实现
4)NDEF
记½
(NDEF
Record)
是
NFC
论坛中定义
,
Passive 106~424 kbit/s
Initiator and Target
Reader for NFC Forum
Tags 1~4
Active 106~424 kbit/s
Initiator and Target
Sony FeIiCa(1)
MIFARE 1K/4K
MIFARE(via SWP or NFC.W)
Service
和
Manager
基本结构模型。NFC
Manager
给应用
程序提供编程接口,
通过
Binder
和
Service
通信,
如图
3
所
在
NFC
的
Android
架 构 实 现 中 , 循
Android
通 用
遵
在电路设计上,
PN544
同所有通过单线协议
(Single
图
1
PN544
支持标签和工½模式
示。Android 中基于
Binder
的
IPC
的基本模型是基于会
话的客户/服务器
(Client/Server)
架构的。Android ½用了
一个内核模块
Binder
来中½各个进程之间的会话数据,
2011年第35卷第21期
(总第371期)
85
Wide band network
½带½络
它是一个字符驱动程序,
主要通过
IOCTL
与用户空间的
进程交换数据。一次会话总是发生在一个代理
Binder
对
程中,
也可以在不同的进程中。会话是一个同步操½,
由
将回复传递给代理
Binder
对象才算完成 。
[8]
AIDL
文件自动产生
Java
源代码文件,
该文件定义了一个
象和服务
Binder
对象之间,
这两个对象可以在同一个进
代理
Binder
对象发起请求,
一直要等到服务
Binder
对象
Application
名为
Stub
的内部½象类,
它继承扩展了接口并实现了远
程调用需要的几个方法。在
Server
端向客户端提供接
口,
实现上述接口的类的实例。
INfcTag.
aidl
NfcAdapter.
java
INfcTag.
java
parcel
数据包
NfcTag.
Stub
NfcServer.
java
NfcManager
NfcAdapter
NDEF
Record
Tag
Binder
NFCService
Stubs
NdefPush
Server
Handler
NdefPush
Client
NDEF
Message
Tech
NDEF,NFC-A,NFC-B,NFC-F,
NFC-V,ISO-DEP,MIFARE
NFC HAL
Native
NFC Manager,LLCP Socket,
Security Element,Tag
Socket and Connection
Java
实现,
½是部分中间层代码则由
C/C++实现,
因此要
实现
Java
和
C/C++之间相互调用,
则通过
JNI
来完成,
其
中
C/C++部分的代码则成为本地代码
(Native
Code)
。在
NFC
中,
实现了
LLCP、
标签、
Socket
接口、
NFC Manager
的
NfcNativeManager Java
JNI
NfcNativeManager.cpp
NFC HAL
在
Android
中所有的应用程序和核心框架½是通过
图
4 NFC Binder
通信
2.2.1 NFC Adapter
的实现
图
3
NFC
的
Android
架构
Linux kemel
Native
代码。以
Native Manager
的实现为例,
如图
5
所示。
NFC Adapter
主要实现的功½如下:
public boolean enable
)
(
1)设备初始化以及开关,
相关程序段为
public boolean disable
)
(
private static synchronized INfcAdapter setupService
)
(
2)NDEF
消息的读写和安全管理链接,
相关程序为
public void setLocalNdefMessage NdefMessage message)
(
public NdefMessage getLocalNdefMessage
)
(
public NfcSecureElement createNfcSecureElementConnection()
2.3 NFC HAL
的实现
图
5 NFC JNI
结构
3)P2P
的后台通信,
相关程序段为
sage msg)
中间件,
主要由
C/C++实现,
其结构如图
6
所示,
包括以下
NFC HAL
(Hardware
Abstract Layer)
是
PN544
的
层,
public void enableForegroundNdefPush
(Activity
activity, NdefMes⁃
public void disableForegroundNdefPush
(Activity
activity)
功½:
底层
RF
控制;
NFC
论坛定义的标签读写处理以及
标签模拟;
点对点通信;
同单总线的
SIM
卡或者其他安全
设½通信;
对基于
Felica,
Mifare
和
ISO14443
的
RFID
标签
做兼容性处理。
Common HAL
NFC FRI
Tag
Emulator LLCP
HCI Layer
Security
MIFARE
FeliCa
Binder IPC
调用
Service
对应的½数进行通信处理。
2.2.2 NFC Server
的实现
这些基本½数½是
NFC Binder
客户端½数,
通过
在
NFC Service
中主要实现了以下功½:
Adapter
中
的
Binder
客户端½数对应的
Service
端½数实现,
包括
tive
代码的访问接口。
INfcTag.Stub,
INfcAdapter.Stub
等;
Service
状态管理的消
息处理; 本地接口
Java
(Java
Native Interface,
的
Na⁃
JNI)
定 义
Android
接 口 定 义 语 言(Android
Interface Define
Language,
AIDL)
文件
[8]
,
该文件里面定义需要访问的功
½接口,
即可供客户端访问的方法和属性。在编译时
以
INfc.Stub
代码实现为例,
如图
4
所示。在客户端
识别过程的状态½换,
同时进行出错处理。共定义了如
下
11
种
HAL
状态:
在通用
HAL
部分,
向外部调用提供接口,
维护整个
图
6 NFC HAL
结构
Driver Adapter Layer
86
2011年第35卷第21期
(总第371期)
Wide band network
½带½络
typedef enum LibNfc_State{
eLibNfcHalInitInProgress,
eLibNfcHalInited,
Dal4Nfc_ReadWaitCancel
Dal4Nfc_Download()
Dal4Nfc_Reset
eLibNfcHalStateShutdown = 0x00,
eLibNfcHalShutdownInProgress,
eLibNfcHalStateInitandIdle,
eLibNfcHalStateConnect,
eLibNfcHalStateConfigReady ,
eLibNfcHalStateTransaction,
eLibNfcHalStateRelease,
eLibNfcHalStateInvalid
};
2.4
标签识别
用中,
以½前最常用的标签识别为重点,
阐述
Android
的
实现。识别一个标签的基本流程如图
7
所示。
NFC Adapter
NFC Service
Application
NFC HAL
1:EnadIe NFC
2:EnableNFC
4:getLocalNdef
3:Initialize
Message
5:IocalGet
6:findAndReadNdef
7:connect
)
(
8:startPresenceChecking
9:dispatchNative Tag
在
NFC
的读/写标签、
标签模拟以及点对点通信的应
eLibNfcHalStatePresenceChk,
Froum
定义的标准的实现,
包括支持
NFC
的
3
种工½模
式、
对各种标签的处理、 通信以及安全单元的访问。
PPP
½集合列表如下:
HciNfc_Initialise
NFC FRI
(Forum
Reference Implemtation)
对
NFC
是
HCI
层主要½象了与物理层相关的各种操½,
其操
HciNfc_Config_Discovery
HciNfc_Start_Discovery
HciNfc_Stop_Discovery
HciNfc_Configure
10:NDEF DISCOVERED
HciNfc_Restart_Discovery
设备工½正常之后,
即可获取
NDEF
消息。NFC
HAL
探
在标签识别开始之前,
必须先½½
NFC
设备,
确认
图
7 NFC
标签识别流程
测到有效距离范围内有标签存在,
则读取数据,
NFC
向
Service
发送标签识别事件,
NFC Service
广播
NfcAdapter.
ACTION_TAG_DISCOVERED Intent
消息。应用程序通
过接收该消息即可获取标签数据。
HciNfc_Switch_SmxMode
HciNfc_Switch_SwpMode
HciNfc_Connect
HciNfc_Reactivate
3 Android NFC
½用实例
HciNfc_Disconnect
检测到有效距离范围内的标签,
读取数据后,
即向系统发
据,
进行相应的处理。
在系统设½中打开
NFC
功½后,
NFC
硬件设备即可
HciNfc_Presence_Check
HciNfc_Exchange_Data
HciNfc_Send_Data
HciNfc_System_Test
HciNfc_Select_Next_Target
送
Intent
消息,
应用程序接收该消息,
解析其中的标签数
1)接收 Intent
消息程序段
(截图)
见图
8。
HciNfc_System_Configure
HciNfc_System_Get_Info
HciNfc_PRBS_Test
持的
3
种硬件连结方式的驱动操½方式,
其操½集合列
表如下:
Dal4Nfc_Register
Dal4Nfc_Init
Dal4Nfc_Unregister
Dal4Nfc_Shutdown
Dal4Nfc_Write
Dal4Nfc_Read
DAL
(Driver
Apater Layer)
层统一½象了
PN544
所支
Dal4Nfc_ReadWait
图
8
接收
Intent
消息程序段
(截图)
2011年第35卷第21期
(总第371期)
87
Wide band network
½带½络
2)解析 NDEF
消息记½程序段
(截图)
见图
9。
验证和½络通信,
用户无需依赖特定应用程序和设½。
这种经过
NFC
快速身½认证后再通过蓝牙、
WiFi
等高
速、
长距离传输的无线设备进行数据传输的方式,
½得设
而实现广告等服务信息、
½½信息数据获取、
非接触式移
动支付以及身½识别等功½。NFC 有着广阔的应用前
景,
特别是在与
Android
等智½手机操½系统结合后,
将
充分发挥
NFC
的功½。
参考文献:
3)进行数据显示,
运行测试结果如图
10
所示。
图
9
解析
NDEF
消息记½程序段
(截图)
[1] JR ORTIZ S. Is near-field communication close to success[J].
[2]
邵长½,
张重阳,
郑世宝. 基于
Android
的可视
IP
电话多媒½终端
IEEE Computer Society,
(3)
18-20.
2006
:
备间½快速、
安全地建立远距离、
高速率的数据通信,
从
[3] ECMA-340,
Near field communication interface and protocol(NFCIP-
[4]
1)[S]. 2nd ed.2004.
ISO/IEC 14443,
Identification cards——Contactless integrated cir⁃
设计与实现[J].电视技术,
2011,
(6)
62-67.
35
:
[5] ECMA-373,
Near field communication wired interface NFC-WI)[S].
(
[6] NFC Forum. NFC data exchange format (NDEF) technical pecification
[7]
NXP Inc. PN544-C2 near field communication (NFC) controller prod⁃
data_sheet/158231.pdf.
[EB/OL].[ 2011-03-17].http://www.nfc-forum.org/specs/spec_list/.
2004.
cuit cards—— proximity cards[S].2008.
uct data sheet[EB/OL].[2011-03-26].http://www.nxp.com/documents/
Android Forum. Package: android.nfc [EB/OL].[2011-03-28].http://
4
小结
图
10
标签识别示例
[8]
developer.android.com/reference/android/nfc/package-summary.html.
速建立无线通信的关键技术。NFC 不仅可以用于身½鉴
别,
还可以在两个无线智½设备之间进行双向数据交
互。除了信息交互之外,
NFC
还为移动联½设备提供了
一种安全机制,
让用户不受时间空间的限制,
½便捷地进
行身½识别和传输各种数据信息。只要
NFC
设备处于
NFC
是用于在近距离范围内的各种智½设备之间快
½者简介:
胡星波
(1976- ) 博士,
,
讲师,
主要研究方向为通信与信息系统、
专
用集成电路设计以及嵌入式系统;
晏渭川
(1979- ) 硕士,
,
主要研究方向为嵌入式系统。
收稿日期:
2011-05-13
责任编辑:
许
盈
有效的距离范围之内,
智½设备双方便会自动进行安全
(上接第
79
页)
参考文献:
[1]
Samsung Electronics. S3C6410X_UM_Rev[EB/OL].[2010-11-15].
http://www.samsung.com/global/business/semiconductor/support/bro⁃
hures/downloads/systemlsi/s3c6410_datasheet_200804.pdf.
[3]
Qt for embedded Linux architecture[EB/OL].[2010-12-15].http://doc.
qt.nokia.com/4.5/index.html.
Nokia Corporation. Qt for embedded Linux reference documentation:
[2]
CORBET J,
RUBINI A,
KROAH-HARTMAN G. Linux
设备驱动程
2009.
[4] BLANCHETTE J,
SUMMERFIELD M. C++ GUI Programming with
Qt 4[M].2nd ed.New Jersey:
Prentice Hall,
2008.
盈
序[M].3rd
ed.
魏永明,
耿岳,
钟书毅,
译.北京:
中½电力出版社,
责任编辑:
许
收稿日期:
2011-08-16
88
2011年第35卷第21期
(总第371期)
评论