NFC协议学习分享
在对NFC的某一个规范进行学习之前,首先要对NFC规范的整体架构有一个大致的了解,这样的话,才能从整体上进行把握。这里引用了NFC FORUM中一个公开文档中的三个架构图。NFC有三种工作模式,读卡器(R/W),卡模拟(CE)和点对点(P2P),那么这三种模式也对应着不同的协议架构,这个其实与蓝牙中的profile很类似,即针对不同的应用,有不同的协议组合。
Analogue,也就是NFC物理层的协议,主要定义了NFC设备的射频特性,如射频场的波形、强度等。
Digital Protocol,数字协议。实际上这里就可以把它理解成NFC的MAC层协议,它定义了三种NFC技术,NFC-A/B/F,分别对应着ISO14443 TYPEA、TYPEB以及Felica的规范,其中包括了初始化、冲突检测等。同时它也定义了传输协议,如NFC-DEP,ISO-DEP等。这个数字协议实际上就是ISO/IEC14443, ISO18092的一个合体(ISO-DEP基于ISO 14443, NFC-DEP基于18092)。
这里要说明一下,在这个架构图中其实还有一个Activity的规范,它可以说是Digital的一个补充。Digital中定义了帧格式,编码等通信的功能,但是如何使用Digital中的定义的帧来完成通信,则是在Activity规范中定义的。Activity中定义了一大堆的流程图及状态转移图,用来描述Digital规范中的内容是如何工作的,这样看来其实Acitivity规范也应该就是Digital中的一部分。
以上这三个协议是NFC通信的基础,在NFC的三种模式下,都要使用这三个底层的协议。可以说这三个协议是整个NFC通信的基础,掌握了这三个协议可以说对于NFC的理解就成了一半。当然这也是NFC中阅读起来最难的三个协议,当然了如果你对ISO14443/18092有了解的话,理解起来就比价轻松了,毕竟这些底层协议与非接触卡规范是一脉相承的。
TYPE1-4 TAG OPERATION: 定义了如何从TYPE1/2/3/4中读写NDEF消息。这里TYPE1/2对应着ISO14443TYPEA,而TYPE3对应着SONY的Felica,TYPE4是一个开放的TAG标准,即ISO14443 TYPEA TYPEB和ISO 7816-4;
Analogue/Digital/Activity上面已经介绍过了。
1.1 操作模型
最重要的NFC与操作模型相关的标准是NFCIP-1和NFCIP-2。
NFCIP-1整合了两个RFID通讯协议:MIFARE和FeliCa,扩充了新的通讯可能性和新的传输协议。NFCIP-2整合了NFC中RFID读取者的功能。这是NFC与大多数RFID设备相兼容的方式。
RFID有严格的一个或多个被动组件(tags)和一个主动组件(reader),NFC打破这种观点。对于NFC设备而言,它可以与其它每一个组件通讯,包括标签和读者/写者。为了保证这种方式,NFC论坛定义了如下几种操作模型:点对点模型(Peer to Peer Mode),读者/写者模型(Reader/Writer Mode)和卡模拟模型(Card Emulation Mode)。系统综述在图1中给出,根据算法决定使用哪种模式,获取其它在NFCIP-2中定义范围内的NFC设备的信息。
鉴于大多数RFID读者被设计成只有主动设备的范围内,对于NFC设备,假设这个是不可取的,因此要用到碰撞避免(collision avoidance)。作为适当的可用性,设备识别的速度保持在200ms以上。很多NFC设备是移动的拥有有限的电量,高速的识别跟耗能。这将一直有一个折衷在快速识别和能量消耗之间。
1.1.1 点对点模式
点对点模式能够在两台NFC设备之间通讯。开始通讯的设备称作发起者(Initiator),另外一个称作目标(Target)。
点对点模式的协议栈与OSI Reference Model很相似,但是点对点模式只有4层:物理层(Physical),媒体接入控制层(Media Access Control),逻辑链路控制层(Logical Link Control)和应用层(Application)。物理层和应用层与OSI Reference Model一样。MAC和LLC组成数据链路层,如图-2所示。物理层和MAC层在NFCIP-1中定义,LLC层是NFC论坛定义的技术规范。
主动通讯模式和被动通讯模式在NFCIP-1中是有差别的:
“在主动通讯模式中,发起者和目标共享他们自己的RF域来实现通讯,发起者开始NFCIP-1通讯,目标在主动通讯模式中使用自生RF域中的调制来响应一个发起者的命令。”
“在被动通讯模式中,发起者产生RF域并开始通讯,目标在被动通讯模式使用负荷调制方案来响应发起者命令。”
这两种模式的主要区别是发起者和目标的能量消耗。在主动通信模式中产生RF域的能量是有发起者和目标共同承担的,而在被动的沟通模式中发起者必须供应产生域所需要的能量。
为了保证完整的通讯,NFCIP-1定义了如下协议流:在默认情况下,所有的设备应该保存在目标模式,不产生RF域。只有在响应应用和应用定义使用主动或被动通讯模式时设备才切换为发起者模式。发起者在产生RF域之前必须检查是否有其它活跃发送者保证没有其它通讯被干扰。如果没有其它RF域被检查到,发起者就开始通讯并通知目标使用主动或被动通讯模式和传输速度。在通讯结束,两个设备都要切回到目标模式并且停用他们的RF域。
在MAC层,只有发起者能开始数据传输,LLCP保证异步平衡模式(ABM)。此外目标能够启动一个数据发送和错误恢复。LLCP能够管理多个应用在同一时刻多点接入的多路技术。它提供了一个用最少的协议开销的连接传输协议,高层协议使用的流量控制机制。也提供面向连接的传输协议,它保证数据单元的逐一传送。LLCP不提供安全的数据传输模式。
1.1.2 读者/写者模式
读者/写者模型允许NFC设备与NFC论坛标签通讯。这些标签是典型的被动组件。因此,这种模式也被称为被动模式。这些标签出现在海报或其它地方,它们通过被NFC设备扫描将所存储的设备传送给NFC设备。他们能包含单一信息(例如网络地址)或者在设备上执行活动(例如连接无线网络)。这种模式完全兼容ISO/IEC 14443和FeliCa技术,正因为这样,所以NFC设备能够当作读者/写者在存在RFID基础设施。NFC论坛不包含附近系统(Vicinity systems)到读者/写者模式,但是NFCIP-2包含。
1.1.3 卡模拟模式
可选的卡模拟设备允许NFC设备与已知的RFID读者通讯。这些设备可以模拟一个或多个RFID智能卡。这种模式是有可能的使用现有的非接触式的基础设施,例如:支付或接入控制。智能卡的模拟可以用于应用或在称作安全元件(Secure Element)。安全元件像真实智能卡的设备,只是作为NFC设备传输数据的接口。
与读者/写者模式结合,有可能实现与点对点模式相似的模式,但是这样更简单,因为不需要在点对点模式中的协议栈。与正确的硬件实现就可能使用这种模式即使NFC设备切断或者缺少能量
NFC协议学习分享的更多相关文章
- python 学习分享-paramiko模块
paramiko模块学习分享 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BS ...
- Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文
前言 之前也分享了不少自己的文章,但是对于 Flink 来说,还是有不少新入门的朋友,这里给大家分享点 Flink 相关的资料(国外数据 pdf 和流处理相关的 Paper),期望可以帮你更好的理解 ...
- python paramiko模块学习分享
python paramiko模块学习分享 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Sola ...
- ElasticSearch 5学习(7)——分布式集群学习分享2
前面主要学习了ElasticSearch分布式集群的存储过程中集群.节点和分片的知识(ElasticSearch 5学习(6)--分布式集群学习分享1),下面主要分享应对故障的一些实践. 应对故障 前 ...
- ElasticSearch 5学习(6)——分布式集群学习分享1
在使用中我们把文档存入ElasticSearch,但是如果能够了解ElasticSearch内部是如何存储的,将会对我们学习ElasticSearch有很清晰的认识.本文中的所使用的ElasticSe ...
- TCP/IP协议学习(五) 基于C# Socket的C/S模型
TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...
- http协议学习系列
深入理解HTTP协议(转) http://www.blogjava.net/zjusuyong/articles/304788.html http协议学习系列 1. 基础概念篇 1.1 介绍 H ...
- BGP协议学习总结
BGP学习总结 BGP是目前使用的唯一的自治系统间的路由协议,它是一种矢量路由协议,基于TCP的179号端口,它采用单播增量更新的方式更新路由,与其他的路由协议不同的是,BGP只要TCP可达,就可以建 ...
- TCP/IP协议学习之实例ping命令学习笔记
TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...
随机推荐
- jQuery中$符号冲突问题 (转载)
Jquery的$命名冲突: 在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg') 的写法.然而,当我们引入多 ...
- Django uplodify 多文件同时上传
Js代码: //批量上传按钮 $('#fileupload').uploadify ({ 'swf' : '/CoveragePlaform/media/uploadify-3.2/uploadify ...
- C语言经典算法100例
[程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. ...
- Qt 自定义事件详细实例(继承QEvent,然后QCoreApplication::postEvent()、sendEvent())
创建用户事件 创建一个自定义类型的事件,首先需要有一个事件号,其值通常大于QEvent::User.为了传递事件信息,因此必须编写自定义的事件类,该事件类从QEvent继承. 编写用户事件:编写用户事 ...
- python分布式抓取网页
呵呵,前两节好像和python没多大关系..这节完全是贴代码, 这是我第一次写python,很多地方比较乱,主要就看看逻辑流程吧. 对于编码格式确实搞得我头大..取下来页面不知道是什么编码,所以先找c ...
- Unity扩展让枚举视图中变成多选框
如图: 定义属性描述特性(因为没有描述的数据,让绘制类去绘制所以为空) using UnityEngine; using System.Collections; public class EnumFl ...
- URL 对特殊字符的处理
看到很多人说可以通过转移字符来进行转义,避免URL在请求的时候出错. 现在有了更好的方法了.不然还不得把半个ASCII码表给进行转义了! import java.io.UnsupportedEncod ...
- SQL创建登陆用户和赋予权限
主要针对Sql server 2005及以上,创建简单用户名和密码所引起的密码简单的问题.解决方案 CHECK_POLICY = OFF; --强制密码策略 use MusicStore --创建登陆 ...
- Android服务之AIDL
在android开发过程中,为了让其他的应用程序,也可以访问本应用程序的服务,android系统采用远程过程调用来实现.android通过接口来公开定义的服务.我们将能够夸进程访问的服务成为AIDL服 ...
- SyntaxError: Non-ASCII character '\xe2' in file 编码错误
Editing .py file in the Notepad: But when run in the PowerShell, I found the follwing error: It seem ...