【问题标题】:How does the NDEF Header work when the Payload is bigger than 1 Byte?当 Payload 大于 1 Byte 时,NDEF Header 是如何工作的?
【发布时间】:2021-01-03 02:09:47
【问题描述】:

我想了解我拥有的 Mifare Ultralight 芯片是如何工作的。这个页面在正常情况下几乎解释了它:https://learn.adafruit.com/adafruit-pn532-rfid-nfc/ndef(在页面的最后)

但现在我有一个问题,我想在大于 254 字节的芯片上写入数据。 例如,我在上面写了 493 'A's(使用 7 字节标题,数据总共将是 500 字节)。 这是我从读取芯片中得到的信息(数字是十进制的,而不是十六进制的,所以它会说 '255' 而不是 '0xFF'):

0:________  4  34  42 132 144   0 

1:________186 144 107 129 144   0 

2:________192  72   0   0 144   0 

3:________225  16 109   0 144   0 

4:________  3 255   1 247 144   0 

5:________193   1   0   0 144   0 

6:________  1 240  84   2 144   0 

7:________101 110  65  65 144   0 

8:________ 65  65  65  65 144   0 ...`

我的理解是,前4个块是Header,其中包含序列号等。 然后第五个block以3开头,意思是“NDEF Message”,然后我就得到了size。

例如,如果我只在芯片上写一个“A”,那么给定的大小将是 1 字节有效载荷 + 7 字节头 = 8 字节。所以第 5 块看起来像这样:

4:________  3   8 209   1 144   0
(As the size doesn't exceed 254 byte, the 209 and 1 are not part of that size byte anymore)

但是当我写 248 'A's 时,总大小将是 255 字节,这会将第 5 块更改为:

4:________  3 255   0 255 144   0

首先我认为这表明我需要计算x * y + z,在这个例子中,x = 255,y = 0 和 z = 255,所以 255 * 0 + 255 因为这会给我 255,总体大小,但是当我添加一个“A”时,大小为 256 字节,标题变为:

4:________  3 255   1   0 144   0

这再次表明计算是x * y + y + z, 255*1+1+0 = 256。

但话又说回来,当我使用 659 'A's 来获得 666 字节时,我得到了:

4:________  3 255   2 157 144   0

这同样不适用于以下任何一种算法:

255*2+157 = 667
255*2+2+157 = 669

最后一个例子:476 字节:

4:________  3 255   1 223 144   0

255 * 1 + 223 = 478
255 * 1 + 1 + 223 = 479

谁能向我解释我做错了什么,或者为什么我无法得到正确的算法来让我回到整体尺寸?

【问题讨论】:

    标签: nfc mifare ndef


    【解决方案1】:

    如果没有确切的芯片类型然后检查它的数据表,这很难回答。

    但我认为您可能会因为阅读 Adafruit 的信息而感到困惑,因为它不是所有可能性的完整规范,它适用于不是 NFC 标准类型的 Mifare Classic 1K 卡芯片,与 Ultralight 不同。 Classic 卡如何在此芯片上放置 NDEF 消息,详细信息请参见 https://www.nxp.com/docs/en/application-note/AN1304.pdf

    Utralight芯片兼容NFC Type 2规范,具体如何兼容请见https://www.nxp.com/docs/en/application-note/AN1303.pdf

    如需完整的 NFC Type 2 规范,请访问http://apps4android.org/nfc-specifications/NFCForum-TS-Type-2-Tag_1.1.pdf

    完整的 NDEF 规范也可以在 https://github.com/haldean/ndef/blob/master/docs/NFCForum-TS-NDEF_1.0.pdf 获得

    因此有许多因素会影响大小计算,包括标准记录不足、分块等。

    希望如果您阅读了所有正确的文档,您将能够得到答案,因为 Adafruit 链接不适合您的芯片和非常简单的解释。

    另请注意,以十进制而不是标准的十六进制编写数字会使阅读变得非常困难,因为大多数规范都以十六进制详细说明。

    【讨论】:

      【解决方案2】:

      我发现了。 这不是关于乘法和加法,而是关于以二进制形式查看它。

      首先,第一个完整字节不直接包含在计算中。 重要的是其他两个字节。

      在 476 字节示例中,我得到了

      4:________  3 255   1 223 144   0
      

      这意味着我必须以二进制形式查看1223

        1 = 0000 0001
      223 = 1101 1111
      

      现在我必须将它们合并在一起:

      0000 0001 1101 1111 = 479
      

      如果整体大小超过 259 字节,则会添加 3 个额外字节(我知道为什么,但这是我的芯片的工作原理。它使用 1 或 4 个字节,具体取决于大小)

      另一个例子是 666 + 3 Byte = 669:

      4:________  3 255   2 157 144   0
      
        2 = 0000 0010
      157 = 1001 1101
      
      Total: 0000 0010 1001 1101 = 669
      

      【讨论】:

        猜你喜欢
        • 2015-11-19
        • 1970-01-01
        • 2019-08-08
        • 2021-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多