使用NXP Mifare Ultralight在C中读取NFC腕带的正确数据

时间:2014-05-29 08:54:15

标签: c nfc mifare ndef lib-nfc

我对NFC设备阅读非常陌生,但我已经设法使用nfc-mfultralight.c(libnfc)中的代码在我自己的项目中实现。

我不明白的是,当我从MIFARE Ultralight乐队读取数据时,我会得到很多垃圾。

例如,我在标签中有号码255555574558888(我使用Android设备将此号码写入标签)。

现在我跑的时候:

nfc-mfultralight r /home/user/dump

我明白了

d▒r▒!▒ H▒▒U255555574558888▒-67644-67546-2346

这是来自libnfc的例子,所以这个程序不应该只读取正确的数据吗?我正在使用的Android应用只看到值255555574558888.值-67644-67546-2346是我之前写过的内容。

我如何知道我需要阅读的正确数据?我应该在示例代码中更改哪些内容才能正常工作?

我正在使用ACR122来读取标签中的数据。

PS:这是我的第一个使用NFC设备,libnfc和MIFARE Ultralight标签的项目,所以你认为我应该阅读的任何内容请告诉我。

修改1

所以我发现了这个问题:Reading a NFC Mifare card with NXP Reader Library

我觉得有点帮助我。我打印出另一个测试字符串的十六进制值并得到了这个

04  64  13  fb
72  f7  21  84 
20  48  00  00
e1  11  06  00 
03  0a  d1  01
06  54  02  65 
6e  68  65  79
fe  00  00  79 
35  35  38  38
38  38  fe  00 
2d  36  37  36
34  34  2d  36 
37  35  34  36
2d  32  33  34
36  fe  00  00
00  00  00  00
00

我看到3d后跟0a,然后是d1,但3d之前的所有值是多少?这是因为libnfc吗?

1 个答案:

答案 0 :(得分:1)

您在第0页和第1页(字节0到7)中显示的数据是卡的UID。第2页包含特定于卡的数据(字节8和9)以及锁定字节(字节10和11)。第3页包含功能容器(CC),指示此标记是根据NFC论坛类型2标记操作规范1.1版格式化的。标签的用户数据区域从第4页开始。

由于此标签遵循NFC论坛的标签操作规范,因此其上的NDEF数据存储在NDEF-TLV对象(标签0x03,长度0x0A)中。 0xD1表示NDEF消息,该消息由一个具有NFC论坛记录类型的短格式记录组成。记录类型“T”(0x54)表示它是文本记录。文本记录包含语言定义“en”(英语)和文本“hey”(0x68 0x65 0x79)。数据区由Terminator-TLV(标记0xFE,长度0x00)终止。

此外,以前的NDEF消息似乎有大于当前NDEF消息的数据。由于数据是以页面(4个字节)写入的,并且在写入新消息时通常不会清除标记的数据区域,因此仍可从标记中读取旧数据。

您可能希望通过NFC Forum阅读以下规范(可在其网站上找到):

  • 类型2标签操作规范
  • NFC数据交换格式(NDEF)技术规范
  • NFC记录类型定义(RTD)技术规范
  • NFC Text RTD技术规范