【问题标题】:NTAG I2C FAST_READ is erring out after a particular page addressNTAG I2C FAST_READ 在特定页面地址后出错
【发布时间】:2021-08-11 18:04:07
【问题描述】:

我正在使用 NTAG I2C 加上 2k 内存标签,并且能够成功地对特定页面地址范围执行 FAST_READ,但在超出该范围时出现错误。

iOS

起始地址0x04和结束地址0x46读取成功

await cmd([0x3a, 0x04, 0x46]);

同时,起始地址 0x04 和结束地址 0x47 失败

await cmd([0x3a, 0x04, 0x47]);

错误

input bytes: 3A0C0C
input bytes: 3A0447
[CoreNFC] 00000002 816c6760 -[NFCTagReaderSession transceive:tagUpdate:error:]:771  Error Domain=NFCError Code=100 "Tag connection lost" UserInfo={NSLocalizedDescription=Tag connection lost}

安卓

起始地址0x04和结束地址0x49读取成功

await cmd([0x3a, 0x04, 0x49]);

同时,起始地址 0x04 和结束地址 0x4b 失败

await cmd([0x3a, 0x04, 0x4b]);

错误

D/NfcService: Transceive start
D/NfcService: Transceive End, Result: 0 mTransceiveSuccess: 1 mTransceiveFail: 0
D/NfcService: Transceive start
D/NfcService: Transceive End, Result: 2 mTransceiveSuccess: 1 mTransceiveFail: 1
D/ReactNativeNfcManager: transceive fail: android.nfc.TagLostException: Tag was lost.
I/ReactNativeJS: Error: transceive fail

提前致谢。

【问题讨论】:

    标签: nfc react-native-nfc-manager


    【解决方案1】:

    来自标签的datasheet

    备注:FAST_READ 命令可以通过一个命令读取一个扇区的整个内存。尽管如此,NFC 设备的接收缓冲区必须能够处理请求的数据量,因为不可能进行链接

    当我在原生代码中对 Android 上类似的标记类型执行 FAST_READ 时,我会执行 getMaxTransceiveLength 以找出缓冲区的大小并将其除以 4 并向下舍入以找到 FAST_READ 可以的最大页数一次做,必要时分成多个 FAST_READ。

    一般而言,最大 Transceive 长度在 Android 上为 253 字节或 63 个页面。

    适用于 Android 的 react-native-nfc-manager API 在其 API 中也包含 getMaxTransceiveLength,因此您可以对 FAST_READ 可以在您的硬件上执行的最大页数进行相同的计算。

    我没有在 iOS 上完成 FAST_READ,但预计会有类似的限制(它确实有一个错误代码表示收发数据包太大,但我还没有看到在发送命令之前询问它的最大收发长度的方法)

    虽然getMaxTransceiveLength 可能用于发送命令的大小,但由于发送和接收数据速率相同,因此应该能够在收发超时之前返回此字节数。

    使用 react-native-nfc-manager API 可以设置但不能设置收发超时

    在 iOS 中再次没有选项可以更改任何超时值,但有一个错误表明与标签的通信已超时。

    因此,您可以尝试在 Android 上增加超时值,而不是分解为多个 FAST_READ,但要计算出超时应该多长可能会很困难,并且如果将其设置得太大可能会产生负面影响。

    对于 Android,假设最大发送大小也可以安全接收可能更容易。对于 iOS,假设您实验的最大接收大小或处理错误并使用退避算法重新读取。

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多