代码之家  ›  专栏  ›  技术社区  ›  navillus

当TLV字段使用3字节长度格式时,CoreNFC不会读取

  •  0
  • navillus  · 技术社区  · 7 年前

    其他人是否可以确认此行为或帮助我了解如何指定文件,以便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 回复  |  直到 7 年前
        1
  •  1
  •   navillus    7 年前

    事实证明,问题是由兼容性容器中的设置引起的。苹果可以使用CoreNFC读取这两种类型的NDEF,如果将“IC supports ReadMultipleBlocks Command”的位设置为false,则它可以正常工作。我们把它设定为真的。下面是一个使用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字节块中实现的。这可能是我们看到的奇怪行为的原因。

    我仍然不明白为什么安卓可以毫无问题地处理它,而苹果无法阅读它。但是更改设置可以解决CoreNFC的问题。