Аудитория: Данное руководство предназначено для руководителей аппаратной инженерии, архитекторов OEM-прошивок и инженеров по надёжности, которым необходимо проверить поведение сторожевого таймера (WDT) и системного сброса модели считывающей ручки перед утверждением массового производства. Вторичными читателями являются инженеры полевого обслуживания, отлаживающие жалобы на зависание ручек, и менеджеры QA, разрабатывающие профили стресс-тестирования для восстановления после зависания прошивки.
Бразильский дистрибьютор обратился к нам в первом квартале 2026 года, поскольку его ручки T2 зависали в полевых условиях с частотой 1,4% в месяц. Зависание проявлялось в виде замороженного светодиода без звукового вывода и без ответа BLE. Мы извлекли 12 зависших устройств из поля, подключили JTAG-отладчик и обнаружили, что MCU вошёл в состояние жёсткого сбоя из-за разыменования нулевого указателя в прошивке распознавания OID. Сторожевой таймер должен был перехватить жёсткий сбой и сбросить ручку, однако сторожевой таймер не обслуживался, поскольку сам обработчик жёсткого сбоя являлся источником разыменования. Решением стало перенести обслуживание сторожевого таймера в аппаратное прерывание таймера, которое срабатывает независимо от состояния основного цикла. Каждая считывающая ручка в нашем каталоге (B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6) использует сторожевой таймер, и данное руководство описывает, как архитектура WDT соотносится с восстановлением после зависания прошивки и общей надёжностью системы.
1. Две архитектуры сторожевых таймеров
Мы используем две архитектуры сторожевых таймеров во всём каталоге. Экономичный сегмент (B1, B2, F8, P2) использует внутренний оконный сторожевой таймер MCU (WWDT), который представляет собой 12-битный обратный счётчик, тактируемый внутренним RC-генератором на частоте 32 кГц. WWDT должен обслуживаться в течение окна 64 мс, и пропуск обслуживания вызывает системный сброс. Конструкция оконного сторожевого таймера обнаруживает как бесконечные циклы (которые обслужили бы WWDT слишком поздно), так и вызовы обслуживания «застрявшие слишком рано» (которые обслужили бы WWDT до открытия окна).
Средний и премиальный сегменты (K7, KF1, L5, Q6, Q8, T2, Y6) используют внешнюю микросхему аппаратного сторожевого таймера (HWDT) в дополнение к внутреннему WWDT. HWDT — это независимая супервизорная микросхема, которая контролирует сигнал сброса MCU и выделенный GPIO, переключаемый прошивкой. Если GPIO не переключается в течение 1,6 секунды, HWDT опускает линию сброса и принудительно выполняет полный сброс при включении питания. HWDT добавляет $0,06 к стоимости единицы, но обнаруживает режим отказа, при котором MCU жив, но завис в подпрограмме обработки прерывания, которая не обслуживает WWDT. Именно этот режим отказа проявился у T2 в полевых условиях.
Архитектура с двумя сторожевыми таймерами на моделях среднего и премиального сегментов обнаруживает как режим отказа «зависания основного цикла» (перехватывается WWDT), так и режим отказа «зависания обработчика прерываний» (перехватывается HWDT). Экономичные модели обнаруживают только режим зависания основного цикла, поскольку не имеют HWDT.
| SKU | WWDT | HWDT | Тайм-аут WWDT | Тайм-аут HWDT | Коэффициент восстановления после зависания |
|---|---|---|---|---|---|
| B1 | Внутренний | Нет | 64 мс | н/д | 92,4% |
| B2 | Внутренний | Нет | 64 мс | н/д | 92,4% |
| F8 | Внутренний | Нет | 64 мс | н/д | 92,4% |
| K7 | Внутренний | Внешний | 64 мс | 1,6 с | 99,4% |
| KF1 | Внутренний | Внешний | 64 мс | 1,6 с | 99,4% |
| L5 | Внутренний | Внешний | 64 мс | 1,6 с | 99,6% |
| P2 | Внутренний | Нет | 64 мс | н/д | 92,4% |
| Q6 | Внутренний | Внешний | 64 мс | 1,6 с | 99,4% |
| Q8 | Внутренний | Внешний | 64 мс | 1,6 с | 99,4% |
| T2 | Внутренний | Внешний | 64 мс | 1,6 с | 99,6% |
| Y6 | Внутренний | Внешний | 64 мс | 1,6 с | 99,6% |
Коэффициент восстановления при зависании измеряется как процент зависаний прошивки, которые приводят к успешному сбросу в течение 2 секунд после события зависания. Разрыв в 7 процентных пунктов между экономичными и средними/премиальными SKU обусловлен преимуществами двойного сторожевого таймера.
2. Дисциплина обслуживания оконного сторожевого таймера
Оконный сторожевой таймер должен обслуживаться в строго определённом временном окне. Окно открывается через 32 мс после запуска счётчика WWDT и закрывается через 64 мс. Обслуживание WWDT до открытия окна или после его закрытия вызывает сброс. Конструкция окна защищает от режимов отказа «застрял в быстром цикле», когда прошивка жива, но не продвигается.
Дисциплина обслуживания на каждом SKU требует, чтобы прошивка записывала определённое магическое значение (0x5A5A5A5A) в регистр обслуживания WWDT в течение окна. Магическое значение намеренно нетривиально, чтобы выполняющийся вслепую указатель, записывающий последовательные адреса памяти, случайно не обслужил WWDT. Мы наблюдали три случая отказа в полевых условиях за последние 24 месяца, когда выполняющийся вслепую указатель случайно записал магическое значение; WWDT каждый раз корректно сбрасывал устройство.
Счётчик WWDT сбрасывается до начального значения при каждом успешном обслуживании. Счётчик уменьшается при каждом такте синхронизации 32 кГц. Если счётчик достигает нуля без обслуживания, WWDT генерирует системный сброс.
3. Внешний аппаратный сторожевой таймер
Внешний HWDT на средних и премиальных SKU — это 4-контактная микросхема супервизора, которая отслеживает линию сброса МК и выделенный GPIO. HWDT имеет собственный внутренний генератор и счётчик, независимые от МК. Счётчик HWDT сбрасывается каждый раз, когда прошивка переключает GPIO, что должно происходить не реже одного раза в 1,6 секунды. Если счётчик достигает нуля, HWDT опускает линию сброса на 200 мс и принудительно выполняет полный сброс питания.
HWDT также отслеживает шину VDD МК. Если VDD падает ниже 2,7 В (порог броунаута), HWDT опускает линию сброса и удерживает её низкой до тех пор, пока VDD не поднимется выше 2,85 В. Защита от броунаута не зависит от внутреннего детектора броунаута МК, что обеспечивает два независимых монитора напряжения.
HWDT стоит $0,06 за единицу и занимает 1,2 мм × 1,4 мм площади печатной платы. На SKU с тонким корпусом (F8, K7, KF1, Q6, Q8) HWDT размещается на обратной стороне печатной платы, чтобы минимизировать влияние на ширину. На более крупных SKU (L5, T2, Y6) HWDT находится на лицевой стороне печатной платы.
4. Сброс при броунауте и восстановление после провала напряжения
Сброс при броунауте (BOR) — это механизм, отличный от сторожевого таймера. BOR срабатывает, когда напряжение питания падает ниже порогового значения (обычно 2,7 В), и сбрасывает МК, чтобы предотвратить выполнение при пониженном напряжении. BOR реализован внутри МК на каждом SKU в каталоге.
Порог BOR установлен на 2,7 В для B1, B2, F8, P2 и на 2,85 В для K7, KF1, L5, Q6, Q8, T2, Y6. Более высокий порог на средних и премиальных SKU — это осознанный выбор, поскольку эти SKU используют цифровые шины 1,8 В, которые отказывают при 2,7 В. Порог BOR должен быть выше напряжения отказа цифровой шины, чтобы предотвратить повреждение цифровой логики.
Тонкий режим отказа, который мы наблюдали в полевых условиях, — это «глитч напряжения», вызванный плохим соединением USB-C. Когда кабель шевелится, напряжение VBUS может упасть до 3,5 В на 50 мс, что выше порога BOR, но ниже рабочего напряжения усилителя класса D. Усилитель издаёт щелчок, а МК получает ложное прерывание, которое может вызвать жёсткий сбой. Решение — конденсатор ёмкостью 22 мкФ на выводе USB-C VBUS плюс программное подавление дребезга прерывания от щелчка усилителя. Оба решения были добавлены в прошивку K7, KF1, Q6, Q8 в 3-м квартале 2024 года, и частота жёстких сбоев снизилась на 78%.
5. Обработчик жёсткого сбоя и журнал причин сброса
Когда МК входит в жёсткий сбой, обработчик жёсткого сбоя выполняет последовательность действий до того, как WWDT сбросит МК. Шаги: (1) записать причину сброса в журнал флеш-памяти, (2) записать регистры PC и LR источника сбоя в журнал флеш-памяти, (3) переключить GPIO HWDT для индикации сбоя, (4) войти в бесконечный цикл, чтобы позволить WWDT сбросить МК.
Журнал причин сброса хранится в выделенном секторе флеш-памяти объёмом 4 КБ, который сохраняется при сбросах. Журнал может хранить до 64 событий сброса до перезаписи. Журнал экспортируется через USB для полевой диагностики. Мы активно используем этот журнал в полевой отладке: когда клиент сообщает о зависании, мы запрашиваем журнал причин сброса, который показывает тип жёсткого сбоя (нулевой указатель, деление на ноль, неопределённая инструкция и т.д.) и адрес PC источника сбоя.
Сам обработчик жёсткого сбоя может быть режимом отказа. Описанная выше проблема с бразильским T2 была жёстким сбоем обработчика, который разыменовал нулевой указатель, что помешало обслуживанию WWDT. Мы исправили это, переместив код записи во флеш-память обработчика жёсткого сбоя в отдельную функцию, проверенную на безопасность указателей, и добавив прерывание аппаратного таймера, которое переключает GPIO HWDT независимо от состояния основного цикла. Прерывание аппаратного таймера срабатывает каждые 800 мс и является прерыванием с наивысшим приоритетом в системе.
Совет покупателю: При аудите поставщика считывающих устройств запросите формат журнала причин сброса и исходный код обработчика жёсткого сбоя. Поставщик, который не продумал безопасность указателей в обработчике жёсткого сбоя, — это поставщик, который не видел достаточно полевых отказов, чтобы учиться на них.
6. Холодный старт vs тёплый старт vs POR
В каталоге существует три типа сброса: холодный старт (включение питания после полного цикла питания), тёплый старт (сброс от WWDT или HWDT после зависания) и POR (включение питания после броунаута). Каждый тип сброса имеет разную последовательность запуска.
Холодный старт инициализирует PMIC, RTC, OID-датчик и радио BLE. Занимает 1,8 секунды. Тёплый старт пропускает инициализацию RTC (поскольку состояние RTC сохраняется) и занимает 1,1 секунды. POR инициализирует всё, включая RTC, и занимает 2,4 секунды.
Поведение светодиодного индикатора различается в зависимости от типа сброса. Холодный старт показывает зелёный светодиод в течение 2 секунд, затем гаснет. Тёплый старт показывает жёлтый светодиод в течение 1 секунды, затем гаснет. POR показывает красный светодиод в течение 3 секунд, затем гаснет, указывая на событие броунаута.
Журнал причин сброса записывает тип сброса вместе со значениями PC и LR. Тип сброса записывается в журнал как 2-битное поле: 00 = холодный старт, 01 = тёплый старт, 10 = POR, 11 = зарезервировано.
7. Журнал причин сброса и полевая диагностика
Журнал причин сброса — один из наших наиболее полезных инструментов полевой диагностики. Мы использовали его для диагностики 18 различных режимов полевых отказов в 2025 году, включая:
- Жёсткий сбой при распознавании OID (проблема с бразильским T2)
- Броунаут во время всплеска усилителя класса D (исправление с конденсатором 22 мкФ)
- Жёсткий сбой при повторном подключении BLE (проблема с устройством Q6 из стран Персидского залива)
- Жёсткий сбой при повторной инициализации аудиокодека (проблема с египетским K7)
- Броунаут во время согласования USB PD контракта (проблема с саудовским L5)
Каждый из этих режимов отказа был диагностирован менее чем за 48 часов с использованием журнала причин сброса. Альтернативой был бы цикл в 4–6 недель гипотез, исправлений и повторного развёртывания.
Журнал причин сброса экспортируется через USB с использованием команды, специфичной для производителя. Экспорт занимает 1,2 секунды и создаёт двоичный файл размером 4 КБ, который наш диагностический инструмент преобразует в читаемый формат. Мы предоставляем инструмент экспорта OEM-покупателям, которые хотят проводить собственную полевую диагностику.
8. Покрытие тестирования сторожевых таймеров в QA
Каждая производственная партия K7, KF1, L5, Q6, Q8, T2 и Y6 проходит тестирование сторожевого таймера на 12 единицах перед отгрузкой. Тест принудительно вызывает жёсткий сбой путём записи недопустимого значения PC в прошивку и проверяет, что HWDT сбрасывает устройство в течение 2 секунд. Тест также принудительно вызывает броунаут путём короткого замыкания шины VDD на землю на 50 мс и проверяет, что BOR сбрасывает устройство, а журнал причин сброса записывает событие POR.
В 2025 году мы задержали 2 партии из 168 из-за сбоев тестирования сторожевого таймера. Оба сбоя были связаны с некачественной партией микросхем супервизора HWDT от поставщика 2-го уровня. Поставщик изменил ревизию кремния микросхемы без уведомления, и новая ревизия имела порог броунаута 2,6 В вместо 2,85 В. Мы отклонили обе партии и вернулись к квалифицированному поставщику 1-го уровня для следующего производственного цикла.
9. Простой, вызванный сторожевым таймером, и пользовательский опыт
Сброс сторожевого таймера невидим для пользователя, если он происходит в режиме полки или воспроизведения аудио. Сброс занимает 1,1 секунды, и пользователь воспринимает это как краткую паузу. Если сброс происходит во время активной передачи файла по BLE, передача завершается неудачно, и хост должен повторить попытку. Если сброс происходит во время OID-сканирования, результат сканирования теряется, и пользователь должен повторить сканирование.
Частота видимых пользователю сбросов сторожевого таймера на средних и премиальных SKU составляет 0,04% на активную сессию, что соответствует примерно одному сбросу на 2500 сканирований. На экономичных SKU этот показатель составляет 0,7% на активную сессию, или один сброс на 143 сканирования. Разница в 17 раз — это преимущество двойного сторожевого таймера на уровне пользовательского опыта.
Для OEM-покупателей, развёртывающих устройства в розничных демонстрациях, частота видимых пользователю сбросов является критическим показателем. Розничная демонстрация, которая сбрасывается один раз на 143 сканирования, не является коммерчески жизнеспособной. Мы рекомендуем SKU с двойным сторожевым таймером (K7, KF1, L5, Q6, Q8, T2, Y6) для любого розничного развёртывания.
10. Дорожная карта на 12 месяцев для технологии сторожевого таймера и сброса
Мы отслеживаем три улучшения сторожевого таймера, которые появятся в каталоге к Q4 2026. Во-первых, аппаратный сторожевой таймер с тайм-аутом 200 мс (вместо 1,6 с) в будущем премиальном SKU, который будет обнаруживать более быстрые режимы зависания. Во-вторых, двухядерная архитектура MCU в будущем премиальном SKU, которая использует одно ядро для задач взаимодействия с пользователем и одно ядро для служебных задач; служебное ядро обслуживает WWDT и может перезагрузить пользовательское ядро при сбое. В-третьих, облачный журнал сброса сторожевого таймера, который загружает журнал причин сброса на облачный сервер при следующем BLE-подключении, обеспечивая удаленную диагностику без вмешательства пользователя.
Мы опубликуем дополнительный отчет после запуска HWDT 200 мс в полевых испытаниях. Тем временем архитектура сторожевого таймера во всем нашем каталоге является зрелой, хорошо проверенной и хорошо поддерживаемой, и мы приглашаем любого OEM-покупателя с особым требованием к надежности связаться с нашей командой ODM считывающих ручек для проверки осуществимости.
Рекомендуем к прочтению
- Архитектура прошивки считывающей ручки
- Механизм OTA-обновления прошивки считывающей ручки
- Загрузчик и восстановление прошивки считывающей ручки
- RTC — Часы реального времени считывающей ручки
- PMIC — ИС управления питанием считывающей ручки
- Управление питанием и оптимизация времени работы считывающей ручки
- Руководство по устранению неполадок считывающей ручки
- Контроль качества и стандарты AQL считывающей ручки