当TLV字段使用3字节长度格式

时间:2017-10-02 23:38:21

标签: ios nfc ndef iso-15693 core-nfc

当NDEF长度超过256字节时,无法从CoreNFC获得任何响应,因此需要使用3字节字段而不是1字节字段。我应该注意,标签都可以在Android上阅读。

其他人是否可以确认此行为或帮助我了解如何指定文件,以便CoreNFC识别并读取该文件?

这样可行,

// TLV header
// Start of Type (T) field
0x03,         // This message contains an NDEF record
// End of Type (T) field

// Start of Length (L) field
// Length = payload length + length of value field
0xFE,         // Length field, adds 3 to account for length of value field when SR:1
// End of Length (L) field

// Start of Value (V) field
// Record head byte, MB:1,ME:1,CF:0,SR:1,IL:0,TNF:101
0xD5,         // Short record false SR:1, 1-byte payload length, unknown type        
0x00,         // Type set to zero, as specified for unknown type
0xFB,         // Payload length
// End of Value (V) field
// End of TLV header

但事实并非如此,

// TLV header
// Start of Type (T) field
0x03,         // This message contains an NDEF record
// End of Type (T) field

// Start of Length (L) field
// Length = payload length + length of value field
0xFF,         // Always 0xFF for SR:0, indicates length is between 256 and 65535
0x01,         // MSB of length field
0xF2,         // LSB of length field, adds 6 to account for length of value field when SR:0
// End of Length (L) field

// Start of Value (V) field
// Record head byte, MB:1,ME:1,CF:0,SR:0,IL:0,TNF:101
0xC5,         // Short record false SR:0, 4-byte payload length, unknown type        
0x00,         // Type set to zero, as specified for unknown type
0x00,         // MSB of payload length, should be the exact size of the payload (data)
0x00,
0x01,
0xEC,         // LSB of payload length
// End of Value (V) field
// End of TLV header

1 个答案:

答案 0 :(得分:1)

事实证明问题是由兼容性容器中的设置引起的。 Apple可以使用CoreNFC读取这两种类型的NDEF,如果你设置了" IC支持ReadMultipleBlocks Command"如果错误,它没有问题。我们把它设置为真。以下是与CoreNFC一起使用的CC的示例。

    // Start of Compatibility Container
0xE1,         // CC0, "Magic Number", NDEF message is present in memory
0x43,         // CC1, Version number 1.0, Read access enabled, Write access normally disabled
0x40,         // CC2, Memory size of data field and CC field in bytes divided by 8, 0x40 = 64, 64x8=512 Bytes
0x00,         // CC3, IC supports ReadMultipleBlocks Command
// End of Compatibility Container

从IC文档中读取更多内容,虽然它支持ReadMultipleBlocks命令,但它在128字节块中执行此操作。这可能是导致我们看到的奇怪行为的原因。

我仍然不明白为什么Android会毫无问题地处理它,Apple也无法读取它。但是更改设置可以解决CoreNFC的问题。