Здравствуйте.
Я разрабатываю агент для контроллера Wiren Board 6.9 (чип ATECC608A на шине I2C-4), который использует заводской приватный ключ в слоте 0 для подписи данных. Агент работает в среде Node.js в двух экземплярах (процессах), каждый из которых по таймерам отправляет heartbeat и другие запросы в облако, подписывая fingerprint командой atecc -b 4 -c 'ecc-sign 0 ...' . Вызовы асинхронные, но в рамках одного процесса они идут последовательно.
Проблема:
После длительной серии успешных подписей (30-40 и более) команда ecc-sign внезапно завершается с ошибкой status 0xf3 (Execution Error). При этом повторный немедленный вызов также падает с той же ошибкой.
Такое поведение я наблюдаю:
- как при запуске одного процесса агента,
- так и при двух параллельно работающих процессах (во втором случае ошибки возникают чаще).
Я реализовал повторные попытки с небольшой задержкой, и они решают проблему : после 1-2 ретраев подпись успешно выполняется. Однако я хочу понять первопричину и убедиться, что моё решение корректно и не маскирует аппаратную проблему.
Лог с ошибкой (фрагмент):
text
sign-fingerprint-by-atecc The signature was successfully completed …
… Failed to execute command: “atecc -b 4 -c ‘ecc-sign 0 …’” code: “2”, message: “… Command atcab_sign is failed with status 0xf3”
Мои вопросы:
- Является ли периодическое появление ошибки
0xf3при активном использовании чипа ожидаемым поведением, или оно свидетельствует о неисправности (например, проблемы с питанием, помехи на I2C)? - Может ли причина быть в том, что два процесса конкурентно обращаются к чипу по I2C без внешней синхронизации? Нужно ли на уровне ОС реализовать мьютекс (например, через
flock) для эксклюзивного доступа? - Правильно ли я понимаю, что механизм retry является штатным способом обработки таких ошибок ?
- Есть ли какие-то настройки чипа или драйвера, которые могли бы уменьшить вероятность этой ошибки?
Ранее я спрашивал о том как с завода настроены слоты, и мой чип настроен в точном соответствии с ней.
Буду признателен за любые разъяснения и рекомендации.
Спасибо.