NFC技术

NFC技术

1 简介

1.1技术背景

无线近场通讯技术(Near Field Communication,NFC),最早是Sony和Philip这两家公司共同开发的一种非接触式识别和互联技术,现在已经发展为国际性的非盈利组织 NFC Forum。该组织相当于蓝牙技术联盟(Bluetooth SIG)和WIFI联盟负责相关技术的规范制定和认证。

1.2技术原理

NFC利用无线射频技术实现设备之间的通信,工作频率为13.56MHz,有效距离为4cm左右,目前支持的数据传输速率有106Kbps、212Kbps和424Kbps这三种。

1.3技术应用

NFC提供了一种简单的、非接触式的解决方案,在移动设备、消费电子产品和智能设备间让使用者简单直观的交换信息、访问内容和服务。当前NFC技术整合了非接触式读卡器、非接触式智能卡和点对点(Peer-to-Peer)通信功能,为消费者创造了一个全新便利的生活方式

2 工作模式

NFC工作模式可以分为主动模式、被动模式与双向模式这三种。

2.1主动模式(读卡器模式)

NFC设备作为非接触读卡器使用,主动发出自己的射频场去识别具有NFC标签的设备,或者向NFC标签设备读写数据。应用领域包括广告读取、车票读取、电影海报读取、电影门票销售等。作为读卡器的NFC设备需要供电使用。

2.2被动模式(仿真卡模式)

具有NFC功能的设备模拟成一张NFC标签或非接触卡,只能在其他设备发出的射频场中被动响应。利用供电主设备产生的射频场转换成电能为自己供电接受主设备的数据并利用负载调制技术将自己的数据传回主设备。应用领域包括支持NFC功能的手机作为门禁卡、银行卡、公交卡等。

2.3双向模式(点对点模式)

具备NFC功能的设备间都主动发出射频场来建立点对点的连接进行数据交换。应用领域包括两个具备NFC功能的手机建立连接传输文件等。

3 数据结构

NDEF:NFC Data Exchange Format,NFC数据交换格式,NFC Forum约定的NFC Tag中的数据格式。一个NDEF message包含多个Record记录,真正的数据则都是封装在Record中的,NDEF与Record之间的关系及数据结构如图所示:
NDEF message:
在这里插入图片描述
Record:
在这里插入图片描述

4 NFC技术在Android中的应用

Android2.3.1(API Level = 9)才开始支持NFC技术,但Android2.x和Android3.x对NFC的支持还是非常有限的,而从Android4.0(API Level = 14)开始,Google向NFC发力才使得NFC技术在Android中得到了更进一步的支持。尤其是Android4.1,可以利用NFC技术传递较大的数据(NFC Handover也就是Android Beam技术)。Android9已经全面支持NFC的三种工作模式,从而以下分析也都是基于Android9。

5 NFC在安卓系统中的架构

NFC系统架构图:
在这里插入图片描述

以下章节会依次说明NFC架构图中各个模块的启动及作用。

5.1 NFC Framework

Android对外提供NFC功能的API,API主要方法都在android.nfc
package中,android.nfc.tech package补充了非NDEF数据格式的标签类型的连接及数据交互接口。相关Application直接通过NfcAdapter.getDefaultAdapter(Context)就可获取到NFC的适配器,应用apk的所有对NFC的操作都需要通过
NfcAdapter来工作。
NFC framework initialize:
在这里插入图片描述

5.2 NFC Service

NFC service服务是由NFC apk提供的,源码路径为:packages\apps\Nfc…,编译后会生成
NfcNci.apk 和 libnfc_nci_jni.so (下一节介绍)。

NfcNci.apk的AndroidManifest.xml中设置了安卓开机自启动属性:persistent=“true”,所以我们直接从NfcApplication.java开启NFC服务进程的讲解。下图为简单的NFC Service启动时序图。
apk initialize:
在这里插入图片描述

5.3 NFC JNI

源码路径:packages\apps\Nfc\nci\jni,编译生成 libnfc_nci_jni.so。由于编译JNI的so库包含有NFC Stack的so库,所以能直接在JNI中调用NFC协议栈中的相关方法。
在这里插入图片描述
加载JNI so库是在初始化NFC Service中的NativeNfcManager.java时,通过下面的调用加载进com.android.nfc所属进程中运行的。
在这里插入图片描述

5.4 NFC Stack

NFC协议栈的初始化主要是创建了NFC_TASK的线程,协议栈和底层Controller的消息交互主要是通过该线程转运的。
NFC Stack initialize:
在这里插入图片描述

5.5 NFC HAL Server

HAL(硬件抽象层)是Google为了保护硬件厂商的利益而在Android架构中加入了HAL的概念,使得上层不需关心硬件实现的具体细节,只需传入抽象层所需参数,就可以达到控制硬件的目的。

前面一小节初始化的NFC协议栈通过HIDL技术获取到了NFC HAL Server端的对象。HAL Server中通过HAL技术打开NFC
Controller提供的so库,从而可以操作NFC硬件。

发布了12 篇原创文章 · 获赞 5 · 访问量 508

猜你喜欢

转载自blog.csdn.net/weixin_44260005/article/details/103031975
NFC