射频识别技术漫谈(11)——Mifare系列卡的共性
Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50、Mifare S70、Mifare UltraLight、Mifare Pro、Mifare Desfire等,由于Mifare的巨大影响力,业内有时把其它公司生产的遵守ISO14443A标准的射频卡也称为“Mifare”,尤其是Mifare S50卡片,几乎就是ISO14443A标准的代言人。
至于“Mifare”这个名字的由来,据说1998年Philips收购了瑞士的米克朗(Mikron)公司,该公司之前开发了一套收费系统叫作MIkron FARE-collection System,即米克朗收费系统,简写为Mifare。
Mifare系列卡片有时也根据卡内使用芯片的不同,把Mifare UltraLight称为MF0,Mifare S50和S70称为MF1,Mifare Pro称为MF2,Mifare Desfire称为MF3。
Mifare系列的共同特征就是遵守ISO14443A国际标准,这些共同特征描述如下:
1.它们都是接近卡PICC(Proximity ICC),读写距离最大10cm。
2.它们的射频频率都是13.56MHz±7KHz。
3.这些卡片都是无源免接触的,能量由读写器产生的射频场提供。
4.读写器产生的射频场的磁场强度在1.5A/m~7.5A/m之间,卡片在这个场强区间内可以连续的正常工作。
5.卡片首先进入读写器的射频场得电完成初始化,之后等待读写器的命令。读写器与卡片的数据交流总是采用RTF模式,即读写器先发出命令,卡片在规定的时间内对命令作出应答,如果读写器没有命令,卡片无论如何也不能先发言。
6.读写器向卡片发送命令使用100% ASK调制的修正米勒(Modified Miller)码,卡片应答时使用副载波调制的曼侧斯特(Manchester)码。
7.卡片与读写器之间通讯的数据速率有4种:106Kbps,212Kbps,424Kbps,847Kbps。但在读卡选择命令(含)之前,通讯速率只能是106Kbps。读卡选择之后,卡片和读写器可以协商使用什么样的速率。106Kbps是怎么来的,它是载波频率13.56MHz除以128得来的,通俗的说法是“载波128分频”。
8.卡片未进入射频场时称为断电(Power-Off)状态,进入射频场得电复位后进入休闲(Idle)状态,收到读写器的呼叫命令后进入准备(Ready)状态,经过防冲突循环被选中后进入激活(Active)状态,在激活状态收到休眠命令或不认识的命令后进入休眠(Halt)状态。
9.这些卡片都有一个全球唯一的序列号,序列号的长度可能是4字节,7字节或10字节。当多张卡片同时进入读写器的射频场时,卡片们遵守面向比特的防冲突机制,由读卡器选出唯一的一张卡片进行操作。读写器操作完一张卡片后,可以发送休眠命令让这张卡片进入休眠状态,而读卡器继续对其他卡片进行操作。
10.这些卡片在卡选择(含)之前的操作步骤都是一样的,卡选择之后的操作就不一样了,比如有的需要验证密码,有的不需要,而且验证密码的方式也有区别。
11.从卡片进入磁场到卡片被选中要经过两步。
第一步是读写器呼叫磁场内的卡片,卡片对呼叫做出应答。
(1)由于磁场内可能有刚进入磁场并得电复位处于休闲状态的卡片,也可能有已经被读写器操作过,被读写器发送休眠命令进入休眠状态的卡片,对这两类不同的卡片,读写器使用两种不同的命令进行呼叫:卡请求(REQA,0x26)和卡唤醒(WAKE-UP,0x52)。
(2)其中卡请求(REQA)只能呼叫处于休闲(Idle)状态的卡片,卡唤醒(WAKE-UP)可以呼叫所有卡片,包括处于休眠(Halt)和休闲状态的卡片。
(3)收到卡呼叫命令后,卡片将对命令做出应答(Answer To Request,ATQA),告诉读写器自己是否遵守面向比特的防冲突机制,如果不遵守,读写器自然就不会往下操作了,除非双方约好了一种特殊的防冲突协议,不过那就不叫“遵守ISO14443A”了。ATQA有两个字节,第一个字节的值没有规定(RFU),第二个字节的高两位b7b6表示卡序列号长度(“00”为4字节,“01”为7字节,“10”为10字节), b5位的值没有规定(RFU),b4-b0表示是否遵守面向比特的防冲突机制,如果遵守,b4-b0必须有且仅有1位为1。通常情况下,Mifare S50的ATQA是0004H,Mifare S70的ATQA是0002H,Mifare UltraLight的ATQA是0044H,Mifare Light的ATQA是0010H,Mifare Desfire的ATQA是0344H。业内习惯称ATQA为卡类型,并且称“Mifare S50的卡类型是0004H,Mifare S70的卡类型是0002H,Mifare UltraLight的卡类型是0044H,Mifare Desfire的卡类型是0344H……”,这种说法其实是不严谨的。已经出现了ATQA为0044H和0344H的卡片,但这种卡片并不是Mifare UltraLight和Mifare Desfire,而是一种新的7字节的Mifare S50。这很正常,因为ISO14443A中规定,ATQA的作用是卡片表明自己是否遵守面向比特的防冲突机制以及自身卡序列号的长度,并不是表示哪种类型的卡片。
(1)之所以把“防冲突”和“选择”放在一块说,是因为二者的命令码是一样的,区别在于命令码后面包含多少位已经确认的卡序列号。
(2)面向比特的防冲突机制每个防冲突循环需要32bit的卡号参加。读写器向所有参加防冲突的卡片发出一个防冲突命令码,并告诉卡片们已经确定了多少位卡序列号,让卡序列号前面部分与读写器发出的已经确认的序列号相同的卡片做出应答。
(3)如果已确认的卡序列号小于32位,就是防冲突命令,卡片将回送除了已确认卡序列号之外的剩余的卡序列号部分;如果已确认的卡序列号等于32位,就是卡选择命令了,被选中的卡片将作出对选择的应答(Select AcKnowledge,SAK)。
(4)防冲突和卡选择命令还有一个区别就是,卡选择命令有CRC_A校验,而防冲突命令没有CRC_A校验。
(5)如果卡片卡号是4个字节,防冲突选择的命令码是0x93。
(6)如果卡片卡号是7个字节,则要进行两个层次(cascade level)的防冲突选择,第一层(cascade level 1)的命令码是0x93;卡号的前3个字节参加;第二层(cascade level 2)的命令码是0x95,卡号的后4个字节参加。
(7)如果卡片卡号是10个字节,则要进行三个层次(cascade level)的防冲突选择,第一层(cascade level 1)的命令码是0x93,卡号的前3个字节参加;第二层(cascade level 2)的命令码是0x95,卡号的第4、5、6个字节参加;第三层(cascade level 3)的命令码是0x97,卡号的后4个字节参加。
(8)大家可能已经发现,前面说每个防冲突循环需要32bit的卡号参加,后面又说可以3个字节(24bit)参加,是不是前后矛盾?是的,为了凑够32bit,如果只有3个字节的卡号参加防冲突循环,则卡片自动在3个卡号字节之前增加一个字节0x88,这个0x88被称为层标签(cascade tag),从而满足防冲突循环对32bit卡号的要求。
(9)每一层的防冲突选择循环如果卡被选中,卡片都要返回“选择应答”(Select AcKnowledge,SAK),告诉读写器是否需要下一层的防冲突选择循环以及是否遵守ISO14443-4。
12.最后再次强调以上就是“共同遵守ISO14443A”的含义,也就是从卡片进入磁场到卡片被选中,它们的操作流程都是一样的。之后大家便分道扬镳,有的继续遵守ISO14443-4,有的开始验证密码,有的就直接可以进行读写操作了。
射频识别技术漫谈(11)——Mifare系列卡的共性的更多相关文章
- 射频识别技术漫谈(11)——Mifare系列卡的共性【worldsing笔记】
Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...
- 射频识别技术漫谈(20)——RC系列射频接口芯片
目前基于13.56MHz的射频识别技术主要有ISO14443A.ISO14443B.ISO15693和FELICA技术.针对13.56MHz的射频识别技术,NXP开发了一系列名字以RC(Radio C ...
- 射频识别技术漫谈(18)——Mifare Desfire
Mifare DESFire(MF3 IC D40/D41,本文以D40为例)遵守14443 TypeA协议,卡内的数据以文件形式存储,所以有人认为它是准CPU卡,主要用于安全性要求较高的非接触式领 ...
- 射频识别技术漫谈(13)——Mifare S50与Mifare S70
Mifare S50和Mifare S70又常被称为Mifare Standard.Mifare Classic.MF1,是遵守ISO14443A标准的卡片中应用最为广泛.影响力最大的的一员.而Mif ...
- 射频识别技术漫谈(13)——Mifare S50与S70【worldisng笔记】
Mifare S50和Mifare S70又常被称为Mifare Standard.Mifare Classic.MF1,是遵守ISO14443A标准的卡片中应用最为广泛.影响力最大的的一员.而Mif ...
- 射频识别技术漫谈(21)——RC系列射频芯片的天线设计
个人感觉使用RC系列射频芯片开发卡片读写器,主要的关键点有两个,分别涉及硬件和软件.软件上的关键是如何正确设置RC系列射频芯片内部的64个寄存器,硬件上的关键则是RC系列射频芯片的天线设计.天线提供了 ...
- 射频识别技术漫谈(16)——Mifare UltraLight
Mifare UltraLight又称为MF0,从UltraLight(超轻的)这个名字就可以看出来,它是一个低成本.小容量的卡片.低成本,是指它是目前市场中价格最低的遵守ISO14443A协议的芯片 ...
- 射频识别技术漫谈(22)——RC系列射频芯片的寄存器操作
前面提到,RC系列内部64个寄存器的正确操作是软件编写的关键.正确设置寄存器首先要做到与寄存器正确通信,其次是要对寄存器写入正确的值. RC系列射频芯片与微控制器的接口有并口和SPI接口两种类型.显然 ...
- 射频识别技术漫谈(14)——Mifare S50与S70的存取控制
存取控制指符合什么条件才能对卡片进行操作. S50和S70的块分为数据块和控制块,对数据块的操作有“读”.“写”.“加值”.“减值(含传输和存储)”四种,对控制块的操作只有“读”和“写”两种. S50 ...
随机推荐
- 如何利用Github Pages展示自己写的项目
接触github很久了,自己搭建过hexo博客,但是对于web项目托管github pages感觉很懵,所以在此总结分享给有需要的亲们. 教程开始: 1.创建一个新库 2.给库命名 3.创建新库后点击 ...
- JavaScript之对象学习
对象是一种非常重要的数据类型,他是一种自包含的数据集合,包含在对象里面的数据可以通过属性和方法两种形式来访问; 1.属性是隶属于某个特定对象的变量; 2.方法是只有某个特定对象才能调用的函数; 而对象 ...
- UnicodeEncodeError: 'latin-1' codec can't encode character 解决sae flask 中文问题
#encoding=utf-8 #中文编码支持 import MySQLdb from flask import Flask, g, request app = Flask(__name__) app ...
- [MAC Eclipse] Eclipse for MAC 中文乱码的解决办法
笔者将在windows下的eclipse写的代码拷贝到MAC下,发现中文会出现乱码. 最初笔者遇到这个问题的时候,在网络上寻找了解决办法,出来的第一个网页(http://blog.csdn.net/w ...
- js判断微信内置浏览器
做了一个h5页面来下载app,但如果页面是用微信扫一扫打开的,点击下载按钮下载不了app,原因是微信内置浏览器屏蔽了下载链接.所以增加了检测,如果用户是用微信浏览器打开的,则提示用户使用浏览器打开.那 ...
- [互联网面试笔试汇总C/C++-9] 实现赋值运算符函数-剑指offer
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStr ...
- software testing homework2
一.Checkstyle安装及使用 1.checkstyle插件包:http://sourceforge.net/projects/eclipse-cs/ checkstyle.xml配置文件:htt ...
- WL(Wear leveling)磨损平衡
前面说过,闪存寿命是以P/E次数来计算的,而WL就是确保闪存内每个块被写入的次数相等的一种机制.若没有这个机制,SSD内的闪存颗粒就无法在同一时间内挂掉,那对用户来说就是灾难. 会出现这种 ...
- HDU 3374 String Problem (KMP+最小最大表示)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3374 [题目大意] 给出一个字符串,求出最小和最大表示是从哪一位开始的,并且输出数量. [题解] ...
- 百度 LBS 开放平台,开发人员众測计划正式启动
Hi各位亲爱滴开发人员: 你是否以前-- 期望第一时间率先接触到百度LBS开放平台的最新功能? 期望被邀请作为最最尊贵的首批试用志愿者感受志愿者的特权? 期望自己的意见被产品经理採纳.优化功能.从 ...