M1卡操作说明 M1(米克朗收费系统,简写为Mifare)卡简介: M1芯片,是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,截止到2013年11月4日,已经有国产芯片与其兼容,利用PVC封装M1芯片、感应天线,然后压制成型后而制作的卡即是智能卡行业所说的M1卡,属于非接触式IC卡。非接触式IC卡又称射频卡,成功地解决了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。主要用于公交、轮渡、地铁的自动收费系统,也应用在门禁管理、身份证明和电子钱包。 常见的M1卡有: 1、Mifare_UltraLight 这种卡和S50 S70 是差不多的,仅在卡片的容量上面有所区别; 2、S50 S70 这种卡片非常常见,S50 S70的区别主要是在卡片的存储容量上的区别,对于数据的操作没有变化; 3、Mifare_Pro(X)好像是CPU卡,这类卡片也复合1443-A协议; 4、Mifare_DESFire 这种卡片有4K的存储空间在公路收费系统中可以看到,这类卡的安全性相对比较复杂。 5、 ISO-1443协议: 这类通信协议规范了非接卡的通信协议,1443协议有多个版本,需要按照特定的卡实现对应的协议,以保证成功的读取到非接卡中的数据。 RC522芯片简介: MF RC522 利用了先进的调制和解调概念,完全集成了在13.56MHz 下所有类型的被动非接触式通信方式和协议。支持 ISO14443A 的多层应用。其内部发送器部分可驱动读写器天线与ISO 14443A/MIFARE卡和应答机的通信,无需其它的电路。接收器部分提供一个坚固而有效的解调和解码电路,用于处理ISO14443A 兼容的应答器信号。数字部分处理ISO14443A 帧和错误检测(奇偶 &CRC)。此外,它还支持快速CRYPTO1 加密算法,用于验证MIFARE 系列产品。MFRC522 支持MIFARE?更高速的非接触式通信,双向数据传输速率高达424kbit/s。 M1卡数据结构简介: M1(S50)卡有16个扇区,每个扇区里面有4个数据块,其中0-2这三个块用于数据的存储,第3块用于实现对0-2块的读取密码和操作权限的管理。 数据块的结构如下: 第0扇区的第0块为厂家定义数据段,该数据段为只读数据段。该数据段内包含了4位或7位的全球唯一设备ID号。 除此扇区外,其他扇区的0-2块可以用于数据的存储。 其中数据的存储可以分为两种模式: 1、用于EEPROM使用,可以实现对数据块的读写操作。 2、用于数据值操作,即电子钱包操作,可以实现对数据的读写、加、减数值操作; 每个扇区的3号块为控制数据块,其数据的分布格式如下所示: 每个扇区的密码及存取控制都是独立控制,可根据自己的需求来进行对多个扇区和或单个扇区的数据管理。存储控制有4个字节但仅适用了前3个字节,第4个字节为备用字节,NXP并没有定义该数据的意义,可根据自己的需求来进行修改,实现对数据的校验操作。 存储控制块的位定义格式如下: 7 6 5 4 3 2 1 0 C20_B为C20的相反数 当需要修改对对应的块的存储操作模式时,需要按照上述的数据格式分布要求对进行进行处理,若数据格式不对将导致数据的写入失败。注:本扇区为敏感扇区,操作需要小心,一旦密码或存储控制写错,可能导致本扇区或对应的数据块无法进行读写操作。 对于数据块的存储控制数据格式如下: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps182C.tmp.jpg 对于数据块3,即存储控制数据块的数据控制如下: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps183D.tmp.jpg M1卡操作流程图: 寻卡->防冲突->选卡->验证秘钥->对数据块进行操作 M1卡的应用开发说明: 1、数据块的操作: 即将M1卡当做一个EEPROM来进行操作,用户可以将需要携带的数据或存储到M1卡的数据块中。可用于开发实现诸如考情记录、库存记录、操作授权与撤销控制。 这类数据的开发相对容易,在实现了对M1卡的寻卡防冲突选卡验证秘钥等操作后基本就可以将其认为是一个EEPROM来进行操作。 2、值操作: 实现对M1卡的值操作目的是为了实现电子钱包功能,将对M1的数据价值和减值操作分开来做,不同的终端配置不同的密码权限来实现对对电子钱包的扣款或充值操作。 M1卡的只要可以进行读写操作的非控制扇区都可以作为值操作的扇区。其唯一的操作要求是: 4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地 址取反 。 典型案例如下: u8 data1[16] = {0x12,0x34,0x56,0x78,~(0x12),0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,USE_SECTOR,~(USE_SECTOR),USE_SECTOR,~(USE_SECTOR)}; 注意: 1、金额是按照小端模式存储,低位在前,高字节在后。 2、块地址为当前的存储地址块号,其算法为(扇区+1)*4+块号,该出的地址与实际的地址不同M1不会认为当前数据块为值操作数据块。 3、存储控制块的操作: 对于这类块的操作,其基本的操作流程和EEPROM的操作相同,但因为这个的特殊性,对于密码A的读取在任何一种操作模式下都是禁止的,固其读回来的数值始终为0,当需要从新写入时记得将密码A的重新填写到buff中,否则直接写入0的话,密码A将会变成6个零,这点需要注意。 对于密码A和密码B的操作是一样的,当修改完密码后,需要注意确认最后写入的数据是否是自己想要的数据,因为在开发过程中使用了指针这类操作,导致溢出而将密码变成随机数而导致密码丢失而让自己毁掉了几个扇区,需要注意。 对于读取操作的控制,建议使用结构体的方式将控制控制中的3个字节进行分类获取出来,然后对单个块的数据进行一一解析,这类操作虽然会带入大量的重复性code,但是相对开发而言思路比较清晰,只是在做验证的时候需要进行多次操作才可以确认无误。对于这块的操作建议是先验证在实操,一旦写错,该扇区极有可能被锁死而导致后期无法调试。 固请注意。 4、代码操作流程说明: Tip:在本代码的数据发送中,因为没有采用中断管脚的方式来进行RC522的状态读取,所以采用了软件超时的处理机制,因为在不同的单片机的计算时间上有区别会导致单步调试成功而全速跑异常,需要在移植过程中注意。特别是在对M1卡实现值操作过程中,因为需要计算数据而导致卡片的反应变慢更加需要注意这类软延时的实际有效时间。 5、M1卡防冲撞处理机制: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps183E.tmp.jpg Level 1 93 20 ;level 2 95 50 level 3 97 81 这三个层级来进行防冲撞处理 6、M1卡接口函数开发说明: a) 对于M1卡的操作而言,我们提供的函数接口为可以分为以下几个部分: i. 当前环境是否有卡,即寻卡操作; ii. 将M1卡当做EEPROM来进行操作,实现对M1卡的读写操作; iii. 将M1卡当做电子钱包来进行操作,实现对M1值的初始化操作、充值、扣款等相关操作; iv. 对M1卡的密码 ,操作权限进行修改。 b) 开发文档相关说明: 整个文档分作3个块,实现对M1的整个操作,其中最底层的与单片机本身相关,需要在移植的过程中根据单片机的特性来实现; 第二次是对RC522的相关寄存器来进行操作的,实现对RC522的相关寄存器的访问,这一层在移植的过程中无需进行任何的修改; 第三层是业务层,是在对RC522的操作基础上并根据M1的特性实现对M的相关操作,这一层是开发者需要进行调用的函数,开发者仅需要对业务层的函数熟悉即可完成相关的开发操作。 c) 7、
|