引言
近距离无线通信技术(Near Field Communication,NFC),是由飞利浦公司和索尼公司共同开发的一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能设备间进行近距离无线通信。NFC提供了一种简单的、非触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。NFC整合了非接触式读卡器、非接触式智能卡和点对点(Peer-to-Peer)通信功能,为消费者开创了全新的便捷生活方式。手机和NFC技术的结合,将会给消费者提供极大的生活便利,例如移动支付、位置服务信息、身份识别、公共交通卡等应用,在医疗保健、优惠券、智能海报等许多领域有也有巨大的应用潜力。
Android是由Google公司设计的开源智能操作系统,在手机和平板电脑等移动设备领域有着普遍的应用。在Android上配备了LCD、触摸屏、GPS、WiFi、蓝牙、重力传感器、感光器等实用外设,同时支持3G语音和数据业务。Android不仅提供基于Java开发的SDK(Software Development Kit,SDK),而且源代码是开放的。大量的应用程序支持,使得Android成为最为流行的智能手机操作系统。Android系统的开放性以及强大的通信功能,使得NFC的各种应用能在Android上便捷地实现,同时也可以进一步促进Android的普及和发展,丰富其应用功能。
1 NFC技术
1.1 NFC基础
NFC发源于无线射频识别(Radio-frequency identification,RFID)技术,但和RFID有区别。NFC采用双向识别和连接,通信双方不存在固定的主从关系,通信可以由任意一个NFC设备发起。NFC是在RFID和互联技术的基础上融合演变而来的一种新技术,是一种短距离无线通信技术标准。它可以在单一芯片上集成非接触式读卡器、非接触式智能卡和点对点的通信功能,运行在13.56 MHz的频率范围内,能在大约10 cm范围内建立设备之间的连接,传输速率可为106 kbit/s,212 kbit/s,424 kbit/s,甚至可提高到848 kbit/s以上。
NFC终端有3种工作模式:
1)主动模式,NFC终端作为一个读卡器,主动发出自己的射频场去识别和读/写别的NFC设备;
2)被动模式,NFC终端可以模拟成一个智能卡被读/写,它只在其他设备发出的射频场中被动响应;
3)双向模式,双方都主动发出射频场来建立点对点的通信。NFC 技术符合国际标准化组织的ISO18092 和ISO21481标准,兼容无线智能卡ISO14443标准[4],符合欧洲计算机协会的ECMA-340/356/373 标准。NFC 论坛(NFC Forum)是由诺基亚、飞利浦和索尼于2004年成立的非赢利性行业协会,是致力于推动NFC技术的专业组织。NFC论坛的技术架构及协议规范旨在发展近场通信技术规范,确保设备和服务的相互协调,普及市场对NFC技术的了解和认可。该论坛现有成员已经超过150名。NFC论坛推出了一系列的技术规范,以确保设备与设备阅读器之间的通信,规范包括数据交换格式(Data Exchange Format,NDEF)、记录类型定义(Record Type Definition,RTD)、伴随技术规范(NFC Text RTD Technical
Specification)和有关互联网资源的基本技术规范(NFC
URI RTD Technical Specification)以及各种标签(Tag)的操作规范。在近距离传输技术方面,飞利浦的MIFARE技术和索尼的FeliCa技术与NFC标准兼容,并且均得到广泛的应用,实际已经成为了标准的一部分。因此NFC技术充分具备低功率、低价格、广泛的兼容性等特点,而使NFC成为未来近距离无线通信领域一种极有竞争力的技术。
1.2 NXP PN544 芯片
在Android的应用设计中,采用的是恩智浦半导体(NXP Semiconductors)推出的PN544芯片,该芯片是符合业界标准的NFC控制器,同时符合欧洲电信标准协会(ETSI)制定的最新NFC规范,能够为手机制造商和电信营运商提供完全兼容的平台,用以推广NFC设备和服务。PN544芯片可应用于手机,为用户提供一系列崭新的非接触式应用,如移动支付、交通和大型活动票务以及直接从手机SIM(用户识别模块)卡进行资料共享等,进而改善用户的使用体验。PN544的其他主要优势包括:物理面积小,易于实现尺寸设计优化;低功耗优化;可选断电和低电压工作模式;主机基带支持MIFARE 1K/4K读写功能;可选模块化通用软件堆栈,不受平台限制;优化天线设计,实现最佳射频性能。
PN544支持标签和工作模式如图1所示。
在电路设计上,PN544同所有通过单线协议(Single Wire Protocol,SWP)连接SIM卡和主机控制器接口(HostControl Interface,HCI)的NFC规范完全兼容。HCI接口支持HSU,SPI和I2C。其物理连接示意图如图2所示。
2 Android NFC架构与实现
2.1 基本概念
为了支持NFC功能,Android允许应用程序读取标签中的数据,并以NDEF(NFC Data Exchange Format)消息格式进行交互。标签还可以是另外一个设备,即NFC设备工作在卡模拟模式。
在Android NFC的软件架构中,定义了以下数据结构:
1)NFC管理器(NFC Manager),是提供给应用程序的编程接口,是Android应用程序访问NFC功能的入口,主要为获取一个NFC适配器的实例。
2)NFC适配器(NFC Adapter)。一个NFC适配器代表一个NFC设备,提供一切NFC的操作,包括NFC设备开关、标签读写、NDEF数据交互、NFC安全访问、点对点通信等。
3)NDEF消息(NDEF Message),是设备和标签间传递的数据的标准封装格式,是由一个或多个NDEF数据记录组成。在应用程序中通过接收CTION_TAG_DISCOVERED Intent来读取NDEF消息。
4)NDEF记录(NDEF Record),是NFC论坛中定义的NDEF数据包的基本组成单元。一个NDEF数据包可以有一个或多个NDEF记录。
2.2 Android NFC架构与实现
在NFC 的Android 架构实现中,遵循Android 通用Service和Manager基本结构模型。NFC Manager给应用程序提供编程接口,通过Binder和Service通信,如图3所示。Android中基于Binder的IPC的基本模型是基于会话的客户/服务器Client/Server)架构的。Android使用了一个内核模块Binder来中转各个进程之间的会话数据,它是一个字符驱动程序,主要通过IOCTL与用户空间的
进程交换数据。一次会话总是发生在一个代理Binder对象和服务Binder对象之间,这两个对象可以在同一个进程中,也可以在不同的进程中。会话是一个同步操作,由代理Binder对象发起请求,一直要等到服务Binder对象将回复传递给代理Binder对象才算完成。
2.2.1 NFC Adapter的实现
NFC Adapter主要实现的功能如下:
1)设备初始化以及开关,相关程序段为
private static synchronized INfcAdapter setupService()
public boolean enable()
public boolean disable()
2)NDEF消息的读写和安全管理链接,相关程序为
public void setLocalNdefMessage(NdefMessage message)
public NdefMessage getLocalNdefMessage()
public NfcSecureElement createNfcSecureElementConnection()
3)P2P的后台通信,相关程序段为
public void enableForegroundNdefPush(Activity activity,NdefMessage msg)
public void disableForegroundNdefPush(Activity activity)
这些基本函数都是NFC Binder 客户端函数,通过Binder IPC调用Service对应的函数进行通信处理。
2.2.2 NFC Server的实现
在NFC Service中主要实现了以下功能:Adapter中的Binder 客户端函数对应的Service 端函数实现,包括INfcTag.Stub,INfcAdapter.Stub 等;Service 状态管理的消息处理;Java本地接口(Java Native Interface,JNI)的Na⁃
tive代码的访问接口。
以INfc.Stub代码实现为例,如图4所示。在客户端定义Android 接口定义语言(Android Interface DefineLanguage,AIDL)文件,该文件里面定义需要访问的功能接口,即可供客户端访问的方法和属性。在编译时AIDL文件自动产生Java源代码文件,该文件定义了一个名为Stub的内部抽象类,它继承扩展了接口并实现了远程调用需要的几个方法。在Server端向客户端提供接口,实现上述接口的类的实例。
在Android中所有的应用程序和核心框架都是通过Java实现,但是部分中间层代码则由C/C++实现,因此要实现Java和C/C++之间相互调用,则通过JNI来完成,其中C/C++部分的代码则成为本地代码(Native Code)。在NFC中,实现了LLCP、标签、Socket接口、NFC Manager的Native代码。以Native Manager的实现为例,如图5所示。
2.3 NFC HAL的实现
NFC HAL(Hardware Abstract Layer)层,是PN544的中间件,主要由C/C++实现,其结构如图6所示,包括以下功能:底层RF控制;NFC论坛定义的标签读写处理以及标签模拟;点对点通信;同单总线的SIM卡或者其他安全设施通信;对基于Felica,Mifare和ISO14443的RFID标签做兼容性处理。
在通用HAL部分,向外部调用提供接口,维护整个识别过程的状态转换,同时进行出错处理。共定义了如下11种HAL状态:
typedef enum LibNfc_State{
eLibNfcHalStateShutdown = 0x00,
eLibNfcHalInitInProgress,
eLibNfcHalInited,
eLibNfcHalShutdownInProgress,
eLibNfcHalStateInitandIdle,
eLibNfcHalStateConfigReady ,
eLibNfcHalStateConnect,
eLibNfcHalStateTransaction,
eLibNfcHalStatePresenceChk,
eLibNfcHalStateRelease,
eLibNfcHalStateInvalid
};
NFC FRI(Forum Reference Implemtation)是对NFCFroum定义的标准的实现,括支持NFC的3种工作模式、对各种标签的处理、PPP通信以及安全单元访问。
HCI层主要抽象了与物理层相关的各种操作,其操作集合列表如下:
HciNfc_Initialise
HciNfc_Config_Discovery
HciNfc_Restart_Discovery
HciNfc_Start_Discovery
HciNfc_Stop_Discovery
HciNfc_Configure
HciNfc_Switch_SmxMode
HciNfc_Switch_SwpMode
HciNfc_Connect
HciNfc_Reactivate
HciNfc_Disconnect
HciNfc_Presence_Check
HciNfc_Select_Next_Target
HciNfc_Exchange_Data
HciNfc_Send_Data
HciNfc_System_Test
HciNfc_System_Configure
HciNfc_System_Get_Info
HciNfc_PRBS_Test
DAL(Driver Apater Layer)层统一抽象了PN544所支的3种硬件连结方式的驱动操作方式,其操作集合列表如下:
Dal4Nfc_Register
Dal4Nfc_Unregister
Dal4Nfc_Init
Dal4Nfc_Shutdown
Dal4Nfc_Write
Dal4Nfc_Read
Dal4Nfc_ReadWait
Dal4Nfc_ReadWaitCancel
Dal4Nfc_Download()
Dal4Nfc_Reset
2.4 标签识别
在NFC的读/写标签、标签模拟以及点对点通信的应用中,以当前最常用的标签识别为重点,阐述Android的实现。识别一个标签的基本流程如图7所示。
在标签识别开始之前,必须先使能NFC设备,确认设备工作正常之后,即可获取NDEF消息。NFC HAL探测到有效距离范围内有标签存在,则读取数据,向NFC
Service发送标签识别事件,NFC Service广播NfcAdapter.
ACTION_TAG_DISCOVERED Intent 消息。应用程序通过接收该消息即可获取标签数据。
3 Android NFC使用实例
在系统设置中打开NFC功能后,NFC硬件设备即可检测到有效距离范围内的标签,读取数据后,即向系统发送Intent消息,应用程序接收该消息,解析其中的标签数据,进行相应的处理。
接收Internet消息程序段见图8。
解析NDEF消息记录程序段见图9。
进行数据显示,运行测试结果如图10所示。
4 小结
NFC是用于在近距离范围内的各种智能设备之间快速建立无线通信的关键技术。NFC不仅可以用于身份鉴别,还可以在两个无线智能设备之间进行双向数据交互。除了信息交互之外,NFC还为移动联网设备提供了一种安全机制,让用户不受时间空间的限制,能便捷地进行身份识别和传输各种数据信息。只要NFC设备处于有效的距离范围之内,智能设备双方便会自动进行安全验证和网络通信,用户无需依赖特定应用程序和设置。
这种经过NFC快速身份认证后再通过蓝牙、WiFi等高速、长距离传输的无线设备进行数据传输的方式,使得设备间能快速、安全地建立远距离、高速率的数据通信,从而实现广告等服务信息、位置信息数据获取、非接触式移动支付以及身份识别等功能。NFC有着广阔的应用前景,特别是在与Android等智能手机操作系统结合后,将充分发挥NFC的功能。
原文来自:《电视技术》