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

2023-10-27

寻卡防冲突

/*******************************************************************************
//功    能:寻卡
//参数说明: 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 PRINT
	printf("card type is:\n");
    printf("%x\n",ucComMF522Buf[0]);
    printf("%x\n",ucComMF522Buf[1]);
	#endif
    
    return 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 = 18

    ucComMF522Buf[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
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • RFID 负载调制和反向散射调制

    我用我质朴的语言概述一下我的理解 xff0c 射频识别系统中 xff0c 阅读器和标签之间的通信通过电磁波来实现 按照通信距离 xff0c 可以划分为近场和远场 xff1b 按照频率又分 xff1a 低频 高频 超高频 相应的 xff0c
  • 第1章 前 言

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1258 1 1 问题的背景 1 1 1 RFID技术 RFID即无线射频识别技术 Radio Frequency Identificatio
  • I/Q信号

    当前的数字射频芯片 无一例外的用到了I Q信号 就算是RFID芯片 内部也用到了I Q信号 然而绝大部分射频人员 对于IQ的了解除了名字之外 基本上一无所知 I Q信号一般是模拟的 也有数字的比如方波 基带内处理的一般是数字信号 在出口处都
  • RFID标签打印机在加工制造业中的应用

    1 行业背景 在物联网家电制造 机械制造 电子元器件 电器等产品加工制造行业中 通常都需要打印标签直接贴到产品上 如 铭牌标签 条码序列号标签 合格证标签 电路图标签 RFID标签等等 传统的部分企业的这些标签是印刷后粘贴到产品上 但是随着
  • 革命性创新:RFID技术引领汽车零部件加工新时代

    革命性创新 RFID技术引领汽车零部件加工新时代 RFID Radio Frequency Identification 射频识别 技术是一种利用无线电频率进行自动识别的技术 可以快速 准确地识别物体并获取相关数据 在汽车零部件加工中 RF
  • Arduino和LabVIEW射频灾害紧急报警系统

    该项目将在发生灾难时生成紧急警报 该系统分为两部分 传感器节点和 2 服务器 连接该开关阵列以在处理端生成紧急信号 然后将其发送到传感器节点 图1给出了系统框图 物料清单 接线 原理图 代码 传感器节点端代码 处理端代码 仿真模型 LabV
  • RFID医疗耗材柜管理系统中的解决方案

    1 社会背景 医疗物资管理 传统的管理流程由于周期短 效率高 被各大医院广泛采用 但随之高值耗材种类激增所带来的准入标准弱化 信息追踪困难 管理责任不明确 历史数据统计分析困难等一系列问题日趋严峻 其次医院内部设备 财务和临床科室相互独立兼
  • 三天搞定射频识别技术(二)2.4 S50卡原理

    M1卡 M1卡是谁 所谓的M1芯片 是指菲利浦下属子公司恩智浦出品的芯片缩写 全称为NXP Mifare1系列 常用的有S50及S70两种型号 属于非接触式IC卡 非接触式IC卡又称射频卡 成功地解决了无源 卡中无电源 和免接触这一难题 是
  • 射频中的 IM3、IIP3、OIP3、G、P1dB指标之间的关系

    噪声系数与非线性失真是描述射频系统性能优劣的两个重要指标 噪声 限制了系统所能处理的最低信号电平 非线性失真 限制了系统所能处理的最高信号电平 在非线性器件 放大器 混频器等 输入端 输入等幅度不同频率的双音信号 f1 f2 由于器件的非线
  • SX1278学习

    一 简介 采用扩频技术 接收灵敏度更高 用户自行决定扩频调制带宽 BW 扩频因子 SF 纠错率 CR 支持标准的GFSK FSK OOK GMSK调制模式 带宽范围7 8 500KHz 扩频因子6 12 137MHz 1020MHz 低功率
  • 每个工程师都应该知道的 5 个射频发射器测量指标(自NI官网翻译)

    概述 射频发射器是现代通信的重要组成部分 射频发射器由核心射频组件设计和组装而成 具有多种不同的形式和应用 我们经常想到无线通信中的射频发射器 但这个概念同样适用于有线应用 如有线电视 蜂窝电话 雷达 军事通信 航空电子设备 无线局域网 调
  • CMW500测试设置及问题处理

    测试CATM1需要打开eMTC Auto Mode 最新的U BLOX R510S模块 这里需要设置为RMC模式 设置为eMTC Auto Mode会出现连接后就断开的情况 没法测试 Measure subframe设置为5 不同的band
  • NFC 标签系列 - 真正独特吗?可克隆?

    NFC标签真的是这样吗UNIQUE彼此之间 至少在他们的序列号 我们可以相信没有 2 个 NFC 标签可以具有相同的序列号吗 我对此非常怀疑 因为那里有 并且将会有更多 NFC 标签 而且我不认为有人在控制这些连续剧 我问这个问题的原因是我
  • Mifare Classic 1K 的锁定机制

    Mifare Classic 1K的流程是 轮询标签 验证这些标签 如果身份验证成功 则进行读 写 我已经完成了这些过程 并且还从特定扇区读取和写入数据 命令为轮询标签 is new byte byte 0xFF byte 0x00 byt
  • 关于 C# RFID 线程的问题

    我的问题是寻求反馈 以确保我采取正确的方法并正确处理线程 我有一种感觉 我可能需要设置一些我自己的线程 所以欢迎所有反馈 我遇到的问题是从零个或多个 RFID 阅读器读取 RFID 标签 我可以毫无问题地为单个读者阅读 因此从多个读者那里阅
  • 是否可以在 NFC 卡中实现令牌队列?

    这个问题专门针对 MIFARE Ultralight C EV1 或 MIFARE DESFire EV1 甚至 NTAG 卡 我想实现一个令牌系统 以便每次普通用户读取其中一张卡时 他们都会获得一个可用令牌 该令牌将从他们正在读取的 NF
  • 更改 MIFARE Classic 中扇区的身份验证密钥

    根据埃文的回答这一页 https forums tessel io t change auth code 1091 为了更改扇区的身份验证密钥 我们需要覆盖该扇区的第四个块 最后一个块 中的密钥 默认密钥始终为 FF FF FF FF FF
  • Android 应用程序模仿物理 RFID 卡

    Android 应用程序是否可以将之前存储的 RFID 卡 ID 发送到 NFC 读卡器 目标是使用 Android 设备代替物理 RFID 卡来访问房间 在阅读了许多有关 NFC RFID 和卡模拟的其他帖子后 我得出的结论是 它目前在
  • Android 从键盘读取

    我的登录屏幕根本没有文本字段 当用户使用 RFID 扫描仪扫描他的 id 令牌时 我会得到一个 8 个字符长的字符串 其原理与使用键盘相同 只是更快 我希望我的登录活动在用户扫描其令牌时而不是之前执行 有一个聪明的方法来实现这个吗 我不能有
  • 使用 PC/SC 读卡器验证 Ultralight EV1

    我在尝试使用 Java 中的 PC SC 读卡器 特别是 ACR1222L 验证 Ultralight EV1 卡时遇到问题 我能够使用 ISO 14443 3 标签的相应 APDU 在不受保护的标签上进行写入和读取 但是 我找不到运行 P

随机推荐