Обнаружение и доступ к NDEF #
В этой главе описывается, как данные NDEF (например, сообщение NDEF) ДОЛЖНЫ храниться и получать доступ к ним в тегах MIFARE Classic и MIFARE Plus.
Сообщение NDEF, которым это примечание по приложению управляет внутри MIFARE Classic и MIFARE Plus, хранится внутри сообщения NDEF TLV, которое называется обязательным NDEF Message TLV или первым сообщением NDEF TLV. Обязательным TLV сообщения NDEF также является сообщением NDEF TLV, найденным в соответствии с процедурой обнаружения NDEF (см. раздел 1. 4.1).
Менеджмент NDEF #
Для обнаружения и доступа к данным NDEF (например, сообщению NDEF) внутри метки MIFARE Classic и MIFARE Plus должен использоваться MAD (см. раздел 2.4) вместе с GPB секторов NFC.
Идентификатор приложения (AID) MAD, называемый NFC AID, был зарезервирован для идентификации секторов с данными NDEF. Сектор с данными NDEF называется сектором NFC. Два поля NFC AID задаются следующим образом:
код кластера функций равен E1h для идентификации кластера секторов с данными NDEF, и
код приложения равен 03h для идентификации сектора NFC, с которым связано это примечание по приложению.
Один или несколько секторов NFC МОГУТ присутствовать внутри метки MIFARE Classic 1k/4k.
Если присутствует более одного сектора NFC, секторы NFC ДОЛЖНЫ быть смежными. В случае MIFARE Classic 4k или MIFARE Plus с 4 Кбайт он ДОЛЖЕН считаться смежным последовательность секторов NFC, которая включает в себя сектор MAD 16.
Примерами смежных секторов NFC являются:
- Секторы NFC от сектора 2 до сектора 3, и
- Секторы NFC от сектора 1 до сектора 39. В этом случае сектор MAD 16 содержится, но все же, как определено выше, секторы NFC считаются смежными.
Примером несмежных секторов NFC является:
- сектор 3 и сектор 5 без сектора 4 являются секторами NFC. В этом случае сектор 4 не является сектором NFC, поэтому два оставшихся сектора NFC не являются смежными.
Данные NDEF ДОЛЖНЫ быть записаны от сектора NFC с наименьшим номером сектора до самого большого.
Байт общего назначения (GPB, см. разделы 2.1 и 2.3) каждого сектора NFC предоставляет информацию о номере версии модели сопоставления, используемой для хранения данных NDEF в MIFARE Classic и MIFARE Plus (см. раздел 1. 1.1) и доступ на запись секторов NFC. ГПБ кодируется в соответствии с таблицей 1.
Таблица 1. Структура байтов общего назначения
msb Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | lsb Бит 0 | |
Номер версии сопоставления | Условия доступа | |||||||
Номер основной версии | Дополнительный номер версии | Условие доступа на чтение | Условие доступа на запись |
4 наименее значимых бита (lsb) GPB указывают на условия доступа сектора NFC:
- Бит 2-3 указывает на состояние доступа на чтение:
- Значение 00b указывает на доступ на чтение, предоставленный без какой-либо безопасности.
- Значение 11b указывает на отсутствие доступа на чтение.
- Любое другое значение указывает на то, что операции безопасности поставщика необходимы для предоставления доступа на чтение, т.е. проприетарного.
- Бит 0-1 указывает на условие доступа на запись:
- Значение 00b указывает на доступ на запись, предоставленный без какой-либо безопасности.
- Значение 11b указывает на отсутствие доступа на запись.
- Любое другое значение указывает на то, что операции безопасности поставщика необходимы для предоставления доступа на запись, т.е. проприетарного.
4 наиболее значимых бита (msb) указывают номер версии сопоставления (см. раздел 1. 1.1):
- Бит 7-6 (2 msb поля номера версии сопоставления) указывает основной номер версии.
- Бит 5-4 (поле 2 lsb отображения номера версии) указывает на дополнительный номер версии.
Внутри метки MIFARE Classic и MIFARE Plus сектор(ы) NFC, содержащий обязательное сообщение NDEF TLV, должен быть установлен с условием доступа на чтение, равным 00h, и условиями доступа на запись, равными либо 00b, либо 11b (см. раздел 1. пункт 3).
Устройство Reader, реализующее это примечание по приложению, ДОЛЖНО управлять тегами MIFARE Classic и MIFARE Plus с основным номером версии, равным 01b, и дополнительным номером версии, равным 00b, т.е. сопоставлением версии 1.0.
Обработка версий #
GPB секторов NFC содержит номер версии карты прикладной картографической модели тега MIFARE Classic 1k/4k или MIFARE Plus. Номер версии сопоставления обозначается двумя номерами: основным номером версии и дополнительным номером версии.
Обработка различных основных и второстепенных номеров версий тега MIFARE Classic или MIFARE Plus (называемого MSVNo) и реализованного в устройстве Reader (называемого NFCDevVNo) объясняется в 4 случаях таблицы 12.
Таблица 12. Обработка номеров версий документа сопоставления
-
Нет Случай с номером версии Обработка 1 Мажор NFCDevVNo равен мажору MSVNo, и минор NFCDevVNo больше или равен минорному MSVNo
Считывающее устройство ДОЛЖНО получить доступ к метке MIFARE Classic или MIFARE Plus и использовать все функции прилагаемого документа сопоставления с этим тегом MIFARE Classic или MIFARE Plus. 2 Если мажор NFCDevVNo равен мажору MSVNo, и минор NFCDevVNo ниже, чем минорный MSVNo
Возможно, не все функции тега MIFARE Classic или MIFARE Plus доступны. Считывающее устройство ДОЛЖНО использовать все свои функции и ДОЛЖНО получить доступ к этой метке MIFARE Classic или MIFARE Plus.
-
Нет Случай с номером версии Обработка 3 Если основной NFCDevVNo меньше, чем основной MSVNo Несовместимый формат данных. Устройство Reader не может распознать данные тегов MIFARE Classic или MIFARE Plus. Считывающее устройство ДОЛЖНО отклонить эту метку MIFARE Classic или MIFARE Plus. 4 Если основной NFCDevVNo больше, чем основной MSVNo Устройство Reader может реализовать поддержку предыдущих версий этой спецификации в дополнение к основной версии. В случае, если устройство Reader имеет поддержку предыдущей версии, оно ДОЛЖНО получить доступ к тегу MIFARE Classic или MIFARE Plus. Напротив, в случае, если устройство Reader не поддерживает предыдущую версию, оно ДОЛЖНО отклонить тег MIFARE Classic или MIFARE Plus.
Хранилище NDEF #
Формат данных сообщения NDEF определен в [NDEF]. Сообщение NDEF ДОЛЖНО храниться в поле значений сообщения NDEF TLV (см. раздел 2.6.1) с использованием одного или нескольких секторов NFC. Секторы NFC идентифицируются NFC AID в секторе (секторах) MAD.
Жизненный цикл #
Секторы NFC тега MIFARE Classic или MIFARE Plus могут находиться в следующих состояниях ИНИЦИАЛИЗИРОВАНО, ЧТЕНИЕ/ЗАПИСЬ или ТОЛЬКО ДЛЯ ЧТЕНИЯ. Секторы NFC ДОЛЖНЫ находиться только в одном состоянии в определенный момент времени. Состояние ДОЛЖНО отражаться в содержании Секторов NFC. Государство связано не с одним сектором NFC, а со всеми секторами NFC вместе. Состояния описаны в следующих разделах.
Если тег MIFARE Classic или MIFARE Plus содержит только секторы NFC, состояние секторов NFC называется состоянием тега MIFARE Classic или MIFARE Plus. В приведенном ниже описании состояние тега MIFARE Classic или MIFARE Plus путается с (т.е. равно) состоянием секторов NFC.
Каждое состояние имеет свои допустимые операции, называемые переходами или изменениями состояния. Переходы состояний актуальны только для устройств чтения, которые способны записывать теги MIFARE Classic или MIFARE Plus.
Различные состояния определяются путем сравнения GPB сектора NFC, где начинается обязательный TLV сообщения NDEF, и полей обязательного сообщения NDEF TLV. Обратите внимание, что биты доступа секторного прицепа, описанные в разделе 2.5, не используются в данном руководстве по применению для определения конкретного состояния.
Если тег MIFARE Classic или MIFARE Plus не находится в допустимом состоянии в соответствии с настоящим примечанием по применению, данные NDEF метки MIFARE Classic или MIFARE Plus во всех секторах NFC ДОЛЖНЫ быть проигнорированы. Причинами МОГУТ быть:
- Несмежные сектора NFC.
- Внутри метки нет секторов NFC, т.е. ни один сектор не обозначен MAD с помощью NFC AID.
- Несоответствие между общей длиной блоков TLV и фактической длиной области данных.
- Недопустимый блок TLV.
ИНИЦИАЛИЗИРОВАННОЕ состояние #
Метка MIFARE Classic или MIFARE Plus ДОЛЖНА быть обнаружена в инициализированном состоянии, когда:
-
-
-
- GPB устанавливается так, как описано в разделе 1. 1, в частности, с битом 0-1, равным 00b, и битом 2-3, равным 00b (предоставляется доступ на чтение и запись),
- сектор(ы) NFC содержит одно сообщение NDEF TLV (обязательное), и
- длина поля обязательного сообщения NDEF TLV равна 00h.
-
-
В состоянии ИНИЦИАЛИЗИРОВАННЫЙ NFC устройство МОЖЕТ изменять содержание обязательного сообщения NDEF TLV, записывающего в него сообщение NDEF. Приложение D в главе 10, Приложение E в главе 0 и Приложение F в главе 12 показывают два примера соответственно MIFARE Classic 1k, MIFARE Plus с 2 Кбайтами и MIFARE Classic 4k или MIFARE Plus с 4 Кбайтами в инициализированном состоянии.
Состояние ЧТЕНИЯ/ЗАПИСИ #
Метка MIFARE Classic или MIFARE Plus ДОЛЖНА быть обнаружена в состоянии READ/WRITE, когда:
-
-
-
- GPB устанавливается так, как описано в разделе 1. 1, в частности, с битом 0-1, равным 00b, и битом 2-3, равным 00b (предоставляется доступ на чтение и запись),
- обязательное сообщение NDEF TLV присутствует в секторе (секторах) NFC, и
- поле длины обязательного сообщения NDEF TLV отличается от нуля.
-
-
Состояние READ/WRITE ДОЛЖНО быть достигнуто через ИНИЦИАЛИЗИРОВАННОЕ состояние. В этом состоянии устройство NFC МОЖЕТ изменять содержание обязательного сообщения NDEF TLV, записывающего в него сообщение NDEF.
Состояние ТОЛЬКО ДЛЯ ЧТЕНИЯ #
Метка MIFARE Classic или MIFARE Plus ДОЛЖНА быть обнаружена в состоянии ТОЛЬКО ДЛЯ ЧТЕНИЯ, когда:
-
-
-
- GPB устанавливается так, как описано в разделе 1. 1, в частности с битом 0-1, равным 11b, и битом 2-3, равным 00b (доступ на запись не предоставляется, предоставляется только доступ на чтение),
- обязательное сообщение NDEF TLV присутствует в секторе (секторах) NFC, и
- поле длины обязательного сообщения NDEF TLV ДОЛЖНО отличаться от нуля.
-
-
В состоянии READ-ONLY всем секторам NFC предоставлен доступ только для чтения. Тег MIFARE Classic или MIFARE Plus остается в состоянии ТОЛЬКО для чтения в течение оставшегося жизненного цикла.
Описание последовательности команд #
В этом разделе описано несколько процедур для управления данными NDEF, например, обязательный TLV сообщения NDEF внутри сектора (секторов) NFC. Различные изменения состояния или переходы между состояниями тега MIFARE Classic или MIFARE Plus также показаны подробно.
Каждый сектор, участвующий в процедурах, должен быть аутентифицирован с использованием операции аутентификации перед ее чтением или записью. Открытый ключ A ДОЛЖЕН быть выбран на основе типа сектора, т.е. сектора MAD или сектора NFC.
Процедура обнаружения NDEF #
Процедура обнаружения NDEF ДОЛЖНА использоваться для обнаружения обязательного сообщения NDEF (см. [NDEF]) внутри метки MIFARE Classic или MIFARE Plus.
Процедура обнаружения NDEF основана на проверке:
-
-
-
- сектор(ы) MAD,
-
-
-
-
-
- сектор(ы) NFC, и
- обязательное сообщение NDEF TLV, содержащее сообщение NDEF.
-
-
Как уже упоминалось, сообщение NDEF TLV, найденное процедурой обнаружения NDEF, называется обязательным сообщением NDEF TLV или первым сообщением NDEF TLV. Если MIFARE Classic или MIFARE Plus находится в состоянии READ/WRITE или READ-ONLY, это сообщение NDEF TLV содержит сообщение NDEF. В состоянии INITIALIZED сообщение NDEF TLV пусто.
- (1) После сбоя операции аутентификации или чтения MIFARE Classic или MIFARE Plus больше не отвечает на какие-либо команды, и их необходимо повторно активировать и выбрать для продолжения процедуры обнаружения NDEF.
Для выполнения Процедуры обнаружения NDEF считывающее устройство (или NFC-устройство) ДОЛЖНО выполнить следующие операции (см. также Рис. 6) на MIFARE Classic или MIFARE Plus:
- Проверьте наличие секторов MAD.
- Проверка подлинности и чтение секторов MAD: сектор (секторы) 0 для MAD1 или секторы 0 и 16 для MAD2 с помощью операции Read.
- Если внутри MAD обнаружен один или несколько AID, равных NFC AID, относящихся к одному или нескольким смежным секторам (секторам), то перейдите к пункту 4. В противном случае NFC AID не был обнаружен в теге MIFARE Classic или MIFARE Plus, а тег MIFARE Classic или MIFARE Plus не находится в допустимом состоянии.
- Для каждого сектора NFC выполните следующие операции, начиная от наименьшего номера сектора до самого высокого:
- Аутентифицируйте и считывайте трейлер сектора NFC с помощью открытого ключа A для секторов NFC (см. таблицу 6).
- Если операции аутентификации и чтения выполнены успешно, проверьте трейлер сектора NFC Sector. В противном случае, если аутентификация или операция чтения не удается, обнаруживается проприетарный сектор NFC (см. описание сектора NFC ниже), а затем перейдите к пункту f.
- Если биты 4-7 GPB описывают правильный номер версии в соответствии с правилами, определенными выше, перейдите к пункту d. В противном случае остановите процедуру, так как тег MIFARE Classic или MIFARE Plus не находится в допустимом состоянии.
- Если значение поля условия доступа на чтение (бит 2-3) GPB равно 00b, а значение условия доступа на запись (бит 0-1) GPB равно либо 00b, либо 11b, прочитайте блоки данных относительного сектора NFC с помощью операции Read, указанной в разделе 5.1.3, ищите TLV сообщений NDEF, и перейдите к пункту e. В противном случае, если значение поля доступа на чтение GPB отличается от 00h или значение условия доступа на запись (бит 0-1) GPB отличается от 00b и 11b, обнаруживается проприетарный сектор NFC (см. описание сектора NFC ниже), затем перейдите к пункту f.
- Если найден TLV-сообщение NDEF, это (т.е. первое) обязательное сообщение NDEF TLV, затем перейдите к пункту 5. В противном случае, если сообщение NDEF TLV не найдено, перейдите к элементу f.
- Если доступно, проверьте следующий сектор NFC и перейдите к элементу a. В противном случае, если больше нет доступных секторов NFC, остановите процедуру, так как TLV сообщения NDEF не найдено. Тег MIFARE Classic или MIFARE Plus не находится в допустимом состоянии.
- Если поле длины обязательного сообщения NDEF TLV отличается от нуля, сообщение NDEF (см. [NDEF]) обнаруживается в теге MIFARE Classic или MIFARE Plus, и устройство чтения МОЖЕТ использовать процедуру чтения NDEF или процедуру записи NDEF. Если поле длины равно нулю, в теге MIFARE Classic или MIFARE Plus не обнаруживается сообщение NDEF, и устройство чтения МОЖЕТ использовать процедуру записи NDEF (тег может находиться в состоянии INITIALIZED).
Процедура обнаружения NDEF не относится к действительному сообщению NDEF. Он считывает длину сообщения NDEF из поля длины сообщения NDEF TLV, но не анализирует сообщение NDEF.
Считывающее устройство ДОЛЖНО игнорировать и перепрыгивать через проприетарные сектора NFC. Проприетарный сектор NFC определяется как сектор NFC, который либо не аутентичен с открытым ключом A для секторов NFC, либо значение поля доступа на чтение GPB отличается от 00b, либо значение условия доступа на запись (бит 0-1) GPB отличается от 00b и 11b.
Каждый раз, когда операция аутентификации, операция чтения или операция записи завершаются сбоем, MIFARE Classic или MIFARE Plus остается беззвучным и больше не реагирует ни на какие
Команды. В этой ситуации для продолжения процедуры обнаружения NDEF необходимо повторно активировать и выбрать MIFARE Classic или MIFARE Plus.
Процедура чтения NDEF #
Процедура чтения NDEF используется устройством Reader для чтения сообщения NDEF из обязательного сообщения NDEF TLV. Перед прочтением Сообщения NDEF должна быть выполнена Процедура обнаружения NDEF, а тег MIFARE Classic или MIFARE Plus ДОЛЖЕН быть в действительном состоянии.
Используя процедуру чтения NDEF, считывающее устройство ДОЛЖНО считывать все сообщение NDEF из обязательного сообщения NDEF TLV с помощью одной или нескольких операций чтения. Длина сообщения NDEF, подлежащего чтению, указывается из поля длины обязательного сообщения NDEF TLV.
Если обязательное сообщение NDEF TLV хранится в одном или нескольких секторах NFC, считывающее устройство ДОЛЖНО иметь возможность аутентифицировать все эти сектора с помощью открытого ключа A для секторов NFC (см. Таблицу 6). В случае сбоя процедуры аутентификации тег MIFARE Classic или MIFARE Plus не находится в допустимом состоянии.
Процедура записи NDEF #
Процедура записи NDEF ДОЛЖНА использоваться считывающим устройством для записи обязательного сообщения NDEF TLV, содержащего сообщение NDEF внутри тега MIFARE Classic или MIFARE Plus.
Процедура записи NDEF использует операции чтения и записи (см. раздел 5.1.3 и раздел 5.1.4).
Для написания Сообщения NDEF тег MIFARE Classic или MIFARE Plus ДОЛЖЕН находиться в состоянии ИНИЦИАЛИЗИРОВАНО или ЧТЕНИЕ/ЗАПИСЬ, т.е. обязательное сообщение NDEF TLV ДОЛЖНО уже присутствовать внутри тега MIFARE Classic или MIFARE Plus.
Для выполнения процедуры записи NDEF считывающее устройство ДОЛЖНО выполнить следующие операции с тегом MIFARE Classic или MIFARE Plus:
- Используйте процедуру обнаружения NDEF (см. раздел 1.4.1), чтобы найти обязательное сообщение NDEF TLV. Если обнаружено обязательное сообщение NDEF TLV, перейдите к пункту 2. В противном случае, если TLV сообщения NDEF не найдено, завершите процедуру.
- Если доступный объем памяти для TLV сообщения NDEF равен или больше размера сообщения NDEF, следующие операции ДОЛЖНЫ выполняться в следующем порядке с использованием одной или нескольких операций записи:
- поле длины обязательного сообщения NDEF TLV ДОЛЖНО быть длиной в один байт, а его значение ДОЛЖНО быть установлено равным 00h,
- новое сообщение NDEF ДОЛЖНО быть записано в поле значения обязательного сообщения NDEF TLV, и
-
- поле длины обязательного сообщения NDEF TLV ДОЛЖНО быть обновлено длиной сообщения NDEF.
В противном случае, если в теге MIFARE Classic или MIFARE Plus недостаточно места памяти, сообщение NDEF НЕ ДОЛЖНО быть записано в тег MIFARE Classic или MIFARE Plus.
- Если пункт 2 выполнен успешно, считывающее устройство ДОЛЖНО записать TLV Терминатора в следующий байт после сообщения NDEF TLV с помощью операции Write.Терминатор TLV НЕ должен быть написан, когда обязательное сообщение NDEF TLV заканчивается на последнем байте последнего доступного сектора NFC, т.е. сектора NFC с наибольшим номером сектора.
В отношении пункта 2 операции. b, при записи поля значения найденного сообщения NDEF TLV ДОЛЖНО оставлять 1 или 3 байта для поля длины, которые необходимы для следующей операции пункта 2. c для хранения длины сообщения NDEF.
Процедура записи NDEF не изменяет начальную позицию обязательного TLV сообщения NDEF.
Процедура записи NDEF МОЖЕТ записывать сообщение NDEF TLV в смежных секторах NFC, за исключением сектора MAD 16, если используется MIFARE Classic 4k и MIFARE Plus с 4 Кбайтами.
Доступный объем памяти для обязательного TLV сообщения NDEF вычисляется из позиции обязательного TLV сообщения NDEF как сумма:
- свободное пространство памяти сектора NFC, содержащего обязательное сообщение NDEF TLV. Свободное пространство памяти начинается с начала обязательного сообщения NFC TLV и заканчивается в конце сектора NFC, и
- все пространство памяти секторов NFC, следующее за сектором, содержащим обязательное сообщение NDEF TLV. Следующие сектора NFC могут иметь размер 48 байт (3 блока) или 240 байт (15 блоков). Информация о следующих доступных секторах NFC ДОЛЖНА быть получена из секторов MAD.
Для операции Write считывание не полностью обновленных блоков необходимо в первую очередь, когда, например, NDEF Message TLV запускается в середине блока.
Изменения в штате #
В этом разделе описываются возможные изменения состояния тега MIFARE Classic или MIFARE Plus. На рисунке 8 показаны состояния и изменение состояния (также называемое переходом) между ними. В этом руководстве по применению единственным указанным переходом является переход от INITIALIZED к READ/WRITE.
Считывающее устройство МОЖЕТ выдавать тег MIFARE Classic или MIFARE Plus в состоянии ИНИЦИАЛИЗИРОВАНО, ЧТЕНИЕ/ЗАПИСЬ или даже в состоянии ТОЛЬКО ДЛЯ ЧТЕНИЯ.
Переход от ИНИЦИАЛИЗИРОВАННОГО к ЧТЕНИЮ/ЗАПИСИ #
Для выполнения перехода от ИНИЦИАЛИЗИРОВАННОГО к ЧТЕНИЮ/ЗАПИСИ Считывающее устройство ДОЛЖНО выполнить следующую операцию: непустое NDEF Message TLV (поле длины, отличное от нуля) ДОЛЖНО заменить предыдущее пустое сообщение NDEF TLV с помощью процедуры записи NDEF. Сообщение NDEF TLV является обязательным, обнаруженным с использованием процедуры обнаружения NDEF.
Пустое сообщение NDEF МОЖЕТ использоваться для замены непустого сообщения NDEF.