Android TI RF430FRL152HEVM NFC NDEF格式
我们设计了一个基于TI RF430FRL152HEVM评估模块的板,具有NFC功能。当安卓手机靠近主板天线时,NFC允许处理器启动并开始读取数据。 它将读取的数据放入内存 然后,手机必须使用NFC(或者ISO 15693)从设备中获取这些数据 目前我们知道的唯一方法是将其写入标准NFC内存块 我们下载了一个名为NFC TagInfo的Android应用程序,这让我们可以扫描传感器并收集传感器内存中的所有数据,即所有数据块 我们正在将其写入芯片制造商所说的FRAM中的NDEF消息区域。我为另一个项目编写了一个读写器NFC应用程序,效果很好,但它拒绝读取这里的数据,尽管NFC TagInfo确实读取了数据 我们假设TI芯片是NDEF格式的,但我们找到的所有关于如何实现这一点的文档都非常不清楚。所以我们猜它不是 有人能解释一下如何正确准备存储内容,以便手机可以读取NDEF信息吗 补充资料 我们从块0开始将数据写入FRAM,并尝试模拟在包含非常简单NDEF消息的典型标记中看到的数据。例如,我们存储了消息“ABCD”,使用NFC标记信息,您可以在前几个块中看到: 04 5c d8 08 4a 62 3e 80 96 48 00 00 e1 10 12 00 01 03 a0 0c 34 03 21 d1 01 1d 54 02 65 6e 41 42 43 44 20 20 ... 然而,我似乎无法将TI芯片置于8字节块模式。似乎没有与此相关的控制寄存器 从我的低级观点来看,以4或8字节写入块不是问题,也就是说,我按字节顺序在FRAM内存中写入上述数据 当我运行NFC TagInfo时,它会执行两项操作,但不会检测到NDEF消息:Android TI RF430FRL152HEVM NFC NDEF格式,android,nfc,ndef,texas-instruments,iso-15693,Android,Nfc,Ndef,Texas Instruments,Iso 15693,我们设计了一个基于TI RF430FRL152HEVM评估模块的板,具有NFC功能。当安卓手机靠近主板天线时,NFC允许处理器启动并开始读取数据。 它将读取的数据放入内存 然后,手机必须使用NFC(或者ISO 15693)从设备中获取这些数据 目前我们知道的唯一方法是将其写入标准NFC内存块 我们下载了一个名为NFC TagInfo的Android应用程序,这让我们可以扫描传感器并收集传感器内存中的所有数据,即所有数据块 我们正在将其写入芯片制造商所说的FRAM中的NDEF消息区域。我为另一个项
- 它确实能正确地检测到油液,并且射频技术为5型(ISO 15693/附件)
- 它也能正确读取块,在选择数据十六进制显示时,我能从块0开始精确地看到上面的数据
- 是否配置了4字节或8字节块模式,以及该模式最有可能在何处定义?我可以在4字节块模式下工作吗
- 标签5序列号是否相关?根据规范,似乎不会影响NDEF检查
- TAG 5应用区域是否与发卡机构相关?似乎与NDEF验证无关
- NDEF信息是否已放置在正确的区域
- 对于16位值,是高字节低字节排序还是低字节高字节排序
- 你知道怎么回事吗
0x04
)和功能容器中的内存大小(字节13:0x12
)所示。NXP的NTAG和MIFARE Ultralight系列遵循NFC Forum Type 2标签操作规范。但是,您的TI芯片(RF430FRL152H)基于ISO/IEC 15693,因此遵循NFC论坛类型5标签操作规范。标记操作规范定义了将NFC标记转换为NDEF标记的数据格式和命令集。由于NFC技术结合了几种不同的射频标准(ISO/IEC 14443、FeliCa、ISO/IEC 15693),并使用了NFC之前已经存在的标签硬件,因此有几种(目前有5种)不同的此类规范
为什么NFC TagInfo有时会看到块,然后在检测到NDEF时会看到页面?块和页是否相同?
在这种情况下,块和页是等效的。不同的措辞只是来自芯片制造商使用的术语。请注意,RF430FRL152H芯片使用术语“页面”对多个块进行分组,因此具有不同的含义
如果只是在正确的块中写入正确的字节,那么任何东西都可以作为NDEF提取,毕竟,在低级别上有什么区别?
区别在于您的TI RF430FRL152H标签芯片需要为NDEF内存区域使用与NXP标签不同的编码。这仅仅是因为它使用不同的低级通信技术(调制、编码、成帧、命令集),因此遵循不同的NFC论坛标签操作规范
为了使您的标签芯片成为NDEF标签,您需要从块0开始对NDEF内存区域使用以下编码:注意,功能容器中填充了假定块大小为8字节的值。您可以使用固件控制寄存器中的标志ISOBlockSize更改ISO块大小选项(请参阅中的第7.54节“固件系统控制寄存器”)<
Block 0: E1 40 79 00
Block 1: 03 0B D1 01
Block 2: 07 54 02 65
Block 3: 6e 41 42 43
Block 4: 44 FE 00 00
E1 40 F2 09 03 0B D1 01
07 54 02 65 6E 41 42 43
44 FE 00 00 00 00 00 00
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NdefFormatable ndefFormatable = NdefFormatable.get(tag);
if (ndefFormatable != null) {
try {
ndefFormatable.connect();
ndefFormatable.format(new NdefMessage(NdefRecord.createTextRecord("en", "ABCD")));
} catch (Exception e) {
} finally {
try {
ndefFormatable.close();
} catch (Exception e) {
}
}
}
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NfcV nfcV = NfcV.get(tag);
nfcV.connect();
byte[] tagUid = tag.getId(); // store tag UID for use in addressed commands
int blockAddress = 0;
byte[] cmd = new byte[] {
(byte)0x60, // FLAGS
(byte)0x20, // READ_SINGLE_BLOCK
0, 0, 0, 0, 0, 0, 0, 0,
(byte)(blockAddress & 0x0ff)
};
System.arraycopy(tagUid, 0, cmd, 2, 8);
byte[] response = nfcV.transceive(cmd);
nfcV.close();