【问题标题】:Is there any memory limit for NFC card emulation?NFC 卡仿真有内存限制吗?
【发布时间】:2020-12-16 15:40:59
【问题描述】:

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

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

我在文档中创建了这个:

PN532-HCE

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

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

【问题讨论】:

    标签: arduino nfc hce pn532


    【解决方案1】:

    我的理解是 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-4 read 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% 左右。

    【讨论】:

    • 哦,好吧,它更像是 TCP 1500 字节数据包。谢谢!
    • 是的 就像 TCP 最大数据包大小一样,github.com/nfcgate/nfcgate/wiki/NFC-Conversation 中的图片很好地展示了在什么级别使用的不同协议。很多 HCE 是通过模拟 4 类标签来完成的,因为这是通过将命令传递到 cpu 来最灵活的(一些阅读器有能力模拟 Mifare 经典或 3 类标签,但因为这种访问更多的是模拟内存块结构,因此您只需向它们提供数据,阅读器会为您处理内存访问协议,并且它们的大小有限,因为它们将其存储在阅读器的内存中)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多