1

我对 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后面是0athen d1,但是之前的所有值是3d什么?这是因为libnfc吗?

4

1 回答 1

1

您在第 0 页和第 1 页(字节 0 到 7)中看到的数据是卡的 UID。第 2 页包含卡特定数据(字节 8 和 9)和锁定字节(字节 10 和 11)。第 3 页包含 Capability Container (CC),指示此标签是根据 NFC Forum Type 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 消息的数据大于当前消息。由于数据以页(4 个字节)写入,并且在写入新消息时通常不会清除标签的数据区域,因此旧数据仍然可以从标签中读取。

您可能想阅读NFC 论坛的以下规范(可在其网站上找到):

  • 类型 2 标签操作规范
  • NFC 数据交换格式 (NDEF) 技术规范
  • NFC 记录类型定义 (RTD) 技术规范
  • NFC 文本 RTD 技术规范
于 2014-05-30T07:35:30.330 回答