Ошибка OSDP NAK 0x06: Устройство не готово (Device Not Ready / Busy)
Механизм составных сообщений (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 |
|---|---|---|
FtTotalSize | 4 байта | Общий размер передаваемого файла прошивки. |
FtOffset | 4 байта | Текущее смещение. Несовпадение смещения вызывает NAK 0x06. |
FtFragmentSize | 2 байта | Размер текущего блока (обычно от 64 до 512 байт). |
Регламент устранения ошибки OSDP NAK 0x06
Сценарий 1: Увеличение межфрагментного интервала (Transfer Delay)
Flash-память микроконтроллеров считывателей требует времени на стирание и запись страницы (Page Erase / Program time до 10–50 мс):
- В утилите обновления прошивки увеличьте параметр Inter-fragment Delay (Transfer Throttle) с 0 мс до 50–100 мс.
- Уменьшите размер фрагмента (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 организуют централизованное бесшовное обновление прошивок и биометрических баз данных без простоя точек доступа.
Частые вопросы (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, устройство продолжает работать на старой рабочей прошивке.