如何在android上以编程方式编写保护NTAG203 NFC芯片?

时间:2015-01-23 10:07:27

标签: android tags nfc mifare lockbits

我一直在寻找NTAG203 NFC芯片作为会员卡解决方案,并打算在每张卡上设置并写入一个唯一的ID。

奇怪的是我无法在网上找到有关如何编写保护NTAG203芯片的信息,尽管我可以找到写保护的芯片。我也见过提供写保护服务的应用程序。

如何编写Android应用程序以在NTAG203上启用写保护?

谢谢!

(为清晰起见,编辑问题)

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。 NTAG203(datasheet)是ISO / IEC 14443类型A(“NFC-A”)标签,遵循NFC论坛类型2标签操作规范。为了激活这种标签的物理写保护功能,您需要设置锁定位。

在Android上,您可以通过为标记句柄获取NfcA技术连接器类的实例来访问此类标记:

Tag tag = ...  // I assume you already received the tag handle by means of an NFC discovery intent
NfcA nfcA = NfcA.get(tag);
if (nfcA != null) {
    // this is an NFC-A tag
    ...

NTAG203的锁定位位于第2页(0x02)字节2-3和第40页(0x28)字节0-1中。这4个字节的每个位控制NTAG203存储区的某些页面的锁定状态。要激活锁定,必须通过对包含锁定位的页面发出写入命令,将锁定位设置为'1'。因此,对于锁定整个标记的最简单方案,您可以执行以下操作:

    // connect to the tag
    nfcA.connect();

    byte[] result;
    // write all-ones to the lock bits on page 0x02
    result = nfcA.transceive(new byte[]{
            (byte)0xA2,  // Command: WRITE
            (byte)0x02,  // Address: page 0x02 (2)
            (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF  // Data: set bytes 2-3 to all '1'
    });
    // write all-ones to the lock bits on page 0x28
    result = nfcA.transceive(new byte[]{
            (byte)0xA2,  // Command: WRITE
            (byte)0x02,  // Address: page 0x28 (40)
            (byte)0xFF, (byte)0x11, (byte)0x00, (byte)0x00  // Data: set byte 0 and lock bits in byte 1 to all '1'
    });

    nfcA.close();