NFC读写器的简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFC读写器的简介相关的知识,希望对你有一定的参考价值。

参考技术A

NFC读写器是具有读取NFC标签功能的专用读卡设备。因此NFC读写器必须能够读到所有的NFC标签才能算真正的NFC读写器。NFC标签大致分为: ISO14443-A,B、TOPAZ、MIFARE和Felica。NFC是Near Field Communication的缩写,即近距离无线通讯技术。由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC 和智能控件工具间进行近距离无线通信。NFC 提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。
以市面上最流行的NFC读写器ACR122U为例:
ACR122是一款在频率为13.56MHz的射频技术上开发出来的的连机智能卡读写器,符合ISO/IEC18092(NFC)标准。它不仅支持Mifare卡和符合 ISO 14443标准的 A类和B类卡,而且还支持NFC以及FeliCa非接触式技术。
此外,ACR122 是一款符合CCID 标准的USB热插拔设备,是个人身份安全认证以及网上小额支付等应用领域的理想选择。此外,它还可以广泛地应用于访问控制、电子支付、公交电子票务、高速公路收费系统、网络验证、物流以及供应链管理等领域。
ACR122是一款USB全速设备(12 Mbps),能以212 Kbp、242Kbp的速度读取NFC标签,因而这款设备相对于同类设备而言,其读写速度更快而且效率更高。操作则根据非接触标签而定,最大可达5cm。
为了提高安全系数, 您可选择在ACR122中配置一个符合ISO7816-3标准的 SAM 卡槽。此外,ACS还可以提供ACR122模块,便于嵌入到大型的设备中,比如POS终端、门禁设备以及自动贩卖机等等。
最新的NFC读写器 还有 ACR1251U,支持全NFC功能,功能强大。

NFC的读写实现--高上

NFC简介:

Near Field Communication 近场通信,是一种数据传输技术。

与wifi、蓝牙、红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4cm。


NFC支持3种工作模式:

1.读卡器模式;

2.仿真卡模式;

3.点对点模式;


1.读卡器模式:

通过NFC设备(支持NFC的Android手机)从带有NFC芯片的标签、贴纸、报纸、明信片等媒介读取信息,或将数据写到这些媒介中。


2.仿真卡模式:

是将支持NFC的手机或其他电子设备当成借记卡、信用卡、公交卡、门禁卡等IC卡使用;基本原理是将相应的IC卡中的信息(支付凭证)封装成数据包存储在支持NFC的手机中,在使用时还需要一个NFC射频器(相当于刷传统IC卡时使用的刷卡器),将手机靠近NFC射频器,手机就会收到NFC射频器发过来的信号,在通过一系列复杂的验证后,将IC卡的相应信息传入NFC射频器,最后这些IC卡数据会传入NFC射频器连接的计算机,并进行相应的处理(如电子转账、开门等操作)。


3.点对点模式:

与蓝牙、红外差不多,可以用于不同的NFC设备之间进行数据交换,只是NFC的点对点模式有效距离更短,不能超过4cm;但是如果两个设备使用的都是Android4.2及以上版本,NFC会直接利用蓝牙传输,这种技术被称为Android Beam,所以Android Beam传输数据的两部设备不局限于4cm之内。


基础知识:

1.Android SDK API主要支持NFC论坛标准(Forum Standard),这种标准被称为NDEF(NFC Data Exchange Format,NFC数据交换格式);


2.Android SDK API支持如下三种NDEF数据的操作:

a.从NFC标签读取NDEF格式的数据;

b.向NFC标签写入NDEF格式的数据;

c.通过Android Beam技术将NDEF数据发送到另一部NFC设备;


3.在一个NFC设备读取NFC标签或另一个NFC设备中的数据之前会在0.1秒的时间之内建立NFC连接,然后数据会自动从被读取一端流向读取数据的一端;数据接收端会根据具体的数据格式和标签类型调用相应的Activity(这种行为也称为Tag Dispatch),这些Activity都需要定义Intent Filter,这些Intent Filter中就会指定不同的过滤机制,分为三个级别,也称为NFC的三重过滤机制。


4.NDEF_DISCOVERED:

只过滤固定格式的NDEF数据。例如:纯文本、指定协议(http、ftp、smb等)的URI等;


  TECH_DISCOVERED:

当ACTION_NDEF_DISCOVERED指定的过滤机制无法匹配Tag时,就会使用这种过滤机制进行匹配,这种过滤机制并不是通过Tag中的数据格式进行匹配的,而是根据Tag支持的数据存储格式进行匹配,因此这种过滤机制的范围更广;


  TAG_DISCOVERED:

如果将NFC过滤机制看成if...else if...else语句的话,那么这种过滤机制就相当于else部分,当前面两种过滤机制都匹配失败后,系统就会利用这种过滤机制来处理,这种过滤机制用来处理未识别的Tag(数据格式不对,而且Tag支持的格式也不匹配)。


5.Android系统会依次匹配NDEF_DISCOVERED、TECH_DISCOVERED和TAG_DISCOVERED;如果通过三重过滤机制仍然无法匹配Tag,则什么都不做;通常在成功匹配Tag后,Android设备会发出比较清脆的声音,而未成功匹配Tag,就会发出比较沉闷的声音。


此过程的处理流程如下图所示:


6.在manifest文件中需要设置的部分有:

设置权限:

<uses-permission android:name="android.permission.NFC" />


限制Android版本:

android:minSdkVersion="14"


限制安装的设备:

<uses-feature  android:name="android.hardware.nfc"  android:required="true" />


设置Activity的Intent Filter,比如设置为三种过滤机制的一种:

<intent-filter>
    <action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>


接下来,我们来第一个例子,这个例子是属于读卡器模式,从NFC芯片中读取和写入数据。

它的manifest文件内容如下:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.r8c.nfc_demo"  
  4.     android:versionCode="110"  
  5.     android:versionName="1.1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="15"  
  9.         android:targetSdkVersion="17" />  
  10.     <!-- NFC权限声明 -->  
  11.     <uses-permission android:name="android.permission.NFC" />  
  12.   
  13.     <uses-feature  
  14.         android:name="android.hardware.nfc"  
  15.         android:required="true" />  
  16.   
  17.     <application  
  18.         android:allowBackup="true"  
  19.         android:icon="@drawable/ic_launcher"  
  20.         android:label="@string/app_name"  
  21.         android:theme="@style/AppTheme" >  
  22.   
  23.         <activity  
  24.             android:name="com.r8c.nfc_demo.NfcDemoActivity"  
  25.             android:configChanges="orientation|keyboardHidden|screenSize"  
  26.             android:label="@string/app_name"   
  27.             android:launchMode="singleTask">  
  28.             <intent-filter>  
  29.                 <action android:name="android.intent.action.MAIN" />  
  30.   
  31.                 <category android:name="android.intent.category.LAUNCHER" />  
  32.             </intent-filter>  
  33.             <!-- TECH_DISCOVERED类型的nfc -->  
  34.             <intent-filter>  
  35.                 <action android:name="android.nfc.action.TECH_DISCOVERED" />  
  36.             </intent-filter>  
  37.             <!-- 后设资源  调用自己建立的文件夹xml中的文件 -->  
  38.             <meta-data  
  39.                 android:name="android.nfc.action.TECH_DISCOVERED"  
  40.                 android:resource="@xml/nfc_tech_filter" />  
  41.         </activity>  
  42.     </application>  
  43.   
  44. </manifest>  


它的Activity的内容如下,包括读取、写入、删除三大功能:(其中删除功能是通过写入空值来实现的)

[java]  view plain  copy
  1. import java.io.IOException;  
  2. import java.io.UnsupportedEncodingException;  
  3. import java.nio.charset.Charset;  
  4.   
  5. import android.media.AudioManager;  
  6. import android.media.MediaPlayer;  
  7. import android.media.RingtoneManager;  
  8. import android.net.Uri;  
  9. import android.nfc.FormatException;  
  10. 讲解:NFC之PN532使用

    与 Flex 的 USB 智能卡读/写器 (NFC) 交互

    带有JewelTopaz512 NFC标签的ACR122U读写器发出 "超时,目标未应答"

    记录使用微信小程序的NFC和蓝牙功能读取15693芯片的开发历程

    web调用IC卡读卡器开发第七章--NFC标签NDEF数据

    RFID读写器的介绍