首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当有效载荷大于1字节时,NDEF头是如何工作的?

当有效载荷大于1字节时,NDEF头是如何工作的?
EN

Stack Overflow用户
提问于 2020-09-16 09:07:30
回答 2查看 218关注 0票数 1

我在试着理解一种超轻芯片是如何工作的。这个页面很好地解释了正常情况下的情况:https://learn.adafruit.com/adafruit-pn532-rfid-nfc/ndef (在页面的末尾)

但是现在我有一个问题,我想要在大于254字节的芯片上写数据。举个例子,我在上面写了493‘A’(7字节头的数据将是500字节)。下面是我从读取芯片中得到的信息(数字是十进制,而不是十六进制,所以不是'0xFF‘,而是'255'):

代码语言:javascript
复制
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个块是头,其中包含序列号等。然后第五个块以3开头,意思是"NDEF消息“,然后我得到大小。

例如,如果我只在芯片上写一个'A‘,那么给定的大小将是1 Byte有效载荷+7 Byte报头=8 Byte。所以第五座是这样的:

代码语言:javascript
复制
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个块更改为:

代码语言:javascript
复制
4:________  3 255   0 255 144   0

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

代码语言:javascript
复制
4:________  3 255   1   0 144   0

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

但是,再一次,当我用659‘A来得到666 Byte时,我得到了这个:

代码语言:javascript
复制
4:________  3 255   2 157 144   0

这对于这两种算法都不起作用:

代码语言:javascript
复制
255*2+157 = 667
255*2+2+157 = 669

最后一个例子是: 476位字节:

代码语言:javascript
复制
4:________  3 255   1 223 144   0

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

有人能向我解释我做错了什么,或者为什么我不能得到正确的算法,使我回到总体大小?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-17 05:24:17

我发现了。这不是关于乘法和加法,而是用二进制数来看待它。

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

在476字节的例子中,我得到了

代码语言:javascript
复制
4:________  3 255   1 223 144   0

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

代码语言:javascript
复制
  1 = 0000 0001
223 = 1101 1111

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

代码语言:javascript
复制
0000 0001 1101 1111 = 479

如果总大小超过259字节,就会添加3个额外的字节(idk为什么,但这就是我的芯片的工作方式。它使用1或4个字节,取决于大小)

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

代码语言:javascript
复制
4:________  3 255   2 157 144   0

  2 = 0000 0010
157 = 1001 1101

Total: 0000 0010 1001 1101 = 669
票数 0
EN

Stack Overflow用户

发布于 2020-09-16 12:56:55

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

但是,我认为您可能会因为阅读Adafruit的信息而感到困惑,因为这并不是所有可能性的全部规格,而是用于Mifare经典1K卡,它不是NFC标准类型芯片,与超光速不一样。如何在此芯片上放置NDEF消息是对经典卡的一种安慰,并在https://www.nxp.com/docs/en/application-note/AN1304.pdf中详细说明。

对于Utralight芯片与NFC 2规范兼容,详细说明如何兼容在https://www.nxp.com/docs/en/application-note/AN1303.pdf

对于完整的NFC类型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链接不适合您的芯片和一个非常简单的解释。

还要注意的是,用十进制而不是标准的十六进制来写数字,这使得读起来非常困难,因为大多数规范都是在十六进制中详细描述的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63916741

复制
相关文章

相似问题

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