簡體   English   中英

從MF0ICU2區分NTAG213

[英]Distinguish NTAG213 from MF0ICU2

有沒有什么辦法來區分NTAG213MF0ICU2基於其UID,ATQA或SAK值標簽? 由於必須對標簽進行不同的編程(NTAG213使用PWD / PACK或MF0ICU2使用3DES),因此必須有一種方法可以調用一個或另一個方法。

不幸的是,Android框架告訴我這兩個標簽都是MifareUltralight ,類型為TYPE_ULTRALIGHT_C 的ATQA( 0x0044 )和SAK( 0x00 )是相同的,也。

諸如NXP的NFC TagInfo之類的其他應用程序可以告訴我標簽的確切類型,因此我知道必須有某種方法。

一旦知道該標記是NXP標記(UID以0x04開頭),您將

  1. 首先發送GET_VERSION命令。 如果此命令成功,您將知道該標簽是EV1或更高版本(MIFARE Ultralight EV1,NTAG21x)。 否則,您可以假定它是第一代標簽(MIFARE Ultralight,Ultralight C,NTAG203)。

  2. 如果標簽是EV1標簽,則可以繼續分析對GET_VERSION命令的響應。 這將顯示產品類型(NTAG或Ultralight EV1)以及產品子類型,產品版本和存儲大小(可讓您確定確切的芯片類型:

    \n + ------------ + ------ + --------- + ----------- + ------- ------- +\n |  芯片  類型  子類型|  版本|  儲存空間\n + ------------ + ------ + --------- + ----------- + ------- ------- +\n |  NTAG210 |  0x04 |  0x01 |  0x01 0x00 |  0x0B |\n |  NTAG212 |  0x04 |  0x01 |  0x01 0x00 |  0x0E |\n |  NTAG213 |  0x04 |  0x02 |  0x01 0x00 |  0x0F |\n |  NTAG213F |  0x04 |  0x04 |  0x01 0x00 |  0x0F |\n |  NTAG215 |  0x04 |  0x02 |  0x01 0x00 |  0x11 |\n |  NTAG216 |  0x04 |  0x02 |  0x01 0x00 |  0x13 |\n |  NTAG216F |  0x04 |  0x04 |  0x01 0x00 |  0x13 |\n + ------------ + ------ + --------- + ----------- + ------- ------- +\n |  NT3H1101 |  0x04 |  0x02 |  0x01 0x01 |  0x13 |\n |  NT3H1101W0 |  0x04 |  0x05 |  0x02 0x01 |  0x13 |\n |  NT3H2111W0 |  0x04 |  0x05 |  0x02 0x02 |  0x13 |\n |  NT3H2101 |  0x04 |  0x02 |  0x01 0x01 |  0x15 |\n |  NT3H1201W0 |  0x04 |  0x05 |  0x02 0x01 |  0x15 |\n |  NT3H2211W0 |  0x04 |  0x05 |  0x02 0x02 |  0x15 |\n + ------------ + ------ + --------- + ----------- + ------- ------- +\n |  MF0UL1101 |  0x03 |  0x01 |  0x01 0x00 |  0x0B |\n |  MF0ULH1101 |  0x03 |  0x02 |  0x01 0x00 |  0x0B |\n |  MF0UL2101 |  0x03 |  0x01 |  0x01 0x00 |  0x0E |\n |  MF0ULH2101 |  0x03 |  0x02 |  0x01 0x00 |  0x0E |\n + ------------ + ------ + --------- + ----------- + ------- ------- +\n
  3. 如果該標簽不是EV1標簽,則可以發送AUTHENTICATE(第1部分)命令。 如果此命令成功,您將知道該標簽是MIFARE UltralightC。否則,您可以假定該標簽是Ultralight或NTAG203。

  4. 為了區分MIFARE Ultralight和NTAG203,您可以嘗試讀取Ultralight上不存在的頁面(例如,閱讀第41頁)。

您可以使用NfcAMifareUltralight (甚至可用於標簽)標簽技術將命令發送到標簽:

boolean testCommand(NfcA nfcA, byte[] command) throws IOException {
    final boolean leaveConnected = nfcA.isConnected();

    boolean commandAvailable = false;

    if (!leaveConnected) {
        nfcA.connect();
    }

    try {
        byte[] result = nfcA.transceive(command);
        if ((result != null) &&
            (result.length > 0) &&
            !((result.length == 1) && ((result[0] & 0x00A) == 0x000))) {
            // some response received and response is not a NACK response
            commandAvailable = true;

            // You might also want to check if you received a response
            // that is plausible for the specific command before you
            // assume that the command is actualy available and what
            // you expected...
        }
    } catch (IOException e) {
        // IOException (including TagLostException) could indicate that
        // either the tag is no longer in range or that the command is
        // not supported by the tag 
    }

    try {
        nfcA.close();
    } catch (Exception e) {}

    if (leaveConnected) {
        nfcA.connect();
    }

    return commandAvailable;
}

請注意,當標簽不支持命令時,某些NFC堆棧將生成IOException (通常為TagLostException )。 無論收到不支持命令的NACK響應或IOException ,都應在以后繼續斷開連接並重新連接標簽以重置標簽的狀態,然后再繼續發送其他命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM