2015-01-23 1 views
0

Я искал чипы NFC NTAG203 для решения членских карточек и намерен настроить и записать уникальный идентификатор на каждую карту.Как написать чип NTC203 NFC программно на Android?

Как ни странно, я не могу найти много информации о том, как писать защищенные чипы NTAG203, хотя я могу найти защищенные от записи те, которые продаются. Я также видел приложения, предлагающие службу защиты от записи.

Как вы определяете приложение для Android, чтобы включить защиту записи на NTAG203?

Спасибо!

(под редакцией вопрос для ясности)

+1

Что вы подразумеваете под «программным способом», но «не используя приложение»? Вы можете использовать считыватель, подключенный к ПК с некоторым программным обеспечением. – corvairjo

+0

Извините - не очень понятно - я имел в виду, что искал метод, который можно закодировать в моем собственном приложении для Android. Я хотел опустить ответы, предлагающие использовать стороннее приложение. - Обновил вопрос. – Ali

ответ

0

Да, это возможно. NTAG203 (datasheet) является тегом ISO/IEC 14443 типа A («NFC-A») и следует спецификации спецификации тега NFC Forum Type 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(); 
+0

Просто для полноты: вы можете использовать 'makeReadOnly()' для определения сообщения NDEF как только для чтения на уровне NFC/NDEF. Однако это менее безопасно, чем описывал метод Майкл Роланд. Но использование 'makeReadOnly()' работает на всех типах чипов NFC, а установка битов блокировки зависит от типа микросхемы. – corvairjo

+0

Правильно, хотя вы должны заметить, что 'makeReadOnly()' не работает во всех комбинациях устройств и тегов. Более того, он не обязательно устанавливает фактические биты блокировки тега. –

+0

'makeReadOnly()' устанавливает бит внутри CC. Это должно быть покрыто стандартом NFC и должно работать на всех стандартных совместимых чипах. Существуют ли какие-либо устройства, которые не поддерживают это в своем API? – corvairjo