寻卡防冲突

/*******************************************************************************
//功    能:寻卡
//参数说明: req_code[IN]:寻卡方式
//                0x52 = 寻感应区内所有符合14443A标准的卡
//                0x26 = 寻未进入休眠状态的卡
//          pTagType[OUT]:卡片类型代码
//                0x4400 = Mifare_UltraLight
//                0x0400 = Mifare_One(S50)
//                0x0200 = Mifare_One(S70)
//                0x0800 = Mifare_Pro(X)
//                0x4403 = Mifare_DESFire
//返    回: 成功返回MI_OK
*******************************************************************************/
char PcdRequest(unsigned char req_code,unsigned char *pTagType)
{char status;unsigned int  unLen;unsigned char ucComMF522Buf[MAXRLEN];ClearBitMask(Status2Reg,0x08);    //清零Status2Reg的MFAuthent Command执行成功标志位WriteRawRC(BitFramingReg,0x07);   //清零Transceive命令开始位SetBitMask(TxControlReg,0x03);    //开启天线ucComMF522Buf[0] = req_code;      //取522要执行的命令//printf("%x\n",ucComMF522Buf[0]);//printf("%x\n",ucComMF522Buf[1]);status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);//向PICC发送寻天线区内全部卡命令,并接收PICC返回的数据if ((status == MI_OK))if ((status == MI_OK) && (unLen == 0x10))//没有错误并接接收为2个字节{*pTagType     = ucComMF522Buf[0];//取接收缓冲区的第一个字节*(pTagType+1) = ucComMF522Buf[1];//取接收缓冲区的第二个字节}else{status = MI_ERR;      //错误}#if PRINTprintf("card type is:\n");printf("%x\n",ucComMF522Buf[0]);printf("%x\n",ucComMF522Buf[1]);#endifreturn status;
}
/*******************************************************************************/
/*******************************************************************************
//功    能:防冲撞
//参数说明: pSnr[OUT]:卡片序列号,4字节
//返    回: 成功返回MI_OK
//协 议:SEL  NVB(0X20)
*******************************************************************************/
char PcdAnticoll(unsigned char *id)
{char status;unsigned char i,snr_check=0;unsigned int  unLen;unsigned char ucComMF522Buf[MAXRLEN];ClearBitMask(Status2Reg,0x08);//清除标志位WriteRawRC(BitFramingReg,0x00);//000 指示最后一个字节的所有位将被发送。ClearBitMask(CollReg,0x80);//发生碰撞所有接收位将被清除ucComMF522Buf[0] = PICC_ANTICOLL1;//0x93 防冲撞 发到卡里的命令ucComMF522Buf[1] = 0x20;status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);//获得卡的序列号,ucComMF522Buf[]if (status == MI_OK){for (i=0; i<4; i++){id[i] = ucComMF522Buf[i];        //返回卡的序列号snr_check ^= ucComMF522Buf[i];    //计算校验码}if (snr_check != ucComMF522Buf[i]){status = MI_ERR;       //有错误}}SetBitMask(CollReg,0x80);//置位防碰撞位return status;}

选卡

/*******************************************************************************
//功    能:选定卡片
//参数说明: pSnr[IN]:卡片序列号,4字节
//返    回: 成功返回MI_OK
//协 议:SEL    NVB(0X70)   ID(4个byte)      IDCHECK     CRC16
*******************************************************************************/
char PcdSelect(unsigned char *id)
{char status = 0XFF;unsigned char i;unsigned int  unLen;unsigned char ucComMF522Buf[MAXRLEN];  //MAXRLEN = 18ucComMF522Buf[0] = PICC_ANTICOLL1;//防冲撞命令ucComMF522Buf[1] = 0x70;ucComMF522Buf[6] = 0;for (i=0; i<4; i++){ucComMF522Buf[i+2] = *(id+i);//填充卡的序列号ucComMF522Buf[6]  ^= *(id+i);//计算校验码}CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);//获得CRC校验结果的16位值//放入ucComMF522Buf【0,1】ClearBitMask(Status2Reg,0x08);//清零MFAuthent Command执行成功标志位status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);//把CRC值和卡号发的卡里if ((status == MI_OK) && (unLen == 0x18))//返回24个字节&状态为无错误{status = MI_OK;}else{status = MI_ERR;}return status;
}


因为S50卡所以select结果是8

三天搞定射频识别技术(二)2.3寻卡防冲突选卡相关推荐

  1. 三天搞定射频识别技术(一)1.2

    电子标签的概念 电子标签的概念 二.RFID电子标签的分类: 三.RFID标签的原理 四.RFID标签的组成 五.RFID的工作原理 阅读器和电子标签之间的射频信号的耦合类型有两种: 电感耦合 电磁反 ...

  2. 三天搞定射频识别技术(二)2.4 S50卡原理

    M1卡 M1卡是谁 所谓的M1芯片,是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,属于非接触式IC卡 非接触式IC卡又称射频卡,成功地解决 ...

  3. 三天搞定射频识别技术(三)3.2PN532

    PN532概述 随着互联网的普及,手机作为互联网最直接的智能终端,必将会引起一场技术上的革命,如同以前蓝牙.USB.GPS等标配,NFC将成为日后手机最重要的标配,通过NFC技术,手机支付.看电影.坐 ...

  4. 三页搞定GB2818/SIP/RTP、PS封装

    三页搞定GB2818/SIP/RTP.PS封装 (2016-08-23 18:27:20) 转载▼ 标签: it 互联网 gb28181 sip rtp 分类: 技术 GB2818集成了sip通讯.R ...

  5. windows+mysql集群搭建-三分钟搞定集群

    一.集群了解 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.首先看了一些关于集群的资料,然后根据步骤一步步的整,遇到了一些问题,在这里把我遇到的问题以及解 ...

  6. EasyExcel 三分钟搞定导入导出

    前言:本文章教你从零开始,三分钟搞定excel单sheet导出.导入.多sheet导出.导入.excel模板导入单个sheet.多个sheet,废话不多说,直接上代码 1.引入依赖 <!--ex ...

  7. 怎么样把计算机桌面的图标改小,怎样将电脑桌面图标变小_三招搞定桌面图标太小问题-系统城...

    电脑安装win10系统后发现桌面的图标太大,想要把这些图标变小,这要怎么操作?由于对操作界面都不熟悉,所以不懂怎么设置,别担忧,小编今天就来分享一种将电脑桌面图标变小的方法,感兴趣的快来试试. 具体方 ...

  8. 快速搞定前端技术一面 匹配大厂面试要求学习笔记

    快速搞定前端技术一面 匹配大厂面试要求学习笔记 第1章 课程介绍[说说面试的那些事儿] 本章会出几个面试题,分析每道题目设计的知识点,然后总结出一个完整的知识体系.让我们开始 "题目-> ...

  9. caj文件怎么转换成pdf格式?三步搞定

    当我们需要查阅一些文献资料时,往往会遇到CAJ文件格式的问题.这种格式需要使用专业的阅读工具才能打开,让我们的阅读体验变得十分不便.为了解决这个问题,我们可以将CAJ文件转换成PDF文件格式.这样,无 ...

最新文章

  1. Linux 环境变量配置
  2. jQuery JavaScript库达到新的里程碑
  3. Internet:从区块链的底层技术思考互联网是如何构成的
  4. BZOJ 3237: [Ahoi2013]连通图
  5. mysql复制的配置
  6. Bash:把粘贴板上的内容拷贝的文件中。(脚本)
  7. 【Maven实用技巧】03. Maven 编译打包时如何忽略测试用例
  8. python函数返回多个值时的数据类型是_Python3 注释多个返回值的函数类型
  9. qt中的qwidget如何实现自定义部件_2.3信号和槽(中)
  10. Java 9 接口私有方法
  11. android studio真机调试失败,【Android】Android Studio真机调试的问题统整
  12. 【算法笔记】求长度为n的序列的全排列包含的总逆序对数目(树状数组求解)
  13. 产品需求文档五分钟轻松搞定!这可能史上最全PRD文档模板
  14. 换个角度理解正则表达式
  15. 第三部分 数据结构 -第一章 栈-1357:车厢调度(train)
  16. 如何使scrapy爬取信息不打印在命令窗口中
  17. MySQL 的安装与启动
  18. API的防篡改和防重放机制
  19. 利用css特性布局页面制作京东特价框
  20. HDOJ 1846 Brave Game(巴士博弈)

热门文章

  1. iPhone 电池和性能
  2. 小红书流量怎么提升?小红书流量不好是什么原因导致?
  3. 大漠插件问题:解决win10win7win8系统找不到指定的模块,注册不了大漠插件的问题
  4. 游戏手机评测之摩托罗拉E398
  5. 英语单词记忆方法20种
  6. RTL8367SC单芯片做千兆2光5电
  7. 汉诺塔模拟器java
  8. CSS设置阴影样式大全 包含所有样式 有图有代码
  9. 怎么给当前计算机添加一个用户,电脑如何设置新用户 电脑创建新用户的方法...
  10. 知识图谱入门一:知识图谱介绍