Перейти к содержанию

ODRFID (прошивка CDC)

Устройство определяется в операционной системе как виртуальный последовательный порт (COM-порт) и следует спецификации USB Communications Device Class, Abstract Control Model (CDC/ACM). Большинство операционных систем (включая Microsoft Windows, Linux и Apple macOS) поддерживают работу с такимим устройствами без необзодимости установки дополнительных драйверов.

Различия ревизий устройств описаны в разделе Аппаратные ревизии.

Описанный ниже набор AT-команд предназначен для опроса, чтения и записи бесконтактных карт, а также настройки устройства.

Параметры порта

Устройство является виртуальным последовательным портом. Соответственно, таки переметры как скорость передачи данных, четность, количество бит данных и.т.п. Таким образом, конфигурация параметров последовательного порта не требуется, устройство будет работать при любых настройках.

Формат пакета данных

  • Пакет данных от ПК к устройству должен начинаться с ключевого слова AT и заканчиваться символом возврата каретки (десятичный ASCII код 13, шестнадцатеричный 0x0d, строка "\r" в большинстве языков программирования).
  • Пакет данных от устройства на ПК начинается и заканчивается двумя символами - возврат каретки и перенос строки (десятичный ASCII код 13 и 10 соответственно, 0x0d и 0x0a в шестнадцатеричном представлении, строка "\r\n" в большинстве языков программирования).
  • Ответ устройства на пакет от ПК состоит из одного или более пакетов, последний из которых \r\nOK\r\n (в случае успешного выполнения операции) или \r\nERROR\r\n (в случае возникновения ошибки при выполнении операции).
  • Дополнительные символы в конце или начале пакета, такие как пробел, символ табуляции, перенос строки, возврат каретки и.т.п (помимо описанных выше) не допускаются. Они не будут отброшены анализатором команд со стороны устройства и, как следствие, приведут к ошибке обработки команды.

Режимы устройства

Устройство может находится в одном из двух режимов: автоматическое сканирование (SCAN1) и ручное сканирование (посредством команд от ПК к устройству, SCAN0). Начальное состояние устройства (после подачи питания или перезагрузки) определяется соответствующей параметром в конфигурации устройства. Конфигурация по-умолчанию устанавливает автоматический режим SCAN1.

  • SCAN0 - устройство не осуществляет постоянное самостоятельное сканирование меток, находящихся в поле. Все действия выполняются только при поступлении соответствующей команды от ПК.
  • SCAN1 - устройство самостоятельно постоянно сканирует метки, находящиеся в поле. Интервал сканирования определяется соответствующим параметром в конфигурации устройства. При входе/выходе метки из поля на ПК отправляется пакет:
    • \r\nSCAN:+<HEX DATA>\r\n при обнаружении метки
    • \r\nSCAN:-<HEX DATA>\r\n при выходе метки из поля считывателя.
  • SCAN2 - (начиная с версии 1.3F Dec 17 2018) - дополнительный режим автоматического сканирования, осуществляющий форматированный вывод. Устройство самостоятельно постоянно сканирует метки, находящиеся в поле. Интервал сканирования определяется соответствующим параметром в конфигурации устройства. При обнаружении новой метки в поле, на ПК будет отправлен пакет \r\n[formatted data]\r\n (содержимое пакета определяется данными на метке и строкой форматирования, заданной в конфигурации устройства). В отличие от режима SCAN1, при выходе метки из поля пакет не отправляется. Устройство не хранит историю меток - если метка ушла из поля, затем была возвращена в поле, пакет будет отправлен заново.

Дополнение:

  • (начиная с версии 1.0F Apr 3 2018) HEX DATA в режиме SCAN1 определяется параметрами UID и Номер блока в конфигурации устройства. Если передается UID, то к нему опционально (в зависимости от соответствующего значения в конфигурации устройства) добавляется SAK.
  • (до версии 1.0F Apr 3 2018) HEX DATA это UID + SAK.
  • Начиная с версии 1.5 режим SCAN1 является устаревшим и фактически совпадает с режимом SCAN2 (форматированный вывод).

Коды ошибок

Если при операции с меткой возникла ошибка, передается дополнительный пакет с кодом ошибки следующего формата:

+CME ERROR: <code>

где code это десятичное число, значение которого это битовое поле (максимум 32 бита).

  • 0x00000001 - Protocol error
  • 0x00000002 - Parity error
  • 0x00000004 - Checksum error
  • 0x00000008 - Collision
  • 0x00000010 - Buffer overflow
  • 0x00000020 - Tear event
  • 0x00000040 - IC overheated
  • 0x00000080 - FIFO write error
  • 0x00000100 - Operation timed out
  • 0x00000200 - Mifare NAK
  • 0x00000400 - Authentication failure
  • 0x00000800 - Generic communication error
  • 0x00001000 - The TAG returned more data than expected (v1.5+)
  • 0x00002000 - The TAG reply integrity error (v1.5+)

Биты 16-31 зарезервированы для внутреннего использования и должны быть проигнорированы.

Набор AT-команд.

Информация об устройстве.

Осуществляет запрос информации об устройстве и версии встроенного ПО (прошивки).

Bug

пожалуйста, ознакомьтесь с п.1 в Errata

Синтаксис:

Запрос ATI\r
Ответ <product description> <firmware version/build date>
S/N <serial number>

Пример:

Запрос ATI\r
Ответ Open-Development RFID Reader (CDC-AT) 1.0F Jan 17 2018
S/N 220333635434B431500280010
OK

Сброс буфера

(с версии v1.6)

Команда сбрасывает (уничтожает) внутренний буфер устройства, ожидающий отправки на ПК.

Синтаксис:

Запрос ATH\r
Ответ OK

Управление светодиодом

Команда управляет состоянием диода (если имеется). Если светодиод отсутствует, устройство ответит пакетом "ошибка".

Состояние светодиода:

  • 0 = выключен,
  • 1 = включен
  • 2 = мигает

Если состояние не указано (т.е. nil1), управление светодиодом передается встроенному ПО (состояние по-умолчанию).

Синтаксис:

Запрос AT+D1=[0/1/2/nil]\r
Ответ OK

Пример:

Запрос AT+D1=1\r Включить светодиод
Ответ OK
Запрос AT+D1=\r Вернуть управление встроенному ПО
Ответ OK
Запрос AT+D1?\r Запрос состояния
Ответ +D1=1
OK
Светодиод включен

Управление зуммером

Команда управляет состоянием зуммера.

Состояние зуммера:

  • 0 = выключен
  • 1 = включен

Если состояние не указано (т.е. nil1), управление зуммером передается встроенному ПО (состояние по-умолчанию).

Синтаксис:

Запрос AT+B=[0/1/nil]\r
Ответ OK

Пример:

Запрос AT+B=1\r Включить зуммер
Ответ OK
Запрос AT+B=\r Вернуть управление встроенному ПО
Ответ OK
Запрос AT+B?\r Запрос состояния зуммера
Ответ +B=1
OK
Зуммер включен

Управление режимом работы устройства

Данная команда переключает режим работы устройства (см. Режимы устройства).

Синтаксис:

Запрос AT+SCAN[0/1/2]\r
Ответ OK

Пример:

Запрос AT+SCAN0\r
Ответ OK Включен ручной режим
Запрос AT+SCAN?\r Запрос режима (поддерживается с версии 1.4F2)
Ответ +SCAN=0 Текущий режим: ручной
OK

Управление полем

Данная команда включает / выключает радиочастотную антенну устройства. Устройство может сканировать метки только если антенна включена.

Заметка 1

  • Для мульти-диапазонных считывателей (т.е. поддерживающих оба диапазона 125kHz и 13.56MHz) данная команда включает и выключает обе антенны, но только если соответствующий диапазон включен в настройках (см. команды AT+h и AT+m). Команда запроса состояния поля ненадежна и не должна использоваться.
  • Для одно-диапазонных считывателей (только 125kHz или только 13.56MHz), команда включает и выключает антенну устройства, команды AT+h и AT+m недоступны.

Заметка 2

В режиме автоматического сканирования результат выполнения команды запроса состояния (+RF?) ненадежен. Данная команда выключена в считывателях, поддерживающих диапазон 13.56MHz в прошивках начиная с версии 2.2. Для мульти-диапазонных считывателей данная команда не имеет смысла и была выключена в прошивках начиная с версии 2.2.

Синтаксис:

Запрос AT+RF=[0/1]\r 1 - включить
0 - выключить
Ответ OK

Пример:

Запрос AT+RF=0\r
Ответ OK Антенна выключена

Сканирование всех меток

Запрос идентификаторов всех меток, находящихся в поле устройства. По завершении опроса, устройство возвращает ноль или более пакетов с идентификаторами обнаруженных меток. Последний пакет всегда "успех" (OK). Т.о. в ответ на команду придет один или более пакет. Все обнаруженные метки перезагружаются по завершении сканирования.

Устройству может понадобиться некоторое время для опроса всех меток. Следующая команда должна быть отправлена не ранее, чем получен ответ на предыдущую.

Синтаксис:

Запрос AT+I\r
Ответ +UID=<HEX UID><SAK>
OK
Пакетов +UID=... может быть более одного или ни одного.

Пример:

Запрос AT+I\r
Ответ +UID=EC6D140708
+UID=343D7091725D8600
OK

Сканирование первой метки

Сканируется и активируется первая (согласно процедуре анти-коллизий) метка из находящихся в поле считывателя.

Если метка активирована, она помещается в спящее состояние (т.н. halted state). Возвращается пакет с ее идентификатором и SAK и пакет "успех" (OK).

Если меток нет, команда считается выполненной и возвращается только пакет "успех".

Синтаксис:

Запрос AT+i\r
Ответ +UID=<HEX UID><SAK>
OK
Пакет +UID... может отсутствовать

Пример:

Запрос AT+i\r
Ответ +UID=EC6D140708
OK

Сканирование следующей метки

Деактивируется активная на данный момент метка и выбирается следующая (согласно процедуре анти-коллизий) 13.56MHz метка. Если метка активирована, она помещается в спящее состояние (т.н. halted state). Возвращается пакет с ее идентификатором и SAK и пакет "успех" (OK). Если меток нет, команда считается выполненной и возвращается только пакет "успех".

'-e'-ревизии устройств не поддерживают данную команду и возвращают пакет "ошибка".

Синтаксис:

Запрос AT+n\r
Ответ +UID=<HEX UID><SAK>
OK
Пакет +UID... может отсутствовать

Пример:

Запрос AT+n\r
Ответ +UID=343D7091725D8600
OK

Выбор метки по идентификатору

Выбирается и активируется метка с заданным идентификатором. Команды работы с содержимым метки (чтение блока, запись блока и.т.д.) работают с "выбранной" меткой. В данном контексте "выбранная" означает "первая согласно процедуре анти-коллизии" либо заданная при помощи данной команды. Передача пустого UID (т.е. nil) деактивирует текущую метку (если есть).

Attention

Начиная с версии 1.6, под выбранная должно пониматься: 'Метка, выбранная одной из команд AT+i, AT+n или AT+SELECT=..., которая была выполнена последней' (не "первая согласно процедуре анти-коллизии").

'-e'-ревизии устройств не поддерживают данную команду и возвращают пакет "ошибка".

Синтаксис:

Запрос AT+SELECT=<HEX UID>\r
Ответ OK
ERROR
Метка выбрана
Данная метка отсутствует

Пример:

Запрос AT+SELECT=343D7091725D86\r
Ответ OK Метка выбрана
Запрос AT+SELECT=343D7091725D87\r
Ответ ERROR Данная метка отсутствует

Проверка наличия метки

Данная команда проверяет, находится ли метка с указанным UID в поле устройства или нет. В отличие от команды AT+SELECT=..., проверяется тольько наличие. Если метка найдена, она не становится "выбранной". После проверки, искомая метка (если найдена) помещается в спящее состояние (т.н. halted state).

'-e'-ревизии устройств не поддерживают данную команду и возвращают пакет "ошибка".

Синтаксис:

Запрос AT+C=<HEX UID>\r
Ответ OK
ERROR
Метка присутствует
Метка отсутствует

Пример:

Запрос AT+C=343D7091725D86\r
Ответ OK Метка присутствует
Выбранная метка не изменена!
Запрос AT+C=343D7091725D87\r
Ответ ERROR Метка отсутствует

Информация о выбранной метке

Запрос информации о выбранной метке: идентфикатор UID, SAK, размер блока (BS), количество блоков (BC), тип метки (T). UID и SAK возвращаются в шестнадцатеричном формате, остальные поля - в десятичном.

Таблица поддерживаемых типов меток: см. Типы меток

Синтаксис:

Запрос AT+S\r
Ответ +UID=<HEX UID><SAK>,BC=<bc>,BS=<bs>,T=<t>
OK
ERROR метка не ответила или
включен режим автоматического сканирования

Пример:

Запрос AT+S\r
Ответ +UID=EC6D140708,BC=64,BS=16,T=0
OK

Чтение блока данных

(только для Classic, Plus S/X (SL1), Ultralight и NTAG-ов)

Команда запрашивает блок данных с метки. Номер блока должен быть в пределах, поддерживаемых данной меткой (см. поле BC в предыдущей команде). Блок передается в десятичном формате. В случае успешного чтения, возвращается номер блока и данные в шестнадцатеричном формате. Количество байт данных (каждый байт представлен двумя шестнадцатеричными цифрами) равно размеру блока (см. поле BS в предыдущей команде). Метка должна быть выбрана заранее одной из команд AT+i, AT+n, или AT+SELECT.

'-e'-ревизии устройств не поддерживают данную команду и возвращают пакет "ошибка".

Начиная с версии 3.2 блок может быть передан в шестнадцатеричном формате: AT+R10 или AT+R0xA. Ответ считывателя по-прежнему всегда содержит блок в десятичном формате.

Синтаксис:

Запрос AT+R<block number>\r
Ответ +DATA <block number>:<hex data>
OK
+CME ERROR: <code>
ERROR
Метка не ответила, ошибка чтения/авторизации или
включен режим автоматического сканирования

Пример:

Запрос AT+R0\r
Ответ +DATA 0:EC6D1407920804009944314230353913
OK

Запись блока данных

(только для Classic, Plus S/X (SL1), Ultralight и NTAG-ов)

Команда пишет данные в указанный блок метки. Номер блока должен быть в пределах, поддерживаемых данной меткой (см. поле BC в команде AT+S). Блок передается в десятичном формате. Данные передаются после блока через двоеточие в шестнадцатеричном формате. Количество байт данных равно размеру блока (см. поле BS в команде AT+S). Т.е. должно быть передано 2*BS шестнадцатеричных цифр.

'-e'-ревизии устройств не поддерживают данную команду и возвращают пакет "ошибка".

Начиная с версии 3.2 блок может быть передан в шестнадцатеричном формате: AT+W10:... или AT+W0xA:....

Синтаксис:

Запрос AT+W<block number>:<HEX DATA>
Ответ OK
+CME ERROR: <code>
ERROR
Метка не ответила, ошибка чтения/авторизации,
ошибка синтаксиса или включен режим автоматического сканирования

Пример:

Запрос AT+W1:000102030405060708090A0B0C0D0E0F\r
Ответ OK

Блок значения

(поддерживается с версии 1.6, только для Classic, Plus S/X (SL1))

Увеличить/уменьшить значение в блоке значение метки типа Mifare Classic или совместимой.

'-e'-ревизии устройств не поддерживают данную команду и возвращают пакет "ошибка".

Начиная с версии 3.2 блок может быть передан в шестнадцатеричном формате: AT+V<I/D>10:... или AT+V<I/D>0x0a:....

Синтаксис:

Запрос AT+V<I/D><block number>:<value>
Ответ OK
+CME ERROR: <code>
ERROR
Ошибка чтения/записи/аутентификации (если присутствует +CME...)
ошибка синтаксиса или включен автоматический режим

Для увеличения значения необходимо указать I, для уменьшения - D. Отрицательные числа не поддерживаются. Номер блока и значение должны передаваться в десятичном виде.

Пример:

Запрос AT+VI1:42\r
Ответ OK

Смена идентификатора

Warning

Не все метки поддерживают изменение идентификатора (т.е. перезаписываемый блок 0). Это опасная операция. В лучшем случае ничего не изменится, в худшем - метка перестанет работать. Вы выполняете данную операцию на свой страх и риск. Данная команда поддерживается начиная с версии 1.5.

'-e'-ревизии устройств не поддерживают данную команду и возвращают пакет "ошибка".

Синтаксис:

Запрос AT+~<HEX UID> (*)
Ответ OK Успех

* Длина нового идентификатора должна быть равна длине старого. Изменение длины идентификатора не поддерживается. Поддерживаются только метки типа Mifare Classic.

Набор команд для Mifare Plus

(поддерживается с версии v1.6)

Все '-e' ревизии и часть '-m' ревизий устройств не поддерживают данные команды и вернут пакет "ошибка".

Аутентификация

Выполняет аутентификацию Mifare Plus для заданного блока.

Bug

пожалуйста, обратитесь к п.4 в Errata

Синтаксис:

Запрос AT+N<block>
Ответ OK Успех
+CME ERROR: <code>
ERROR
Ошибка аутентификации или
ошибка синтаксиса

<block> должен быть десятичным числом. Для сброса аутентификации необходимо передать ноль (0).

Начиная с версии 3.2 блок может быть передан в шестнадцатеричном формате: AT+N10 или AT+N0x0a.

Чтение блока данных

Команда запрашивает блок данных с метки. Предполагается, что перед этой командой была успешно проведена авторизация для соответствующего блока.

Синтаксис:

Запрос AT+M<block number>\r
Ответ +DATA <block number>:<hex data>
OK
+CME ERROR: <code>
ERROR
Метка не ответила, вернула ошибку или
включен автоматический режим

Пример:

Запрос AT+M1\r
Ответ +DATA 1:EC6D1407920804009944314230353913
OK

Номер блока должен быть передан в десятичном формате.

Начиная с версии 3.2 блок может быть передан в шестнадцатеричном формате: AT+M10 или AT+M0xA. Ответ считывателя по-прежнему всегда содержит блок в десятичном формате.

Запись блока данных

Команда пишет данные в указанный блок метки. Предполагается, что перед этой командой была успешно проведена авторизация для соответствующего блока. Номер блока должен быть в пределах, поддерживаемых данной меткой (см. поле BC в команде AT+S). Блок передается в десятичном формате. Данные передаются после блока через двоеточие в шестнадцатеричном формате. Количество байт данных равно размеру блока (16 для меток Mifare Plus). Т.е. должно быть передано 32 шестнадцатеричных цифры.

Начиная с версии 3.2 блок может быть передан в шестнадцатеричном формате: AT+E10:... или AT+E0xA:....

Синтаксис:

Запрос AT+E<block number>:<HEX DATA>
Ответ OK Успех
+CME ERROR: <code>
ERROR
Метка не ответила, ошибка чтения/авторизации,
ошибка синтаксиса или включен режим автоматического сканирования

Пример:

Запрос AT+E1:000102030405060708090A0B0C0D0E0F\r
Ответ OK

Смена уровня безопасности

Повышение уровня безопасности метки Mifare Plus. Новый уровень должен быть передан как десятичное число.

Синтаксис:

Запрос AT+J<level>
Ответ OK Успех.
+CME ERROR: <code>
ERROR
Метка не ответила, ошибка чтения/авторизации,
ошибка синтаксиса или включен режим автоматического сканирования

Набор команд для меток 125kHz

Поддерживается только ревизиями -e/m.

Запись меток типа T55x7

Устройство позволяет программировать метки типа T55x7 (T5557/67/... и совместимые с ними на уровне протокола)в режиме эмуляции метки Em-Marine. При последующем считывании метка будет определяться как метка типа EM4100 с указанным идентификатором.

Бифазное кодирование

В режиме совместимости по-умолчанию для чипов T5577 (т.н. e5555-compatibility mode) бифазное кодирование инвертировано по сравнению со стандартом EM4100. Поэтому при использовании бифазной модуляции, устройство попытается запрограммировать чип T5577 в расширенном режиме, в котором доступно совместимое бифазное кодирование. Данная операция может завершиться с ошибкой, поэтому рекомендуется использовать манчестерское кодирование.

Синтаксис:

Запрос AT+@HHHHHHHHHH\r HH..HH - 5 байт (10 шестнадцатеричных символов):
Customer ID (1 байт) + UID (4 байта)
Ответ OK

Если перед этим было выполнено сканирование метки и была выбрана EM-Marine метка, 10 символов идентификатора могут быть опущены - тогда будет произведено клонирование метки.

Пример:

Запрос AT+@4201020304\r
Ответ OK Метка запрограммирована

Пример 2:

Запрос AT+i\r
Ответ +UID=1011121314FF
OK
Обнаружена метка EM-Marine
--- --- Уберите старую метку и поднесите новую
Запрос AT+@\r
Ответ OK Новая метка запрограммирована и имеет идентификатор старой

Устройство не имеет возможности проверить, что программирование завершено успешно (возможности проверить наличие совместимой метки в поле считывателя также нет). В связи с этим пакет "успех" будет отправлен устройством вне зависимости от того, была ли метка запрограммирована на самом деле или нет. Проверить успех выполнения операции можно, например, последующей командой сканирование метки.

Запись меток типа T55x7 с защитой паролем.

Команда аналогична предыдущей, но в дополнение к записи идентификатора, T55x7-совместимая метка также защищается паролем от несанкционированного доступа

Синтаксис:

Запрос AT+xPPPPPPPP,HHHHHHHHHH\r PP..PP - 32х битное беззнаковое целое.
Ответ OK

Запятая и последующие 10 символов данных могут быть опущены для проведения операции клонирования (см. комментарий к предыдущей команде). Пароль и данные должны быть переданы а шестнадцатеричном формате.

Сброс пароля метки T55x7

Угроза безопасности

В результате данной операции будет снята только защита метки паролем. Сам пароль и данные останутся в памяти метки - и будут свободно доступны для чтения.

Пожалуйста, имейте в виду, что устройство не имеет возможности проверить что: * совместимая метка находится в поле * указан корректный пароль * защита была на самом деле снята.

Синтаксис:

Запрос AT+uPPPPPPPP\r PP..PP - 32х битное беззнаковое целое.
Ответ OK

Пароль должен быть передан а шестнадцатеричном формате, так же, как и при записи.

Конфигурация устройства

Последующие команды предназначены для изменения параметров устройства. Они выполняются вне зависимости от режима работы устройства. Отдельные команды изменяют только временные настройки. Для сохранения временных настроек в энергонезависимую память необходимо выполнить команду AT+P.

Светодиод

Данная команда включает/выключает управление светодиодом. Данный параметр влияет только на то, будет ли встроенное ПО включать светодиод при поднесении метки или нет. Прямое управление светодиодом (команда AT+D1...) доступно вне зависимости от данного параметра.

Синтаксис:

Запрос AT+L[0/1/?]\r ? - запрос текущего значения
0 - не включать светодиод
1 - включать светодиод
Ответ OK

Пример:

Запрос AT+L?\r
Ответ +L1
OK
Встроенное ПО будет включать/выключать светодиод

Зуммер

Данная команда включает/выключает управление зуммером. Данный параметр влияет только на то, будет ли встроенное ПО включать зуммер при поднесении метки или нет. Прямое управление зуммером (команда AT+B...) доступно вне зависимости от данного параметра.

Синтаксис:

Запрос AT+Z[0/1/?]\r ? - запрос текущего значения
0 - не включать зуммер
1 - включать зуммер
Ответ OK

Пример:

Запрос AT+Z?\r
Ответ +Z1
OK
Встроенное ПО будет включать зуммер

Чувствительность приемника

Чувствительность измеряется в dBm и может принимать значения в диапазоне [18;48]dBm. Значение по-умолчанию - 33dBm. Данный параметр влияет только на чувствительность 13.56МГц приемника.

Поддерживаемые значения:

  • 18dBm
  • 23dBm
  • 33dBm
  • 38dBm
  • 43dBm
  • 48dBm

Если передано значение, отличное от перечисленных выше, будет использовано ближайшее значение с округлением в бо'льшую сторону.

Синтаксис:

Запрос AT+G=[18-48]\r ? - запрос текущего значения
+G= - сброс к значению по-умолчанию (33)
Ответ OK

Пример:

Запрос AT+G=24\r
Ответ OK Значение будет округлено
Значение будет применено позже.
Запрос AT+G?\r
Ответ +G=33
OK
Значение 24 было округлено.

Частота опроса меток

Если устройство находится в режиме автоматического сканирования, оно опрашивает метку раз в заданное количество миллисекунд. Данная команда задает этот интервал. Допустимый диапазон значений - [100 - 65535] мс. Значения меньше минимального будут приняты и минимально допустимое значение (100мс) будет установлено. Значения больше максимального не будут приняты и вызовут ошибку.

Значение по-умолчанию: * до версии 1.4 - 1000 мс. * начиная с версии 1.4: 200 мс.

Синтаксис:

Запрос AT+T[?/<value>]\r ? - запрос текущего значения
Ответ OK

Пример:

Запрос AT+T?\r
Ответ +T1000
OK
Текущий интервал 1000ms
-------- ------- -------
Запрос AT+T1500\r
Ответ OK Интервал установлен в 1500ms

Ключи авторизации

Метки типа Mifare Classic/Plus требуют ключ авторизации для доступа к содержимому метки. Данная команда устанавливает ключ авторизации и тип ключа (для Mifare Classic). Значение по-умолчанию: все байты равны 0xFF.

Danger

Ключи записываются в устройство и считываются с устройства согласно настоящему протоколу в текстовом виде (без кодирования, защиты и.т.п.). При сохранении настроек в энергонезависимую память, ключи также будут сохранены в текстовом виде и доступны для последующего считывания согласно настоящему протоколу. Если сохранение конкретного ключа нежелательно, установите его в значение по-умолчанию (FF..FF) перед выполнением команды сохранения настроек AT+P.

Синтаксис:

Запрос AT+K<type><hex data>\r тип может быть
A или B
Ответ OK
Ultralight

Начиная с версии 1.5:

Тип U задает пароль авторизации для меток типа Ultralight EV1 и NTAG's:

Запрос AT+KU<hex data>\r 4 байта (8 шестнадцатеричных символов)
Ответ OK

Тип P производит авторизацию и запрашивает PACK текущей метки:

Запрос AT+KP\r
Ответ +P<hex data>
OK
2 байта (4 шестнадцатеричных символа)
Mifare Plus

Начиная с версии 1.6:

Тип X задает ключ авторизации (16 байт - 32 шестнадцатеричных символа) для меток типа Mifare Plus.

Запрос AT+KX<hex data>\r
Ответ OK

Пример:

Запрос AT+KA000102030405\r
Ответ OK Задан ключ A: 00..05
----- ---- -------
Запрос AT+K?
Ответ +A000102030405\r
+UFFFFFFFF
+XFF..FF
OK
Возвращает текущие тип и ключ Mifare Classic.
(c 1.5) возвращает пароль Ultralight
(c 1.6) возвращает ключ Mifare Plus

Управление виртуальной клавиатурой

Attention

Данный раздел применим только к третьему поколению устройств (ODRFID-N/M/E с прошивками версий 3.0 и выше).

Устройства третьего поколения имеют комбинированный USB интерфейс - виртуальный последовательный порт CDC (протокол описан настоящим документом) и HID (определяется на ПК как клавиатура). В отличие от предыдущих поколений, интерфейс HID работает только как клавиатура и не предоставляет собственного протокола для команд.

Клавиатура может быть включена (состояние по-умолчанию) или выключена. Обратите внимание, что даже при выключенной клавиатуре, со стороны ПК устройство все равно будет определяться как клавиатура, но она ничего не будет "печатать".

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

Note

При "печати" на клавиатуре, например, если необходимо отправить символ "d", будет нажата клавиша "d" (она же "в" в русской раскладке). Какой символ будет напечатан (d, в или другой соответствующий) и куда он будет отправлен целиком зависит от текущего состояния операционной системы.

Синтаксис:

Запрос AT+H[0/1/?]\r ? - запрос текущего значения
0 - выключить клавиатуру
1 - включить клавиатуру
Ответ OK

Пример:

Запрос AT+H?\r
Ответ +H1
OK
Клавиатура включена
Запрос AT+H0\r
Ответ OK The keyboard is now disabled

Управление трансивером 13.56MHz

(только для -m-ревизий устройств)

Включение/выключение трансивера 13.56MHz. По-умолчанию: включено.

Если трансивер выключен, соответствующие метки не будут сканироваться.

Note

метки 125kHz всегда сканируются первыми если соответствующий трансивер включен.

Bug

обратитесь к п.3 в Errata

Синтаксис:

Запрос AT+h[0/1/?]\r ? - запрос текущего значения
0 - выключить
1 - включить
Ответ OK

Пример:

Запрос AT+h?\r
Ответ +h1
OK
трансивер 13.56МГц включен

Управление трансивером 125kHz

(только для -m-ревизий устройств)

Включение/выключение трансивера 125kHz. По-умолчанию: включено.

Если трансивер выключен, соответствующие метки не будут сканироваться.

Note

метки 125kHz всегда сканируются первыми если соответствующий трансивер включен.

Синтаксис:

Запрос AT+m[0/1/?]\r ? - запрос текущего значения
0 - выключить
1 - включить
Ответ OK

Пример:

Запрос AT+m?\r
Ответ +m1
OK
трансивер 125кГц включен

Управление режимом меток 125kHz

(только для -m/e-ревизий устройств)

Данный параметр определяет, в каком режиме будет запрограммирована метка T55x7: * кодирование: манчестерское или бифазное. * скорость: 32 или 64 перехода на бит

Синтаксис:

Запрос AT+c[0/1],[0/1]\r ? - запрос состояния (0 - манчестерское, 1 - бифазное)
и скорости (0 - 64tpb, 1 - 32tpb)
Ответ OK

Пример:

Запрос AT+c?\r Запрос текущих настроек
Ответ +c0,1
OK
Используется манчестерское кодирование с 32-мя переходами на бит

SAK

(для версий 1.0F Apr 3 2018 и старше, не поддерживается начиная с версий 1.5F)

По-умолчанию в режиме автоматического сканирования SAK добавляется к идентификатору карты. Это можно отключить/включить при помощи данного параметра

Синтаксис:

Запрос AT+A[0/1/?]\r ? - запрос текущего значения
0 - не добавлять SAK
1 - добавлять SAK
Ответ OK

Пример:

Запрос AT+A?\r
Ответ +A=1
OK
SAK будет добавлен

Выбор данных в режиме сканирования

(для версий 1.0F Apr 3 2018 и старше, не поддерживается начиная с версий 1.5F)

Данный параметр определяет, какие данные будут выданы в режиме автоматического сканирования: * 1 - идентификатор (UID), * 0 - блок (номер блока определяется параметром Номер блока)

Синтаксис:

Запрос AT+U[0/1/?]\r ? - запрос текущего значения
0 - печатать блок
1 - печатать UID (* по-умолчанию)
Ответ OK

Пример:

Запрос AT+U?\r
Ответ +U=1
OK
Будет напечатан UID

Номер блока (в режиме сканирования)

(для версий 1.0F Apr 3 2018 и старше, не поддерживается начиная с версий 1.5F)

Данный параметр определяет, какой блок будет прочитан и выдан в режиме автоматического сканирования, если выбрана опция "выдать блок" в параметре Выбор данных

Если блок не существует или не может быть прочитан (например, вследствие ошибки авторизации), ничего не будет выдано.

Синтаксис:

Запрос AT+b[?/<value>]\r ? - запрос текущего значения
Ответ OK

Пример:

Запрос AT+b?\r
Ответ +b=0
OK
Будет напечатано содержимое блока 0
Запрос AT+b1\r
Ответ OK Будет напечатано содержимое блока 1

Формат выдачи данных (режим SCAN2)

(только для версий 1.3F Dec 17 2018 и выше)

Строка форматирования имеет одинаковый формат для версий прошивок CDC и HID. Подробнее см. в описании строки форматирования Формат по-умолчанию: HU*\n. Режим по-умолчанию (до того, как первый раз встретится один из ключей-символов a, d, h, или H): шестнадцатеричный вывод заглавными буквами.

Attention

все последовательности "\r" и "\n" в строке форматирования (т.е. два символа '\' и последующий 'r' или 'n') будут приняты и выведены при использовании команд AT+F..., однако при печати (через последовательный порт) они будут проигнорированы, поскольку конфликтуют с разделителем пакетов. Символ ; зарезервирован для разделителя команд,. его использование в строке форматирования приведет к ошибке или неопределенному поведению.

(начиная с версии 3.2) при задании строки форматирования последовательности вида &#HH будут преобразованы в символ с ASCII кодом 0xHH (в частности, для использования символа ; необходимо передать последовательность &#3B).

Синтаксис:

Запрос AT+F[?/=<format>]\r ? - запрос строки форматирования
Ответ OK

Пример:

Запрос AT+F?\r
Ответ +F=HU*\n
OK
Напечатать UID как заглавные шестнадцатеричные символы
Запрос AT+F=hB1%*\r
Ответ OK Напечатать содержимое блока 1 как строчные шестнадцатеричные символы

Сохранение настроек

Данная команда сохраняет текущую конфигурацию устройства в энергонезависимую память

Синтаксис:

Запрос AT+P\r
Ответ OK

Управление устройством

Следующие команды управляют самим устройством и доступны в режиме автоматического сканирования.

Перезагрузка

Перезагрузить устройство

Синтаксис:

Запрос AT+Q\r
Ответ OK

Обновление встроенного ПО

Перезагрузить устройство и перейти во встроенный загрузчик. Встроенный загрузчик доступен не на всех устройствах. Если загрузчик недоступен, команда аналогична AT+Q.

Синтаксис:

Запрос AT+X\r
Ответ OK

Errata

П.1 Информация об устройстве

Версии ПО до v3.1 (включительно)
Действие Обработка ответа на команду 'ATI'
Ожидаемый ответ 3 пакета - описание продукта, серийный номер, OK
Полученный ответ 2 пакета - описание продукта + серийный номер, OK. Между описанием продукта и серийным номером соедржится только один разделитель \r\n вместо двух
Решение 1. Не использовать данную команду.
2. Настроить парсер на разделитель \r\n (один) и пропусать пустые пакеты (между двумя последовательными разделителями). На данный момент все устройства имеют сторонние методы контроля целостности пакета, поэтому между двумя пакетами не может быть "лишних" символов
3. Настроить парсер на распознавание последовательности символов \r\nS/N и исправлять ее на \r\n\r\nS/N

П.2 Смена уровня безопасности

Версии ПО с v3.0 до v3.1
Действие Переключение с уровня 1 на уровень 3 командой 'AT+J3'
Ожидаемый результат Метка переключается с уровня 1 на уровень 3
Полученный результат Метка остается на уровне 1, устройство перестает сканировать метки до перезагрузки
Решение Нет. Пожалуйста, обновитесь до последней версии ПО

Переключение с уровня 0 на уровень 1 работает как и должно.

П.3 Управление трансивером 13.56MHz

Версии ПО с 2.0 до 2.1
Действие установка параметра "включение трансивера"
Ожидаемый результат действие выполнено
Полученный результат возможно, действие не выполнено
Решение После отправки команды AT+h... необходимо проверить результат выполнение командой AT+h?. Если первая команда не выполнена, необходимо отправить команду повторно.

П.4 Сброс аутентификации Mifare Plus

Версии ПО все до 3.1 включительно
Действие Сброс аутентификации командой AT+N0
Ожидаемый результат Аутентификация сброшена, получен пакет "успех"
Полученный результат Аутентификация не сброшена, получен пакет "ошибка"
Решение Нет. Пожалуйста, обновитесь до последней версии ПО

  1. nil означает отсутствие поля данных (напр. AT+D1=). 

  2. режим 2 поддерживается с версии 1.3F, режим 1 устарел с версии 1.5F и объединен с 2