【发布时间】: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
谁能向我解释我做错了什么,或者为什么我无法得到正确的算法来让我回到整体尺寸?
【问题讨论】: