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 error0x00000002
- Parity error0x00000004
- Checksum error0x00000008
- Collision0x00000010
- Buffer overflow0x00000020
- Tear event0x00000040
- IC overheated0x00000080
- FIFO write error0x00000100
- Operation timed out0x00000200
- Mifare NAK0x00000400
- Authentication failure0x00000800
- Generic communication error0x00001000
- 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 = мигает
Если состояние не указано (т.е. nil
1), управление светодиодом передается встроенному ПО (состояние по-умолчанию).
Синтаксис:
Запрос | 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 = включен
Если состояние не указано (т.е. nil
1), управление зуммером передается встроенному ПО (состояние по-умолчанию).
Синтаксис:
Запрос | 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 - не добавлять SAK1 - добавлять 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
(в частности, для использования символа ;
необходимо передать последовательность B
).
Синтаксис:
Запрос | 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 |
Ожидаемый результат | Аутентификация сброшена, получен пакет "успех" |
Полученный результат | Аутентификация не сброшена, получен пакет "ошибка" |
Решение | Нет. Пожалуйста, обновитесь до последней версии ПО |