Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка OSDP NAK 0x06: Устройство не готово (Device Not Ready / Busy)

Обновлено: 21.08.2026  ·  Официальная база знаний

Механизм составных сообщений (Multi-Part Messages) и код NAK 0x06

Когда контроллеру СКУД требуется передать на периферийное устройство объемный массив данных (например, файл обновления прошивки командой osdp_FILETRANSFER (0x7C), биометрический шаблон лица/отпечатка пальца osdp_BIOMATCH, либо крупное графическое изображение для дисплея), данные разбиваются на фрагменты (Multi-part Message fragments). Если периферийное устройство (PD) еще занято записью предыдущего блока во Flash-память, производит криптографическую проверку фрагмента или его внутренний буфер переполнен, оно отвечает кодом NAK 0x06 (Device Not Ready for Multi-Part Message / Busy).

Бизнес-риски

Срыв процесса удаленного обновления считывателей (риск получить «окирпиченное» устройство на двери), невозможность загрузить базу биометрических шаблонов в автономные терминалы, зависание интерфейса контроллера.

Спецификация передачи файлов (OSDP File Transfer)

Параметр фрагментаЗначениеВлияние на состояние Busy
FtTotalSize4 байтаОбщий размер передаваемого файла прошивки.
FtOffset4 байтаТекущее смещение. Несовпадение смещения вызывает NAK 0x06.
FtFragmentSize2 байтаРазмер текущего блока (обычно от 64 до 512 байт).

Регламент устранения ошибки OSDP NAK 0x06

Сценарий 1: Увеличение межфрагментного интервала (Transfer Delay)

Flash-память микроконтроллеров считывателей требует времени на стирание и запись страницы (Page Erase / Program time до 10–50 мс):

  1. В утилите обновления прошивки увеличьте параметр Inter-fragment Delay (Transfer Throttle) с 0 мс до 50–100 мс.
  2. Уменьшите размер фрагмента (Chunk size) с максимального значения (1024 байта) до безопасных 128 или 256 байт.

Сценарий 2: Проверка статуса готовности через команду osdp_MFG (Vendor Status)

# Пример скрипта контроля статуса прошивки устройства перед отправкой фрагмента
import time, serial
# Отправка команды опроса статуса готовности устройства
def check_device_ready(ser, address):
    # Формирование пакета osdp_POLL (0x60)
    poll_cmd = bytes([0x53, address, 0x06, 0x00, 0x04, 0x60, 0x00]) # + CRC
    ser.write(poll_cmd)
    response = ser.read(10)
    # Если считыватель вернул osdp_ACK (0x40), он готов к следующему блоку
    return b'\x40' in response

# Пауза до подтверждения готовности буфера
while not check_device_ready(ser, 1):
    time.sleep(0.05)

Сценарий 3: Проверка доступной памяти и структуры биометрического шаблона

Если NAK 0x06 возникает при отправке шаблонов пользователей: проверьте, не переполнена ли локальная база данных считывателя (например, лимит 5000 шаблонов исчерпан), и соответствует ли формат биометрии спецификации (ANSI-378 / ISO 19794-2).

Типовые ошибки администраторов

  • Попытка одновременной массовой прошивки всех считывателей на общей шине RS-485: Возникает коллапс пропускной способности, устройства не успевают отвечать и массово выдают NAK 0x06 / NAK 0x03.
  • Игнорирование статуса аккумулятора/питания при прошивке: Просадка напряжения ниже 9V в момент записи во Flash вызывает аварийную блокировку контроллера считывателя.
Требуется обновление или миграция парка считывателей СКУД?
Инженеры ITSTM организуют централизованное бесшовное обновление прошивок и биометрических баз данных без простоя точек доступа.
Практический опыт инженера: При выполнении OSDP File Transfer по длинным линиям RS-485 всегда временно переводите скорость порта на 115200 bps (если это поддерживается), но устанавливайте задержку между пакетами 40 мс. Это ускоряет передачу тяжелых файлов прошивок (до 2 Мб) с 40 минут до 2–3 минут.

Частые вопросы (FAQ)

Является ли NAK 0x06 фатальной ошибкой?

Нет, NAK 0x06 является индикатором состояния ожидания (Flow Control / Busy). Контроллер должен повторить передачу того же самого фрагмента через заданный тайм-аут, не прерывая общую сессию.

Сколько повторных попыток должен делать контроллер при NAK 0x06?

По спецификации SIA OSDP рекомендуется делать от 5 до 10 попыток отправки фрагмента с интервалом не менее 100 мс, прежде чем прерывать операцию с кодом File Transfer Aborted.

Почему считыватель возвращает 0x06 при чтении смартфонов по BLE/NFC?

При обмене со смартфоном по Bluetooth считыватель может быть временно занят криптографическим спариванием с мобильным приложением и не успевает параллельно обработать опрос от ACU.

Как предотвратить зависание считывателя при повреждении файла прошивки?

Современные считыватели имеют структуру памяти Dual-Bank Flash. Пока новый образ не проверен по CRC-32/SHA-256, устройство продолжает работать на старой рабочей прошивке.