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命令的整个详 ...
随机推荐
- Primo Ramdisk配置教程
首先感谢xiaohu在太平洋电脑网上发表的“将内存当硬盘用!Primo Ramdisk图文教程”,本文主要是将其图文整理了一下,以方便以后使用. 原文地址:http://fashion.pconlin ...
- Keil C51汉字显示的bug问题(0xFD问题)
一.缘起 这两天改进MCU的液晶显示方法,采用“即编即显”的思路,编写了一个可以直接显示字符串的程序.如程序调用disstr("我是你老爸");液晶屏上就会显示“我是你老爸”. 二 ...
- Qt学习(四)—实例涂鸦画板mspaint
一.Qt图形绘制 自己在Qt开源社区在自学yafeilinux前辈的<Qt快速入门系列教程>中的图形篇,结合所学的知识,可以做一个涂鸦板实例 二.实现涂鸦板 1.新建工程mspaint, ...
- C# Process类_进程管理器Demo
Process用于管理计算机的进程,下面给出一个C#进程管理器的DEMO. namespace ProcessManager { public partial class Form1 : Form { ...
- Fatal error: Allowed memory size of 8388608 bytes exhausted
这两天安装bugfree,更换了一个数据量较大的库,结果打开bug详情页要么是空白页,要么就报如题的错误,错误信息还包括C:\wamp\www\bugfree\Include\Class\ADOLit ...
- devStack
1,devstack shell 脚本开源官网 http://devstack.org/ 脚本功能快速搭建 OpenStack 的运行和开发环境 [Note tips by Ruiy devstack ...
- PHP Database ODBC 之 ODBC
ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数据库). 创建 ODBC ...
- php 中利用json_encode和json_decode传递包括特殊字符的数据
</pre><span style="font-size:24px"></span><pre name="code" ...
- [英国][记录][战争中的世界:二战全史(26集)][BD-MKV/58G][中英双字][经典收藏]
[英国][记录][战争中的世界:二战全史(26集)][BD-MKV/58G][中英双字][经典收藏] 原片名:The World at War 中文名:战争中的世界 导 演:Ted Childs, ...
- android 硬件解码学习
FileInputStream in = new FileInputStream("/sdcard/sample.ts"); String mimeType = "vid ...