有效负载大于1字节时,NDEF标头如何工作?

问题描述

我正在尝试了解Mifare超轻芯片的工作原理。正常情况下,该页面对此进行了解释:https://learn.adafruit.com/adafruit-pn532-rfid-nfc/ndef(在页面的最后)

但是现在我有一个问题,我想在大于254字节的芯片上写入数据。 举例来说,我在上面写了493'A'(带有7字节的标头,数据总共为500字节)。 这是我从读取芯片后得到的信息(数字以十进制表示,而不是十六进制,因此代替“ 0xFF”时,它会显示“ 255”):

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,其中包含序列号等。 然后第五块以3开头,表示“ NDEF消息”,然后我得到大小。

例如,如果我只在芯片上写一个“ 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'时,总大小将为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获得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

任何人都可以向我解释我做错了什么,或者为什么我无法获得使我回到总体规模的正确算法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)