簡體   English   中英

啟用/禁用NTAG213的計數器

[英]Enable/Disable counter for NTAG213

    MifareUltralight mifareUltralight = MifareUltralight.get(tag);
    byte[] toggleCounterCommand = new byte[]{(byte)0xA2, // NTAG213 command to write
                                    (byte)0x2A,  // page 42(dec) 2A(hex)    
                                     (byte)___};// not sure what to put here. 

NTAG213的數據表說明第42頁的第0個字節具有訪問信息。

第0個字節的結構如下:

 7       6         5        *4*            3          2  1  0
PROT  CFGLCK   RFUI    *NFC_CNT_EN*  NFC_CNT_PWD_PROT   AUTHLIM

將第4位設置為0或1應啟用或禁用計數器。 但我不確定如何在標簽上寫入時設置第4位。

任何人未來都會遇到這種情況的背景:

NTAG21x具有NFC計數器功能。 此功能使NTAG21x能夠自動增加由第一個有效觸發的24位計數器值

  • READ命令或
  • FAST-READ命令

在NTAG21x標簽由RF場供電之后。 一旦NFC計數器達到FF FF FF hex的最大值,NFC計數器值將不再改變。 使用NFC_CNT_EN位啟用或禁用NFC計數器(參見第8.5.7節) http://www.nxp.com/documents/data_sheet/NTAG213_215_216.pdf

我的理解是你在寫入標簽的正確軌道上,你想使用transceive方法來更新那個位,但是你不確定為了實現這個目的而寫什么數據。 請注意, MifraUltralight.transceieve(byte[])相當於通過NfcA連接到此標記並調用transceive(byte[])

需要注意的一件重要事情是“應用程序必須只發送完整字節的命令”(來自Android文檔 ),因此我們必須更新整個字節。 但是,我們要寫入標記,它只支持4字節(1頁)的有效負載,因此我們將重寫整個頁面。

這是我的經驗開始分解的地方,但我建議采用以下方法:

  1. 閱讀第42頁,將字節復制到緩沖區
  2. 將這些復制的字節寫入第42頁,但首先更新計數器位

做第1步:

NfcA transaction = NfcA.get(tag);
transaction.connect(); // error handle
byte cmdRead = (byte)0x30;
byte page = (byte)(0x42 & 0xff); // AND to make sure it is the correct size
byte[] command = new byte[] {cmdRead, page};
byte[] page42 = nfcAtransaction.transceive(command); // error handle

byte mask = 0b00010000; // 3rd bit, or should it be 4th?
byte newData = page42[0] | mask; 

做第2步:

byte cmdWrite = (byte)0xA2;
byte page = (byte)(42 & 0xff);
byte[] command = new byte[] { cmdWrite, page, newData, page42[1], page42[2], page42[3]};
byte[] result = nfcA.transceive(command); 

完全未經測試,但我希望這會有所幫助。

暫無
暫無

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

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