[英]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步:
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.