【问题标题】:NFC reader can't read NDEF formatted messageNFC 阅读器无法读取 NDEF 格式的消息
【发布时间】:2020-04-16 20:46:32
【问题描述】:

我正在开发一个 nfc 编写器应用程序。 Mifare Ultralight 标签,ACR122 阅读器。读者向我展示了“TAG_ISO_14443_3”标准。 node.js,nfc-pcsc 库。 我需要写一个指向网站的 URL 链接,所以我的写标签函数是这样的(我在这里找到了 NDEF 结构示例link):

async function writeUrl (reader, url, block = 4) {
//   +-------------------------+----------------------------------------------------------------
//   | D1                      | Header flags 11010001 (MB = ME = 1, CF = 0, SR = 1, IL = 0, TNF = 0x1) TNF = 0x1 is "well known NFC format"
//   +-------------------------+----------------------------------------------------------------
//   | 01                      | Type Length (1 byte)
//   +-------------------------+----------------------------------------------------------------
//   | N                       | Payload Length (N bytes)
//   +-------------------------+----------------------------------------------------------------
//   | 55                      | Type Name ("U")
//   +-------------------------+----------------------------------------------------------------
//   | 04 ...                  | Payload: Identifier code = 4 (prefix "https://"),
//   |                         |          truncated URI = url
//   +-------------------------+----------------------------------------------------------------

  let flagsByte = parseInt('D1', 16)
  let typeLength = 1
  let payloadLength = 1 + url.length // identifierByte + url
  let typeName = parseInt('55', 16) // 'U', Url
  let header = Buffer.from([flagsByte, typeLength, payloadLength, typeName]) // 4 bytes
  let identifier = Buffer.from([parseInt('04', 16)]) // prefix https://, 1 byte
  let urlBuffer = Buffer.from(url, 'utf8')
  let payload = Buffer.concat([identifier, urlBuffer])
  let length = header.length + payload.length
  let remains = length % 4
  length += (4 - remains) // we can write only by blocks (4 bytes)
  if (length > 144) {
    length = 144 // maximum bytes possible
  }

  let data = Buffer.concat([header, payload], length)

  reader.write(block, data);
  console.log(`data written`, reader, data) // data has 30+ not-zero bytes, all ok
  return true;
}

有什么问题? 在我写完消息后,我的 NFC 阅读器应用程序(GoToTags Windows 应用程序)显示我的标签是空的。

请帮忙。我想我错过了一些小而重要的事情......

【问题讨论】:

    标签: node.js nfc acr122


    【解决方案1】:

    NDEF 不仅仅是为您精心设计的单个 NDEF 记录编写数据。

    一个 NDEF 消息可以有多个记录。

    您可能希望使用像 https://www.npmjs.com/package/ndef 这样的另一个库来轻松正确地创建完整的 NDEF 消息

    一旦您拥有完整的 NDEF 消息,您就可以将其写入卡片。

    我建议您阅读http://apps4android.org/nfc-specifications/NFCForum-TS-Type-2-Tag_1.1.pdf,因为您使用的是类型 2 卡的 NTAG213,因为它详细说明了如何在这些卡上读取和写入 NDEF 消息。

    简要介绍:-

    • 读取 Capability Container 以查找可写入 NDEF 消息的区域的开始和结束块
    • 写入起始 T L 数据
    • 编写 NDEF 消息
    • 写入 End T 数据

    希望这能让您了解使用低级命令写入 NDEF 数据所需的内容。 (请注意,我不使用 JS 进行 NFC,因此无法提供更详细的帮助)

    【讨论】:

    • 我希望我现在有足够的信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2022-01-04
    • 2015-07-23
    • 1970-01-01
    相关资源
    最近更新 更多