我正在使用 ST25R3916 实现 NFC-A 类型 2 标签仿真。这是在读取器模式和标签模式之间切换的设备的一部分,并且读取器模式经过调整并且工作得很好。由于我现在正在开发中,阅读器模式已关闭,因此它仅进行 T2T 模拟。
ST25R3916可以设置为自动防碰撞,只需加载NFCID、SENS_RES、SEL_RES_L1、SEL_RES_L2和SEL_RES_L3即可。对于 T2T,我的值应该都是准确的:NFCID 是 7 位十六进制数字,对于 7 位 NFCID,SENS_RES 是 {0x00, 0x44},对于 NFCID 不完整和 T2T,SEL_RES_L1 是 0x04,对于 T2T,SEL_RES_L2 是 0x00。当 Pixel 读取模拟的 T2T 时,它会按预期获取所有这些信息,并继续经历唤醒/睡眠周期。
标签模式(监听模式)给我带来了更多麻烦。我确信我的代码按预期运行,因为当我尝试使用另一个 ST25R 开发板读取模拟 T2T 时,它的响应完全符合预期,并且范围相当广泛。
但是对于 Pixel 6a(Android 14),它只能在很小的物理区域内完成防碰撞和交换数据,尽管我可以看到设备正在通过大面积检测 NFC Field On 和 NFC Field Off。但连接后,它可以可靠地工作,并将继续读取数据并发送 HLTA。
对于 Galaxy Fold 4 (Android 14),它甚至从未完成防碰撞,并且始终在级联级别 2 处获得 Field Off。对于 iPhone 14,其行为与 Fold 非常相似,但最终用户应用程序将在 Android 上,因此我并不特别担心 iPhone 的行为。
Android NFC标签读取具体是通过哪些步骤来完成防碰撞的,不同手机有何不同?我原以为流程(SENS、SDD、SEL)是通用的。