Ошибка OSDP NAK 0x02: Неподдерживаемая команда (Unsupported Command Code)
Архитектура взаимодействия ACU/PD и природа ошибки NAK 0x02
Ответ osdp_NAK с кодом 0x02 (Unsupported Command Code Received) возвращается устройством (Peripheral Device, PD), когда контроллер отправляет команду, чей шестнадцатеричный код отсутствует в таблице поддерживаемых инструкций прошивки считывателя. Например, контроллер пытается отправить команду шифрования osdp_CHLNG (0x76) на устаревший считыватель базового профиля OSDP v1 без поддержки Secure Channel, либо команду управления дисплеем/RGB-подсветкой osdp_TEXT (0x69) / osdp_LED (0x69) с неподдерживаемым функциональным блоком.
Бизнес-риски
Считыватель не выполняет команды световой/звуковой индикации (пользователь не понимает, разрешен ли проход), срывается цикл согласования защищенного канала Secure Channel (SC), либо контроллер блокирует опрос периферийного устройства, помечая его как неисправное.
Таблица типовых команд OSDP, вызывающих NAK 0x02
| Код команды | Мнемоника | Функция | Причина отказа (NAK 0x02) |
|---|---|---|---|
0x76 | osdp_CHLNG | Запрос аутентификации Secure Channel | Считыватель работает в незащищенном профиле (No Encryption). |
0x77 | osdp_SCRYPT | Передача криптографического ключа сессии | Прошивка считывателя не поддерживает AES-128. |
0x6B | osdp_PROMPT | Управление биометрическим сканером | Устройство не имеет аппаратного блока биометрии. |
Алгоритм устранения ошибки OSDP NAK 0x02
Сценарий 1: Опрос возможностей устройства через osdp_CAP (0x67)
Перед конфигурацией расширенных функций контроллер обязан запросить профиль возможностей устройства командой osdp_CAP:
# Скрипт проверки таблицы возможностей (Device Capabilities) через libosdp
osdpctl status --port /dev/ttyUSB0 --baud 9600 --address 1
# Ответ устройства должен содержать флаги:
# [CAP] Secure Channel: 1 (Supported)
# [CAP] LED Control: 1 (Standard LED)
# [CAP] Audible Indicator: 1 (Tone Beeper)
# [CAP] Text Output: 0 (Not Supported -> Отправка osdp_TEXT вызовет NAK 0x02)Сценарий 2: Отключение неподдерживаемых опций в ПО СКУД
В конфигураторе СКУД (Sigur, Parsec, Bolid, Lenel, Gallagher):
- Откройте свойства считывателя на соответствующем порту контроллера.
- Отключите расширенную индикацию (например, плавный RGB-градиент или вывод текста на экран), переведя индикацию в режим Basic Red/Green LED (команда
osdp_LED). - Если считыватель старой ревизии, переключите режим работы порта с OSDP Secure Channel на OSDP Clear Text (v1).
Сценарий 3: Обновление микропрограммы считывателя (Firmware Update)
Выполните заливку актуальной прошивки с поддержкой спецификации SIA OSDP v2.2 через фирменную утилиту производителя (HID Reader Manager, STid Mobile ID Tool) по Bluetooth/USB.
Типовые ошибки администраторов
- Принудительное включение Secure Channel на дешевых считывателях: Контроллер циклически шлет
osdp_CHLNG, получает NAK 0x02 и уходит в бесконечный рестарт сессии, делая проход невозможным. - Игнорирование профилей совместимости SIA: Попытка использовать кастомные вендорские команды (
osdp_MFG) на оборудовании стороннего производителя.
Специалисты ITSTM настроят гетерогенные системы контроля доступа, подружат контроллеры и считыватели различных вендоров по протоколам OSDP v2.2 и Wiegand.
Частые вопросы (FAQ)
Может ли NAK 0x02 приводить к зависанию контроллера?
В корректно написанном стеке OSDP контроллер, получив NAK 0x02, просто прекращает посылать данную команду. Однако в дешевых прошивках это может вызывать бесконечный цикл повторов (retry loop) и забивать шину.
Как считыватель сообщает контроллеру о своих возможностях?
При старте контроллер отправляет команду osdp_CAP (0x67). Считыватель возвращает ответ osdp_CAPREP (0x47) со списком всех поддерживаемых функций и версий протокола.
Что делать, если NAK 0x02 возвращается на команду osdp_BUZ (управление зуммером)?
Проверьте параметры команды: некоторые считыватели поддерживают только фиксированную длительность тона (Tone code) и отклоняют кастомные миллисекундные тайминги (Custom On/Off time).
Поддерживает ли OSDP передачу биометрических шаблонов?
Да, для этого используются команды osdp_BIOMATCH и osdp_BIOMETA, но они требуют поддержки спецификации профиля Biometrics на уровне прошивки считывателя.