精华内容
下载资源
问答
  • 读取对象采用NRF52832,使用其NFC功能模拟type2 tag,但是读取方式和M1卡不一样,踩了不少坑,网上的资料都是调取现有接口没啥用处,也没有什么资料可以参考,只能自己看技术规范来实现了。 NFC Forum Type2 Tag...

    RC522作为一款NFC读写芯片,性价比还是很高的,因为在项目里需要采用NFC OOB配对,所以需要读取配对方模拟的NFC卡片信息

    读取对象采用NRF52832,使用其NFC功能模拟type2 tag,但是读取方式和M1卡不一样,踩了不少坑,网上的资料都是调取现有接口没啥用处,也没有什么资料可以参考,只能自己看技术规范来实现了。

    NFC Forum Type2 Tag属于Mifare Ultralight卡,和M1卡一样都遵循IEC14443-3/A规范,但是Mifare Ultralight有7位UID,这点需要额外注意;

    查阅IEC14443-3/A规范得知卡片读取流程如下:

    开始读取流程后,先需要发送查询指令得到卡片的ATQA值,对于Mifare Ultralight卡来说ATQA值为0x4400,识别到这个ATQA值即可进入Mifare Ultralight卡的UID读取流程

    如何得到ATQA值呢?有两种方式,可以通过发送REQA或者WUPA都可以得到:

    在RC522的例程中,采用WUPA进行查询,代码如下:

    ClearBitMask(Status2Reg,0x08);//清除Status2Reg寄存器
    WriteRawRC(BitFramingReg,0x07);//停止当前RC522的指令
    SetBitMask(TxControlReg,0x03);//准备发送数据
    ucComMF522Buf[0] = 0x52;//查询指令
    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);//和RC522通讯,若有卡片存在则会将卡片的ATQA值保存在ucComMF522Buf中
    if ((status == MI_OK) && (unLen == 0x10))
       {    
           *pTagType     = ucComMF522Buf[0];
           *(pTagType+1) = ucComMF522Buf[1];
       }

    得到的返回值pTagType即为卡片的ATQA值;

    若有Mifare Ultralight卡位于RF场内,则进行第一次选择卡片操作,即流程图中的“Select cascade level 1”

    这里有个大坑,对于Mifare Ultralight卡来说,需要先进行一次防冲撞操作得到前三位UID值后才能继续往下进行选择卡片操作,否则不会得到任何返回值,当时在这里卡了好久

    PcdRequest(0x52,TagType);//第一步,查询卡片
    if(TagType[0]==0x44 && TagType[1]==0x00)//确认卡片为Ultralight
    {
        PcdAnticoll(SelectedSnr);//第一次防冲撞,得到卡片的第一组UID值,保存在SelectedSnr内,长度为4位
        //假设返回值为88:5F:D1:6E,5F:D1:6E才是卡片UID的一部分88只是卡片代码,在后续的获取UID的操作中应当忽略掉这个值
        UID[0]=SelectedSnr[1];
    	UID[1]=SelectedSnr[2];
    	UID[2]=SelectedSnr[3];//得到前三位UID值
        PcdSelect(SelectedSnr);//第一次选择卡片,这里的卡号参数需要连着0x88一起发送出去
        PcdAnticoll_type2(SelectedSnr+4);//第二次防冲撞,将后四位UID号储存在SelectedSnr[4]之后的数组内
        UID[3]=SelectedSnr[4];
    	UID[4]=SelectedSnr[5];
    	UID[5]=SelectedSnr[6];
    	UID[6]=SelectedSnr[7];//得到后四位UID卡号
        PcdSelect2(SelectedSnr+4);//第二次选择卡片,这样才可以得到卡片的访问权限
        /*从此处之后即可正常读取卡片信息,应注意Ultralight卡片不需要密钥访问,因此无需调用            
          PcdAuthState写入访问密钥,直接调用PcdRead函数即可
          例如Pcd_Read(0x00, buf),会直接返回卡片0,1,2,3扇区的16位内容,虽然Ultralight
          的每个区块只有四位,但是返回值和M1卡是一样的,都是16位,即范围所选区块后四块的内容,可以与
          M1卡做兼容处理*/
    
    }

     

    读取操作的指令和M1卡片是一样的,因此在取得卡片的全部UID后可以采用同一个函数对Ultralight卡片进行读取

    应注意, PcdAnticoll_type2是我自己写的函数,实际内容和 PcdAnticoll内容是一样的,只是将查询的指令由0x93变更为0x95,即ucComMF522Buf[0]的值需要修改

    /
    //Mifare Ultralight 卡二次防冲撞
    /  
    char PcdAnticoll_type2(unsigned char *pSnr)
    {
        char status;
        unsigned char i,snr_check=0;
        unsigned int  unLen;
        unsigned char ucComMF522Buf[MAXRLEN]; 
        
    
        ClearBitMask(Status2Reg,0x08);
        WriteRawRC(BitFramingReg,0x00);
        ClearBitMask(CollReg,0x80);
     
        ucComMF522Buf[0] = PICC_ANTICOLL2;//0x95,Ultralight二次选择需要的指令
        ucComMF522Buf[1] = 0x20;
    
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);
    
        if (status == MI_OK)
        {
        	 for (i=0; i<4; i++)
             {   
                 *(pSnr+i)  = ucComMF522Buf[i];
                 snr_check ^= ucComMF522Buf[i];
             }
             if (snr_check != ucComMF522Buf[i])
             {   status = MI_ERR;    }
        }
        
        SetBitMask(CollReg,0x80);
        return status;
    }

    在移植到PHY6212平台时,只需要重新对几个引脚操作进行重定义即可

    #define MF522_RST_PIN                    GPIO_P20
    #define MF522_MOSI_PIN                   GPIO_P03
    #define MF522_SCK_PIN                    GPIO_P01
    #define MF522_NSS_PIN                    GPIO_P02
    #define MF522_MISO_PIN                   GPIO_P31
    #define LED_WHITE												 GPIO_P34
    #define LED_WARM												 GPIO_P00//我自己加的错误指示灯,可以不用
    #define LED_ON													 hal_gpio_write(LED_WHITE, 1)
    #define LED_OFF													 hal_gpio_write(LED_WHITE, 0)
    #define ERR_ON													 hal_gpio_write(LED_WARM, 1)//我自己加的错误指示灯,可以不用
    #define ERR_OFF													 hal_gpio_write(LED_WARM, 0)//我自己加的错误指示灯,可以不用
    #define RST_H                            hal_gpio_fast_write(MF522_RST_PIN, 1)
    #define RST_L                            hal_gpio_fast_write(MF522_RST_PIN, 0)
    #define MOSI_H                           hal_gpio_fast_write(MF522_MOSI_PIN, 1)
    #define MOSI_L                           hal_gpio_fast_write(MF522_MOSI_PIN, 0)
    #define SCK_H                            hal_gpio_fast_write(MF522_SCK_PIN, 1)
    #define SCK_L                            hal_gpio_fast_write(MF522_SCK_PIN, 0)
    #define NSS_H                            hal_gpio_fast_write(MF522_NSS_PIN, 1)
    #define NSS_L                            hal_gpio_fast_write(MF522_NSS_PIN, 0)
    #define READ_MISO                        hal_gpio_read(MF522_MISO_PIN)//hal_gpio_read(MF522_MISO_PIN)

    移植到其他平台也是一样,重新定义这些GPIO操作和引脚即可,我将完整代码上传到CSDN了,有需要可以下载,不闲麻烦的话可以自己根据这个流程改一下RC522的例程代码,有问题大家随时沟通,一起学习

    下载地址:https://download.csdn.net/download/weixin_47047654/16817998

    展开全文
  • 在网上找了一个jar包可以读取,亲测可用: 地址:https://download.csdn.net/download/qq_16064871/11409263 下载之后,调用代码如下: ScanGun mScanGun = new ScanGun(new ScanGun.ScanGunCallBack() ...

    学校的考勤打卡机很多都是没有NFC功能,使用usb返回结果数据的。在网上找了一个jar包可以读取,亲测可用:

    地址:https://download.csdn.net/download/qq_16064871/11409263

    下载之后,调用代码如下:

            ScanGun mScanGun = new ScanGun(new ScanGun.ScanGunCallBack() {
                @Override
                public void onScanFinish(String scanResult) {
                    Log.e("onScanFinish", "scanResult=" + scanResult);
                    if (!TextUtils.isEmpty(scanResult)) {
                      //......监听数据返回
                   
                    }
                }
            });
            mScanGun.setMaxKeysInterval(50);

    在Activity 截获按键事件.发给ScanGunKeyEventHelper

        @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                return super.dispatchKeyEvent(event);
            }
    
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                int keyCode = event.getKeyCode();
                 if (keyCode <= 6) {
                    return false;
                }
                if (mScanGun.isMaybeScanning(keyCode, event)) {
                    return true;
                }
            }
            return super.dispatchKeyEvent(event);
        }

     

    展开全文
  • NFC完整的读取功能,可以读取身份证等NFC、公交卡、银行卡等卡片
  • Android NFC读取卡片id

    千次阅读 2019-05-21 21:19:04
    https://blog.csdn.net/qq_25749749/article/details/86579761 Android NFC读取卡片的ID 使用此方法通过nfc设备获取了卡片id

    https://blog.csdn.net/qq_25749749/article/details/86579761

    Android NFC读取卡片的ID

    使用此方法通过nfc设备获取了卡片id

     

    展开全文
  • 获取卡片ID: 发送的命令为: 0x0,0x0,0xff,0x4,0xfc,0xd4,0x4a,0x1,0x0,0xe1,0x0, 返回的包为: 00 00 FF 00 FF 00 00 00 FF 1C E4 D5 4B 01 01 00 08 20 04 33 1E 24 02 10 78 80 B0 02 20 90 00 00 00 00...

    图如下:
    这里写图片描述

    风火轮与FT232 模块的连接,需要注意两个地方:
    (1)如上图所示:
    如果选择 UART模式:需要SEL0为OFF,SEL1为OFF
    也就是上图的3和上图的4的地方,需要都是OFF

    (2)与FT232 USB转TTL 串口模块的连接,

    图中标号板子FT232模块
    53.3vVCCIO
    6MOSI/SDA/TXRXD ----->
    7SSEL/SCL/RXTXD <-----
    8GNDGND

    FT232 模块上面的 一个选择5v 还是 3.3v的开关,放在3v3那一侧

    风火轮PN532 NFC 开发板 的资料 在csdn 上面有:
    搜索的关键词是:PN532开发套餐资料包.rar

    开发板,测试:
    使用一张如下的卡,放在开发板的天线上
    双界面卡FM1216-109复旦CPUFM1216-109CPU双界面卡支持DES算法
    从淘宝买的CPU双界面白卡,该卡既支持接触式通信,也支持NFC通信
    这里写图片描述

    进入如下目录:
    这里写图片描述
    进入cmd模式:
    这里写图片描述

    输入如下命令:

    nfc-list.exe --device PN532_UART:COM5:115200
    

    其中COM5 根据实际情况取。
    得到返回值:

    1 ISO14443A passive target(s) found:
        ATQA (SENS_RES): 00  08
           UID (NFCID1): 33  1e  24  02
          SAK (SEL_RES): 20
                    ATS: 78  80  b0  02  20  90  00  00  00  00  00  33  1e  24  02
    
    

    使用另外一个工具,
    这里写图片描述

    该工具 是VS2010 MFC 实现的 :VC\PCSC\NFCReader\可用bin\NFCReader.exe 1.1版本

    唤醒读卡器:
    发送的命令为:

    0x55,0x55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0
    

    返回的包为:

    00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00 
    

    获取卡片ID:
    发送的命令为:

    0x0,0x0,0xff,0x4,0xfc,0xd4,0x4a,0x1,0x0,0xe1,0x0,	
    

    返回的包为:

    00 00 FF 00 FF 00 00 00 FF 1C E4 D5 4B 01 01 00 08 20 04 33 1E 24 02 10 78 80 B0 02 20 90 00 00 00 00 00 33 1E 24 02 5A 00 
    
    

    接触式读卡器,读这个卡
    这里写图片描述

    执行程序:
    这里写图片描述

    只针对这个卡,可以读UID,有些其他的卡商的卡,通过ATR 读不出来UID

    补充一张有转接线的图,不用每次都重新确认线是否连接正确
    这里写图片描述

    注意FT232模块的线序:
    这里写图片描述

    PN532 协议包 格式解析:

    参考:PN532 User Manual UM0701-02.pdf page28

    这里写图片描述
    PREAMBLE 1个字节 00
    START CODE 2个字节 00 0F
    LEN 1个字节 包括 TFI 和 PD0 到 PDn 总的字节数
    LCS 1个字节 需要满足 LEN + LCS 的 低字节 为0x00 比如 0x100
    TFI 1个字节 帧识别
    D4h 表示 从PC 到PN532
    D5h 表示 从PN532 到PC
    DATA LEN-1个字节 PD0 是 Command Code
    DCS 1个字节 校验码
    低字节的[TFI + PD0 + PD1 + … + PDn + DCS] = 0x00
    POSTAMBLE 1个字节

    ##注意 PN532 是使用的射频信号,不好将板子靠近金属机箱测试。
    容易读写出错。需要保持一定的距离

    ##串口驱动
    这里写图片描述

    在这里插入图片描述
    https://blog.csdn.net/a827415225/article/details/51898897

    E:\VC\activeX\EtcNfcRC522\EtcNFComm

    展开全文
  • Android NFC 读取 卡片ID

    千次阅读 2018-01-29 14:43:01
    //获取 Tag 读取 ID 得到字节数组 转字符串 转码 得到卡号(默认 16 进制 这请自便) Long cardNo = Long .parseLong (flipHexStr(ByteArrayToHexString(tag .getId ())), 16 ) ; // if (cardNo .toString () ....
  • Android NFC读取卡片的ID

    千次阅读 2019-01-21 17:28:14
    //获取 Tag 读取 ID 得到字节数组 转字符串 转码 得到卡号(默认16进制 这请自便) Long cardNo = Long.parseLong(flipHexStr(ByteArrayToHexString(tag.getId())), 16); // if (cardNo.toString().getBytes()....
  • EMV/PBOC 解析(二) 卡片数据读取

    千次阅读 2017-04-09 23:55:00
    上一篇简单的了解了IC智能卡的文件结构和APDU报文,这篇我们直接来读取卡内的数据。下面我们主要参照《中国金融集成电路(IC)卡规范》。  好了废话不多说,下面贴指令: (1)卡片接收一个来自终端的选择(SELECT...
  • 以前方便地使用手机刷开门禁的方式不能使用了。起初以为是物业公司只是更换了门禁控制机,要把门卡重新授权下而已。当拿到物业公司给重新授权后的门禁卡后,再次使用小米手环4复制卡时提示加密卡片不能复制,而小米...
  • 如何使用NFC读卡器读取NFC卡片的UID

    千次阅读 2018-11-07 22:51:05
    如何使用NFC读卡器读取NFC卡片的UID
  • 方法1: APDU命令FFCA000000 读取UID ACR122U APDU Command ...因为Mifare UltraLight卡片的UID是在卡片的第一个page和第二个Page里面,所以我们可以直接读取page 1个page 2数据就好了。 ACR122U Read Page FF
  • 读取 JSON、位置并将其显示在卡片列表中完全可扩展以添加更多卡、更多 API 使用 RecyclerView 和 ViewHolders 以获得最佳性能附加功能: a) 现在像谷歌一样滑动删除卡片b)现在像谷歌一样撤消删除c) 具有无限滚动但...
  • 行业制造-电动装置-一种卡片式USB接口信息存读取电子名片
  • 我们需要外接一个NFC Reader让Windows可以读取NFC卡片的内容。 因为特殊原因,我们选择了Sony rc-s380 NFC Reader。相关介绍 我们需要下载并安装NFC Port Software,以便我们可以顺利使用上述NFC Reader。 安装...
  • unity3d-学习笔记8-卡牌游戏制作实现动态读取卡片信息并且在游戏界面展现 实现动态读取卡片信息并且在游戏界面展现 时间关系,直接贴代码~ GameObject go = (GameObject)Instantiate(Resources.Load("Card/Card"+x)...
  • RFID-RC522/STM32F103RB/KEIL5 简单实现读取卡片ID

    万次阅读 多人点赞 2018-10-08 10:48:33
    读取卡片ID 1.重启开发板 2.将卡片放在感应区 3.串口显示卡片信息 核心源码 main.c #include "delay.h" #include "sys.h" #include "usart.h" #include "rc522.h" /* 版本:1.0.0: 1.简单实现RFID-RC522的ID读取并...
  • 用安卓的nfc现在读取一个标签,是NfcA类型,TypeA类型的卡片。 得到的Tag是:android.nfc.tech.NfcA try { //ndefTag.connect(); nfcaTag.connect();//连接卡 String atqa=""; for(byte tmpByte:nfcaTag....
  • 在Trello中添加加电“自定义字段”,并将您用于邮件合并的字段广告到卡片上 通过使用email.template.markdown作为模板创建电子邮件 创建mailer.local.js基于mailer.template.js 将idLists属性更新为trello列表的ID...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,439
精华内容 4,975
关键字:

卡片读取方式