我从eBay上拿到了一个小红色的“ELECHOUSE V3”套件,带有一张白卡和一个蓝色的密钥卡转发器,我写了一个C程序来创建和解码数据包,我可以发送命令,它用AC数据包响应,我可以阅读版本和状态 . 我没有使用任何RFID库,我只是使用普通的C并制作我自己的简单库,因为我想了解它,我想为那些真正想要了解它的人发布一个简单的单个文件演示,而不仅仅是使用一些arduino lib或者其他什么 . 这就是我不问的所有问题 .
所以这就是我要问的问题:
发送扫描存在被动(非供电)发送应答器的确切命令是什么?我不确定它们是什么类型,但它们随套件一起提供,可能是ISO 14443 / 14443A .
实际上,我尝试了三星Galaxy S4上的标签,它说它们是ISO 14443-3A恩智浦MIFARE Classic 1K - 不支持 . 但它仍然显示了它们的序列号 .
扫描所有支持的卡类型的确切命令是什么?
要发送命令,我使用我的函数如下:sendcmd(“0x4A 0x01 0x00”); (0xD4的TFI自动添加到命令中,并且前导/ len / lcs /校验和都被计算和处理 . )
我确实收到了ACKS的命令,但无法确定要发送哪些命令来扫描卡片或读取它们 .
如果我能让PN532向我发送卡扫描数据,我应该可以使用PN532数据表解析它 .
非常感谢你,
杰西
1 回答
好吧..在尝试了数据表中显示的所有相关内容并没有成功之后,我将火腿无线电打开到13.56Mhz CW / LSB并且没有任何东西可以听到 . 所以只是为了踢,我尝试了RFRegulationTest命令,解锁了整个事情!似乎是一个测试命令,打开 Launcher 并保持开启,直到你发出另一个命令......但它根据需要初始化了一些东西!
所以这是使NXP NP532扫描卡所需的命令:(我使用的是115200bps的RS232,但对于其他接口应该类似 . )
你发送给它:
并且您将获得ACK并且发送器将锁定:0x00 0x00 0xFF 0x00 0xFF 0x00
此时 Launcher 将关键 . 也许让它为100mS或其他东西,然后你可以开始扫描卡:
然后芯片将打开无线电 Launcher 并开始扫描卡片直到卡片进入范围,然后它读取序列号,关闭 Launcher ,并为您提供一个包含以下内容的数据包:
0x4B,0x01 / 0x02(取决于是否检测到1或2张卡),然后是有关卡的各种信息,如序列号 .
您还可以设置在给定0x4A 0x02 0x00命令时尝试的最大尝试次数,方法是将尝试次数设置为低于0xFF的数字,如下所示:
在这种情况下,当您给出读取命令(0x4A 0x02 0x00)时,它将尝试一小段时间(0x10次)然后放弃并发送包含以下内容的数据包:
这意味着“发现卡片:零 . ”
有关所有详细信息,请参阅数据表,它确实告诉您需要了解的所有信息,除非我在运行rf test命令之前无法弄清楚如何启用变送器 .
无论如何,如果你喜欢的话,只要继续发送第二个命令一次或多次,如果你喜欢,每次你发送该命令它会扫描并告知你是否有一个范围内的卡!
或者,如果您将重试设置为0xFF,那么它将一直尝试直到它检测到一张卡,然后您只需要在找到一个时重新发送scan-for-card命令 .
0xFF的长字符串只是唤醒设备,因为它进入休眠状态并错过了您发送的前几个字节 .
我给出的以一堆0xFF开头的发送内容的示例是整个完整数据包,包括前导码,长度字段,校验和以及计算的所有内容 . 您可以直接发送它们以扫描卡片 .
初始RF测试命令和重试设置命令只需要在上电时运行一次,然后根据需要继续重新发送读取命令 .
我的PN532芯片报告为版本:1.6
这是我的小样本程序:
(RS232初始化部分我从一篇SO帖子中解脱出来 - 感谢无论是谁写的!)
(适用于Linux . 使用gcc编译nfc.c -o nfc.e)
(应该能够将它移植到任何平台,你只需要处理串口 - 剩下的就是平台独立 . )
(另请注意,这只是扫描卡片并返回序列号/ NFCID,并且仅针对被动模式下的106kbps的Mifare,ISO / IEC14443-3 A型卡 . 如果您想实际读取/写入卡上的内存,你必须编写更多代码,但这至少说明了入门所需的内容以及命令结构的工作原理,并为发送和解码数据包提供了一些方便的例程 . )