使用 react-native-nfc-manager 写入标签上的指定扇区

Write to specified sector on tag using react-native-nfc-manager

我正在使用 NTAG I2C plus 2k 内存标签并使用 react-native-nfc-manager 库与标签交互。

有没有办法指定您要写入的扇区?

我知道有一个API来指定要写入的页面偏移量,但是你如何指定页面偏移量所在的扇区?

(已更新以包含以下代码示例)

let tech = Platform.OS === 'ios' ? NfcTech.MifareIOS : NfcTech.NfcA;
  await NfcManager.requestTechnology(tech, {
    alertMessage: 'Hold your phone close to the NFC tag.',
  });

  let fullLength = data.length + 7;
  let payloadLength = data.length + 3;

  let cmd =
    Platform.OS === 'ios'
      ? NfcManager.sendMifareCommandIOS
      : NfcManager.transceive;

  // select sector 2 prior to writing data
  await cmd([0xc2, 0xff]);
  await cmd([0x02, 0x00, 0x00, 0x00]);

  await cmd([
    0xa2,
    MEMORY_MAPPING[`${chunkToWriteTo}`][1],
    0x03,
    fullLength,
    0xd1,
    0x01,
  ]);
  await cmd([
    0xa2,
    MEMORY_MAPPING[`${chunkToWriteTo}`][2],
    payloadLength,
    0x54,
    0x02,
    0x65,
  ]);

  let currentPage = MEMORY_MAPPING[`${chunkToWriteTo}`][0] + 2;
  let currentPayload = [0xa2, currentPage, 0x6e];

  for (let i = 0; i < data.length; i++) {
    currentPayload.push(parseInt(data[i]));
    if (currentPayload.length == 6) {
      try {
        await cmd(currentPayload);
      } catch (error) {
        console.log(error);
      }
      currentPage += 1;
      currentPayload = [0xa2, currentPage];
    }
  }

提前致谢。

所以“NTAG I2C plus 2k”似乎是使用 NfcA 通信的 Certified Type 2 标签。

datasheet

此标签对 select 扇区的 2 类标准有额外的命令,因为 2 类标签通常没有扇区。

因此,阅读数据表第 10.12 节,您将收发以下命令字节示例

C2h FFh - Select 扇区

03h 00h 00h 00h - 扇区 3

然后使用 A2h 命令字节

正常写入页面地址

react-native-nfc-manage offers an nfcAHandler with a transceive 向 NFC 芯片发送和接收这些低级命令的方法。

更新:

对于 iOS 它将 Type 2 标签视为 Mifare Ultralight 的标签,因此 API 的 sendMifareCommandIOS 发送相同的命令。

(Android 和 iOS 都有 nfcAHandler

请注意,我没有尝试过这个,我只是使用普通的 Type 2 标签