NFC通信的模式选择
2024-10-18 21:24:43
1.nfc 怎么选择操作模式的?——怎么在 PCD VCD NFC 模式中做出选择?
我知道 iso 15693中有说明但是不太懂啊。
如果周围检测到 RF场存在,就能直接认定并选择 NFC 模式?
如果没检测到RF场存在,又怎么在那3种模式中选择?
首先我觉得应该澄清一个概念,就是你所提到的NFC模式。我猜你所说的应该是ISO18092中所定义的通信方式吧? 在NFC中定义了三种不同的模式:
- 读卡器模式:运行着NFC Forum所定义的Type1/2/3/4 Platform,也就是所说的PCD/VCD,对应着ISO14443的协议,目前,NFC Forum中也加入了对VCD的支持。读卡器下也可以是ISO18092中定义的Initiator;
- 卡模拟模式:运行着NFC Forum所定义的Type4A/4B的TAG,也就是我们所说的PICC;卡模拟也可以使ISO18092的Target
- 点对点模式:定义在ISO18092中的Initiator和Target;
关于模式的选择,完全是由上层的应用程序来决定。比如说你的NFC手机运行一个读公交卡的应用程序,那么这时候NFC模块或NFC芯片就工作在读卡器模式;如果运行一个Google wallet的应用程序,那么NFC芯片就被设置成卡模拟的模式;如果运行一个文件传输的应用程序,如File expert,那么你的NFC芯片就会被设置成为点对点通信的模式。所以说,NFC的模式选择,完全取决于上层的应用程序,这里我就简单的从NFC协议的角度来分析如何进行模式的设置。
1. 初始化
当手机中的NFC模块(芯片)被开启时,会初始化一些参数,这个时候NFC芯片处于一个IDLE的状态,该状态下,NFC芯片不会产生射频场,此时它处于侦听模式下。但是需要注意的是,此时的NFC芯片并不会工作在上述三种模式中的任何一种。
2. 模式的配置
当相应的应用程序启动后,NFC芯片会得到相应的模式配置,这里描述几个比较重要的参数:
(1) 技术:该词是NFC规范中的专有名词,NFC-A/B/F,对应着ISO14443 A/B及Felica
(2) 通信模式:主动通信和被动通信
(3) 工作模式:Poll,Listen
这三个参数的组合对应着不同的模式,如(NFC-A,POLL,被动通信)表示,此时NFC工作在一个读卡器模式下;如(NFC-A,Listen,被动通信)表示NFC工作在卡模拟的模式;如(NFC-F,Poll,主动通信),表示NFC工作在点对点的模式下。当然了,可以给NFC芯片配置多个这样的参数组。除了这三个参数外,还有其它的参数,比如RF协议(ISO-DEP/NFC-DEP等),传输速率,所能支持的最大负载长度等,这里就不详细说明了。
3. 发现
当NFC芯片的模式配置好后,如果NFC芯片被配置为POLL下,那么NFC芯片将会打开射频场,并根据配置模式进行发现过程,来发现周围的NFC设备。在NFC规范中,发现的顺序为NFC-A->NFC-B->NFC-F->私有技术。当周围有多个目标设备或一个目标设备却支持多种RF协议的话,那么NFC芯片将会向上层应用通告目标设备,让上层应用来决定如何选择。如果NFC芯片被配置为LISTEN下,那么NFC芯片就会等待对方设备发来的POLL命令,如SENS_REQ/SENSF_REQ等。
4. 激活
当目标设备被选中后,将会进行设备/协议的激活,如使用NFC-DEP的传输协议,那么就需要ATR_REQ/RES的流程;
5. 链路激活
这一步是针对点对点通信的,如果使用LLCP的话,还需要对LLCP链路进行激活。
当底层链路建立好后,那么NFC设备间就可以进行通信了。
这里再说明一下,第一步初始化,也有可能不同芯片有不同的实现方式,初始化就会进入某一个模式;第二步配置和第三步发现,实际上在NFC的规范中,被合成了一步。通过一个发现命令,其中包括了模式的参数,就完成了发现过程。
最新文章
- 释放Android的函数式能量(I):Kotlin语言的Lambda表达式
- 谈谈jQuery之绑定事件
- SQLServer公历转农历函数(1900年-2049年)
- iostat命令
- Azure支持docker简介以及使用指南
- html 如何引入一个公共的头部和底部
- 向Int数组插入随机1到100
- 开VPN后能上网
- java 获取本机ip及mac地址
- 【POJ2186】受牛仰慕的牛
- hdu1020
- Android sdk content loader
- Java层与Jni层的数组传递(转)
- Android开发 旋转屏幕导致Activity重建解决方法(转)
- hbase存储优化
- AFDX总线协议规范
- 关于H5在微信浏览器内自动转格式,导致不能正常打开的问题
- Python之常用模块--collections模块
- [Gym-102091E] How Many Groups
- 使用ORM进行前后端数据交互
热门文章
- 不同服务器数据库之间的数据操作 sp_addlinkedserver
- 分布式文件系统 Mogilefs 安装步骤
- POJ 1094 Sorting It All Out (拓扑排序) - from lanshui_Yang
- jdk8预览
- Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/
- svn add后的数据如何取消-svn revert??--zz
- UESTC_The Most Wonderful Competition CDOJ 56
- autoprefixer安装或者里sass的$mixin处理浏览器前缀
- [LeetCode] Interleaving String [30]
- 使用AsyncTask实现图片加载