MF_RC522及S50卡学习

一、基本特性

1、通信速率424Kbps,载波速率13.56MHz,通信距离最大50米,非接触式,调制解调完善。

     2、通信方式:SPI、串口通信(电压电平取决于管理引脚的电平)、IIC。

     3、支持ISO  14443A/MIFARE 和Classic加密。64字节的发送和接收缓冲区。内部定时器,内部振荡器连接27.12M的晶振。 3.3V电压供电方式。


二、S50卡片

   2.1 S50卡片的基本特征 

      2.1.1、无源,非接触式,只有一个线圈和一个芯片,通信距离10cm,芯片有1KB EEPROM.

      2.1.2、载波频率13.56MHz,通信速率106KB,防冲突机制可以同时处理多张卡,半双工通信。

      2.1.3、安全性:三次相互认证(ISO/IEC DIS 9798-2)、通讯过程中所有数据均加密、每一个扇区都有独立的密                      码、每张卡都有全球唯一的序列号32位长、传输密码保护。

      2.1.4、存储结构:1KB的EEPROM,有16个扇区每个扇区四个块,每个块16个字节。

   每个扇区都有自己的一组密码。

      2.1.5、运算能力:加和减,数据可以保存十年,擦写十万次。

      2.1.6、处理时间:

  识别一张卡  3ms(包括复位应答和防冲突)

  读一个块2.5ms(不包括认证过程)

                4.5ms(包括认证过程)

                          写一个块+读控制:14ms(包括认证过程)。

   2.2  工作原理

         卡片的电气部分只有一个天线和ASIC组成(专用集成电路)。卡片的天线只有几组绕成的线圈。ASIC由一个高速(106KB )的RF接口,一个控制单元和一个1KBEEPROM组成。

         S50工作原理:读写器向S50卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器的发射频率相同,在电磁波的激励下,LC谐振电路产生共振,向电容充电,当电荷达到2V时,此电容可作为电源为其电路提供工作电压,将片内的数据发射出去或读取读卡器的数据。

   2.3 S50射频卡与读写器通信


         复位应答(Answer to Request):

 S50射频卡的通信协议和波特率是定义好的,通过这两项内容,读写器和S50相互验证,当某张卡进入读写             器的操作范围时,读写器以特定的协议与它通信,从而确定该卡是否是S50卡,即验证卡的类型。

         防冲突闭合机制(Antiollision Loop):

                当有多张S50卡进入读写范围时,防冲突闭合电路首先从众多卡中选择一张做为处理对象,为被选中的卡               片则处于空闲模式等待下一次被选中,选中后返回一个被选中卡片的 序列号(Serial No.).

         选择卡片(Select Tag)

                选择被选中卡的序列号,同时返回卡的容量代码(08或者88).

         三次相互确认(3 Pass Authentication)

                选定卡片后,读写器就确定要访问的扇区号,并对该扇区密码进行校验,在三次相互认证之后就可以相互                通过加密流进行通信(选择下一个扇区时则需要和下个扇区进行密码校验)。

         读/写(最小的操作单位是块)

                确认之后进行下列操作:

                读(Read)       读一个块

                写(Write)       写一个块

                减(Decrement)   块中的内容作减法之后,结果保存在数据寄存器中。

                加(Increment)     块中的内容作加法之后,结果保存在数据寄存器中。

传输(Transfer)    将数据寄存器的内容写入块中。

存储(Restore)     将块中的内容读到数据寄存器

暂停(Halt)           将卡置于暂停状态。

       2.4 数据完整性

防冲突、每个块有16位的CRC校验。每个字节有奇偶校验,检查位数、信道监测。

       2.5 保密性

读写前的三次确认,卡号的唯一性,传递数据加密,传输密码和访问密码保护。

                每个扇区都有自己的访问密码,分为KEY A和kEY B,在校验KEY A和KEY B之后才可以对存储器进行访问。

  


        

    存储区

     






    2.6  RC522的命令字

                   RC522通过向命令寄存器写入相应的命令代码来启动命令。执行一个命令所需的命令参数或数据通过                    FIFO缓冲区来交换。

   每个需要数据字节流作为输入的命令在发现FIFO缓冲区有数据时会立刻处理。收发命令除外,收发还需      要寄存器BitFramingReg寄存器的StartSend位来启动。

   每个需要某数量的参数的命令,只有在FIFO缓冲区有正确的命令参数时才开始处理数据。

   可以通过Idle命令来终止其他命令。

   FIFO不能自动清除,有些命令需要现在FIFO中写入参数或数据,然后再启动命令。


2.7  M1卡指令





1、Answer to Request (Request)指令

      Request 指令通知读卡器在MCM在天线有效范围内寻找M1卡,如果有M1卡这一指令将分别与M1卡进行通信,读取M1卡的类型Tagtype(2个字节)。然后MCM传递给单片机进行识别。0400 为S50卡。

       M1卡可以根据卡片类型被读卡器选择,当使用“Request std”指令寻卡时,只有被设置成“HALT_MODE(停机)”模式的卡才能响应这一指令。

Request All 指令防止一张卡被多次选中,Request All 指令在成功读取一张卡以后,会一直等待这张卡被拿走。

     2、AntiCollision 防冲突

          读卡器读某张卡上的序列号共5个字节,4个字节加1个字节的校验。卡真正被选中是select命令。

     3、select tag选卡

          在防碰撞正确读到卡的序列号后,使用select命令与卡建立通信。在select指令以后才能对卡进行读写,执行select指令后,M1卡将会它自己的容量size(1个字节)。size字节存储在M1卡第00h扇区的第00h块,返回的字节可能是88h或者08h。

      4、Authentication 认证操作

   KEYADDR寄存器中的AB位用于选择KEYA密码(AB=1)和KEYB密码认证(AB=0),KEYADDR寄存器(寄存器0ch)中的设置必须匹配Authentication 命令(60h、61h).

  Authentication命令中,60h用于认证KEYA,61h代码用于认证KEYB。

     5、读操作

  认证完成后,读操作一次读一个块(16个字节)。

     6、写操作

          

  



        四、 使用SPI通信说明

             4.1  三种通信的接口说明

 

 4.2 SPI通信

      使用SPI通信,MSB位先发送,在时钟的上升沿数据从单片机写入RC522,在时钟的下降沿单片机从RC522读出数据。在时钟的跳变沿数据线要稳定。

         4.3 读写数据

              读数据时序:


     写数据时序:

           

          地址字节的表示:

          

        4.4 CRC校验

              16位的CRC校验,CC预设值可以设置为0000h,6363h,A671h,FFFFh

                                                校验计算公式: 

             


        说明:本文参考了深圳吉盛科技的手册。

        附件中的程序参考一个网友的改的,用的单片机是STC12LE5A08S2系列的。  

       http://blog.csdn.net/yjg428/article/details/39084869  更详细的介绍可以参考这个网友的。 

### 关于S50调用函数的流程 对于S50的操作通常涉及初始化、读取UID、验证密钥以及数据操作等过程。具体到基于RC522芯片的应用场景下,整个工作流可以被描述如下: #### 初始化阶段 在任何实际的数据交互之前,必须先完成硬件接口配置与SPI通信设置,确保MCU能够正常发送指令给RFID模块并接收返回的信息。 ```c // SPI Initialization Code Example void spi_init(void){ // Initialize the SPI interface here... } ``` 接着是对MFRC522本身的初始化,这一步骤主要是为了使能设备内部的各项参数达到默认状态以便后续命令执行[^3]。 ```c // MFRC522 Initialization Function Call mfrc522_Init(); ``` #### 片检测与选择 当一切准备就绪之后,则需通过轮询方式来探测是否有片靠近天线区域;一旦识别到有效信号即表示存在一张待处理的标签,此时应进一步获取其唯一标识符(UID),用于区分不同个体的身份特征[^1]。 ```c if (mfrc522_Request(PICC_REQIDL, uid)) { mfrc522_Anticoll(uid); printf("Card detected with UID:"); for(uint8_t i=0; i<uid.size;i++){ printf("%X ",uid.uidByte[i]); } } ``` #### 密钥认证环节 针对存储有敏感信息的标准MIFARE Classic系列介质而言,在访问特定扇区前还需经历一次安全校验——即向目标区块提交预设密码以获得授权许可。只有成功通过这一关后才能继续下一步动作如读/写指定位置上的内容。 ```c status = mfrc522_SelectTag(uid); if(status == MI_OK){ status = mfrc522_Authenticate(blockAddr,MF_KEY_DEFAULT,password,AKEY,BLOCK_DATA); } ``` #### 数据存取部分 最后就是依据业务需求对选定区域内实施具体的文件管理任务了,比如查询余额记录或是更新个人信息字段等等。值得注意的是每次修改完成后都记得保存更改以免丢失最新变动成果。 ```c if(status == MI_OK){ mfrc522_ReadBlock(blockAddr,dataBuffer); // Process data as needed // Write new data back to card if necessary mfrc522_WriteBlock(blockAddr,newDataBuffer); } ``` 上述伪代码片段展示了典型的S50操作序列,从最基础层面解释了各个步骤之间的逻辑关系及其对应的实际编码实践方法。然而请注意这些只是简化后的示意性表达,并未涵盖所有可能遇到的情况或异常分支路径处理机制。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值