Перейти к содержанию

Регистры WATCHDOG RP2350

Регистры сторожевого таймера RP2350: включение, загрузка и чтение 24-битного счётчика, программный сброс, причина последнего сброса и восемь регистров для данных между перезагрузками.

Сторожевой таймер RP2350 считает вниз от значения LOAD и, дойдя до нуля, сбрасывает выбранные части чипа. Что именно, задают регистры вне блока: WDSEL блока RESETS — подсистемы, регистры PSM — системный сброс, WDSEL блока POWMAN — сброс всего чипа (даташит RP2350, раздел 12.9).

Своего генератора тиков у сторожевого таймера RP2350 больше нет: тик приходит из блока TICKS. Счётчик 24-битный; по заголовку pico-sdk максимум 0xFFFFFF соответствует примерно 16 секундам, тогда как у RP2040 из-за эрраты RP2040-E1 то же значение давало вдвое меньше тиков.

Восемь регистров SCRATCH сохраняют данные при программном сбросе и очищаются при сбросе всего чипа сторожевым таймером, по выводу RUN или при отключении питания ядра; загрузочное ПЗУ ищет в них «магическое» число. Ещё восемь регистров, которые переживают и выключение коммутируемого ядра, — SCRATCH0–7 блока POWMAN.

ЭкземплярБазовый адрес
WATCHDOG0x400D 8000

В RP2040 блок WATCHDOG устроен иначе — регистры и поля отличаются, они описаны на странице «Регистры WATCHDOG RP2040».

Регистры блока

РегистрСмещениеНазначениеПосле сброса
WATCHDOG_CTRL0x00Управление сторожевым таймером0x0700 0000
WATCHDOG_LOAD0x04Загрузка счётчика0x0000 0000
WATCHDOG_REASON0x08Причина последнего сброса0x0000 0000
WATCHDOG_SCRATCHn0x0C + n · 0x04Регистр данных n, сохраняется при программном сбросе0x0000 0000

WATCHDOG_CTRL — управление сторожевым таймером

Смещение 0x00, адрес 0x400D 8000, после сброса 0x0700 0000. Макросы pico-sdk: WATCHDOG_CTRL_…

31302928272625242322212019181716
TRIGGERENABLE—PAUSE_DBG1PAUSE_DBG0PAUSE_JTAGTIME
1514131211109876543210
TIME
  • TRIGGER (бит 31, сбрасывается сам, после сброса 0x0) — Запись 1 вызывает сброс сторожевым таймером.
  • ENABLE (бит 30, чтение и запись, после сброса 0x0) — Включение счёта; когда выключен, счётчик стоит.
  • PAUSE_DBG1 (бит 26, чтение и запись, после сброса 0x1) — Останавливать счёт, пока ядро 1 в режиме отладки.
  • PAUSE_DBG0 (бит 25, чтение и запись, после сброса 0x1) — Останавливать счёт, пока ядро 0 в режиме отладки.
  • PAUSE_JTAG (бит 24, чтение и запись, после сброса 0x1) — Останавливать счёт, пока JTAG обращается к шине.
  • TIME (биты 23:0, только чтение, после сброса 0x000000) — Сколько тиков, обычно микросекунд, осталось до сброса.

WATCHDOG_LOAD — загрузка счётчика

Смещение 0x04, адрес 0x400D 8004, после сброса 0x0000 0000, запись с побочным действием. Макросы pico-sdk: WATCHDOG_LOAD_…

Отдельных полей нет: значение занимает биты 23:0, остальные биты не используются.

WATCHDOG_REASON — причина последнего сброса

Смещение 0x08, адрес 0x400D 8008, после сброса 0x0000 0000. Макросы pico-sdk: WATCHDOG_REASON_…

1514131211109876543210
—FORCETIMER
  • FORCE (бит 1, только чтение, после сброса 0x0) — Последний сброс вызван программно битом TRIGGER.
  • TIMER (бит 0, только чтение, после сброса 0x0) — Последний сброс вызван истечением счётчика.

WATCHDOG_SCRATCHn — регистр данных n, сохраняется при программном сбросе

8 регистров, n = 0…7: смещение 0x0C + n · 0x04, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: WATCHDOG_SCRATCHn_…

Значение занимает регистр целиком, отдельных полей нет.

Частые вопросы

Как узнать, что RP2350 перезагрузил сторожевой таймер?

Прочитайте REASON: TIMER = 1 — истёк счётчик, FORCE = 1 — программный сброс битом TRIGGER, оба нуля — аппаратный сброс. В RP2350 тёплый сброс ядра отладчиком тоже очищает REASON, чтобы программа, загруженная отладчиком, не видела старый таймаут.

Какой наибольший интервал сторожевого таймера RP2350?

0xFFFFFF тиков в регистре LOAD — около 16 секунд при тике 1 мкс от блока TICKS. Генератор тиков сторожевого таймера в TICKS настраивается отдельно от других, так что шаг счёта можно увеличить.

Источники

  1. Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 12.9.7: список регистров, назначение полей, тип доступа и значения после сброса
  2. Raspberry Pi. pico-sdk 2.1.1: заголовки src/rp2350/hardware_regs/include/hardware/regs/*.h (коммит bddd20f) — смещения, биты, тип доступа и значение после сброса каждого поля, базовые адреса из addressmap.h; лицензия BSD-3-Clause

Нашли ошибку в регистрах?

Другие регистры RP2350

Статьи и термины