簡體   English   中英

在NTAG213中獲取異常

[英]Getting exception in NTAG213

我正在使用以下代碼在NTAG213 NFC標簽上設置AUTH0(需要密碼驗證的第一頁):

try {
    result = nfca.transceive(new byte[]{
            (byte) 0xA2,  // Command: WRITE
            (byte) 0x29,  // Address: AUTH0
            (byte) 0x00   // starting address
    });
} catch (IOException e) {
    e.printStackTrace();
}

但是,當我在AUTH0上寫00h(作為起始地址)時,總是會遇到異常:“收發失敗”。

你能告訴我這里可能出什么問題嗎?

NTAG213(以及其他NTAG和MIFARE Ultralight芯片)使用4字節的頁面大小。 WRITE命令(0xA2)僅可用於寫入整個頁面。 因此,WRITE命令的data參數需要包含4個字節。

最簡單的方法是只覆蓋整個配置頁:

result = nfca.transceive(new byte[]{
        (byte) 0xA2,  // Command: WRITE
        (byte) 0x29,  // Address: CONFIG0
        (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
});

但是請記住,這還將覆蓋其他配置參數(鏡像字節和鏡像頁)。 如果要將這些其他參數設置為其默認值,則可以簡單地使用以下命令:

result = nfca.transceive(new byte[]{
        (byte) 0xA2,  // Command: WRITE
        (byte) 0x29,  // Address: CONFIG0
        (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00
});

但是,如果要將這些其他值保留在當前值中,則可能需要先閱讀頁面,然后使用這些值更新頁面(僅將AUTH0設置為0x00):

byte[] currentData = nfca.transceive(new byte[]{
        (byte) 0x30,  // Command: READ
        (byte) 0x29,  // Address: CONFIG0
});

result = nfca.transceive(new byte[]{
        (byte) 0xA2,  // Command: WRITE
        (byte) 0x29,  // Address: CONFIG0
        currentData[0], currentData[1], currentData[2], (byte) 0x00
});

暫無
暫無

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

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