rfid学习总结,基本流程

本文详细介绍了RFID系统的基本操作流程,包括寻卡请求、防冲撞、选卡、验证和读写数据步骤。通过提供的C代码示例展示了如何使用MF522模块与Mifare卡进行交互,包括初始化、设置工作模式、读写操作等关键函数。此外,还涉及了SPI通信、CRC校验等关键技术。

rfid学习总结,基本流程:

基本流程:
1.寻卡请求
2.防冲撞
3.选卡
4.验证
5.读数据/写数据


void IC_test()
{
   
   
  uchar ucTagType[4];
  uchar find=0xaa;
  uchar ret;
  int status = 1;
  unsigned char auth_mode = 0x60;
  unsigned char DefaultKey[6] = {
   
   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
  unsigned char Data[16];
  unsigned char Data_W[16] = {
   
   0x5A,0x58,0x58,0x20,0x4C,0x6F,0x76,0x65,0x73,0x20,0x47,0x4A,0x5A,0x3E,0x2E,0x3C};
  while(1)
  {
   
   
    //16进制转ASC码
    char i;  
    char Card_Id[8]; //存放32位卡号
    char Card_Data[32];
    uchar asc_16[16]={
   
   '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    
    switch(status)
    {
   
    
      case 1:
        
        ret = PcdRequest(0x52,ucTagType);//寻卡  请求
        if(ret != 0x26)
           ret = PcdRequest(0x52,ucTagType);
        if(ret != 0x26)
           find = 0xaa;
        if((ret == 0x26)&&(find == 0xaa))
           status = 2;
        break;
        
      case 2:  
        
        if(PcdAnticoll(ucTagType) == 0x26)//防冲撞
          {
   
   
            UartSend_String("The Card ID is: ",16);   
            
            //16进制转ASC码
            for(i=0;i<4;i++)
            {
   
   
              Card_Id[i*2]=asc_16[ucTagType[i]/16];
              Card_Id[i*2+1]=asc_16[ucTagType[i]%16];        
            }  
            UartSend_String(Card_Id,8); 
            UartSend_String("\n",1);  
            find = 0x00;          
            status = 3;
          }
        else 
          status = 1;   
        break;
        
      case 3:
        
        if(PcdSelect(ucTagType) == 0x26)//选卡
          {
   
   
            UartSend_String("选卡成功",8);
            UartSend_String("\n",1); 
            status = 4;
          }
        else
          status = 1;
        break;
        

      case 4:

        if(PcdAuthState(auth_mode,2,DefaultKey,ucTagType) == 0x26) // 验证密码
          {
   
   
            UartSend_String("验证成功",8);
            UartSend_String("\n",1); 
            status = 5;
          }
        else
          status = 1;
        break;
             
      case 5:  
        
        PcdWrite(2,Data_W);  //写数据
        
        PcdRead(2,Data);     //读数据
        
        UartSend_String("the data_r is :",16);
        UartSend_String("\n",1); 
        
        for(i=0;i<16;i++)
          {
   
   
            Card_Data[i*2]=asc_16[Data[i]/16];
            Card_Data[i*2+1]=asc_16[Data[i]%16];        
          }  
        UartSend_String(Card_Data,32);
        UartSend_String("\n",1); 
        
        UartSend_String("the data_w is :",16);
        UartSend_String("\n",1); 
        
        UartSend_String((char*)Data,16);
        UartSend_String("\n",1);         
        status = 1;
        break;
    }  
        
    }
} 

库函数

void Delay_I_1us(unsigned int k)
{
   
   
  uint i,j;
  for(i=0;i<k;i++)
    for(j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxx147

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值