问题描述
我正在尝试了解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 (将#修改为@)