NTAG I2C FAST_READ在特定页地址之后出错 [英] NTAG I2C FAST_READ is erring out after a particular page address

查看:12
本文介绍了NTAG I2C FAST_READ在特定页地址之后出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是NTAG I2C加2000内存标记,并且能够成功执行特定页面地址范围的FAST_READ,但超出了我收到的错误范围。

iOS

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

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

While,开始地址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}

Android

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

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

While,开始地址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

提前谢谢。

推荐答案

来自标记的datasheet

备注:FAST_READ命令可以用一个命令读出一个扇区的整个内存。然而,NFC设备的接收缓冲区必须能够处理请求的数据量,因为不可能进行链接

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

Android一般最大传输长度为253字节或63页。

Android版的REACT-NFC-MANAGER API在其API中也有getMaxTransceiveLength,因此您可以计算FAST_Read可以在您的硬件上执行的最大页面数。

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

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

收发超时可以设置,但不能使用REACTION-NFC-MANAGER API设置

同样,在iOS中没有更改任何超时值的选项,但出现错误,指示与标记的通信已超时。

因此,您可以尝试增加Android上的超时值,而不是分解为多个FAST_Read,但计算超时时间可能会很困难,如果设置得太大,可能会产生负面影响。

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

这篇关于NTAG I2C FAST_READ在特定页地址之后出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆