首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取mifare卡的二进制块?

如何读取mifare卡的二进制块?
EN

Stack Overflow用户
提问于 2015-01-30 03:56:14
回答 1查看 7.6K关注 0票数 1

我正在开发一个从读取器读取NFC卡的应用程序。我知道这样读取二进制块的代码:

代码语言:javascript
复制
FF B0 00 04 10

04用于块4,10用于16字节数据。我的卡上有数据"TEST009996“。我从4-8运行5个读取二进制块的代码,如下所示:

代码语言:javascript
复制
FF B0 00 04 10
FF B0 00 05 10
FF B0 00 06 10
FF B0 00 07 10
FF B0 00 08 10

我得到了以下结果:

代码语言:javascript
复制
T☻enTEÉ ☺
T☻enTEST00É
T☻enTEST009996É
enTEST009996■  6É
ST009996■  6    É

或用十六进制:

代码语言:javascript
复制
01 03 A0 10 44 03 11 D1 01 0D 54 02 65 6E 48 43 90 00
44 03 11 D1 01 0D 54 02 65 6E 48 43 49 44 30 30 90 00
01 0D 54 02 65 6E 48 43 49 44 30 30 39 39 39 36 90 00
65 6E 48 43 49 44 30 30 39 39 39 36 FE 00 00 36 90 00
49 44 30 30 39 39 39 36 FE 00 00 36 00 00 00 00 90 00

我应该创建一个算法来削减结果来获取数据吗?有什么更好的方法吗?

来源:

http://downloads.acs.com.hk/drivers/en/API-ACR122U-2.02.pdf

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 13:52:10

您的标记似乎是NFC论坛类型2标记(请在NFC论坛网站上查找NFC论坛类型2标记操作规范)。正如您提到的MIFARE,例如,这可能是一个MIFARE超轻,MIFARE超光速C或NTAG标记。

Type 2标记上的块由4个字节组成。read命令一次读取4个块。因此,read命令为您提供4个块(每个块4个字节),从给定的块偏移量开始,加上读取命令的状态字(0x9000表示成功)。在你的情况下你会得到:

代码语言:javascript
复制
Read(4, 16): 0103A010 440311D1 010D5402 656E4843 9000
Read(5, 16):          440311D1 010D5402 656E4843 49443030 9000
Read(6, 16):                   010D5402 656E4843 49443030 39393936 9000
Read(7, 16):                            656E4843 49443030 39393936 FE000036 9000
Read(8, 16):                                     49443030 39393936 FE000036 00000000 9000

因此,标记的内存如下所示:

代码语言:javascript
复制
0103A010 
440311D1
010D5402
656E4843
49443030
39393936
FE000036
00000000

2型标签(顺便说一句。为了确保该标记实际上符合Type 2标记操作规范,您还需要读取位于块3中的功能容器,该容器包含一系列标记长度-值(TLV)结构:

代码语言:javascript
复制
01 (Tag: Lock Control TLV)
  03 (Length: 3 bytes)
  A0 10 44 (Value: Information on position and function of lock bytes)
03 (Tag: NDEF Message TLV)
  11 (Length: 17 bytes)
  D1010D5402656E48434944303039393936 (Value: NDEF message)
FE (Tag: Terminator TLV; has no length field)

因此,您的标记包含NDEF消息。

代码语言:javascript
复制
D1010D5402656E48434944303039393936

这意味着

代码语言:javascript
复制
D1 (Header byte of record 1)
    - Message begin is set (= first record of an NDEF message)
    - Message end is set (= last record of an NDEF message)
    - Short record flag is set (= Payload length field consists of 1 byte only)
    - Type Name Format = 0x1 (= Type field contains an NFC Forum well-known type)
  01 (Type length: 1 byte)
  0D (Payload length: 13 bytes)
  54 (Type: "T")
  02656E48434944303039393936 (Payload field)

NFC论坛文本记录的有效载荷字段如下所示:

代码语言:javascript
复制
02 (Status byte: Text is UTF-8 encoded, Language code has a length of 2 bytes)
656E (Language code: "en")
48434944303039393936 (Text: "TEST009996")
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28228993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档