0

我想通过 NFC 从 Arduino 向手机发送信息。

为此,我有一个 PN532 模块。我想发送信息的方式是使用模块来模拟 NFC 标签并从手机读取消息。我不想使用真正的 NFC 卡的原因是由于内存限制。它们中的大多数具有近 800 字节的内存,而具有更多内存的则价格昂贵。如果我用 PN532 模块模拟卡,我还会有一些内存限制吗?

我在文档中创建了这个:

PN532-HCE

我看到的重要的是 APDU 字节限制。我不是 NFC 方面的专家,我不知道这是否会影响我在模拟卡内存中的使用。

我想要的信息是纯文本的 JSON。我认为 NDEF 消息支持这一点,因此 iPhone 可以读取它。JSON 最多可以包含 2500 个字符或字节,并且每天会更改很多次,因此物理卡的重写部分也是一个问题。

4

1 回答 1

0

我的理解是 ISO 14443-4 是一种传输协议https://webstore.iec.ch/preview/info_isoiec14443-4%7Bed4.0%7Den.pdf,因此限制了您可以发送/接收的数量一个命令。这并不限制您使用多个命令来发送和接收以模拟更多内存。

所以真正应该发生的事情是设备会通过 ISO 14443-4 向模拟卡发出 iso 7816-4 命令。

读取时的设备应遵守已确定为设备应支持的最大收发长度(在您的情况下,短 APDU 命令应为 256 字节),因此它应读取多个 256 字节块以读取整个文件(记忆)

请参阅 ISO 7816-4read binary命令https://cardwerk.com/smart-card-standard-iso7816-4-section-6-basic-interindustry-commands/#chap6_1它具有偏移和长度参数

因此,对于较大的数据,基本上您在 Arduino 上的 HCE 响应代码应该从 PN532 传递一个“读取 0 到 255 字节的二进制文件”命令,您将使用 JSON 数据的前 256 个字节进行响应。
然后设备将发出第二个“读取 256 到 512 字节的二进制文件”等,直到您要返回的所有数据都已返回。

因此,它读取的模拟文件(内存)是该设备支持的短 APDU(256k)可以传输的最大大小的块。

请注意,我没有对此进行任何编码,只是对标准有所了解。

请注意,您可以获得高达 32K 存储的卡,是的,它们的成本更高,但 4Kbyte Desfire 卡的价格仅为具有 888byte 内存的 Ntag216 价格的 150% 左右。

于 2020-12-16T18:36:06.353 回答