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

Регистры XOSC RP2350

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

XOSC даёт точную опорную частоту для PLL и генераторов тактов. RP2350 работает с кварцами от 1 до 50 МГц — у RP2040 предел был 15 МГц, — а эталонная схема и Raspberry Pi Pico 2 используют кварц 12 МГц. Для PLL нужно не меньше 5 МГц, а clk_ref не может быть выше 25 МГц: от более быстрого кварца её делят (даташит RP2350, раздел 8.2).

Диапазон кварца выбирает поле FREQ_RANGE регистра CTRL: 0xAA0 — 1–15 МГц, 0xAA1 — 10–30 МГц, 0xAA2 — 25–60 МГц, 0xAA3 — 40–100 МГц; при внешнем тактовом сигнале на XIN, до 50 МГц, диапазон настраивать не нужно. Включает генератор код 0xFAB в поле ENABLE, после чего ждут флага STABLE.

Задержку запуска в STARTUP.DELAY считают как частота кварца × время / 256: для 12 МГц и 1 мс — 47. Регистр COUNT считает вниз на частоте кварца для коротких задержек, но читается только как 1 (идёт счёт) или 0 (закончен).

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

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

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

РегистрСмещениеНазначениеПосле сброса
XOSC_CTRL0x00Включение и диапазон частот0x0000 0000
XOSC_STATUS0x04Состояние генератора0x0000 0000
XOSC_DORMANT0x08Остановка генератора для сна: 0x636F6D61 — остановить, 0x77616B65 — работане определено
XOSC_STARTUP0x0CЗадержка запуска0x0000 0000
XOSC_COUNT0x10Счётчик вниз на частоте кварца0x0000 0000

XOSC_CTRL — включение и диапазон частот

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

31302928272625242322212019181716
—ENABLE
1514131211109876543210
ENABLEFREQ_RANGE
  • ENABLE (биты 23:12, чтение и запись, после сброса не определено) — Включение кодом: 0xFAB — включить, 0xD1E — выключить; другой код тоже включает. После сброса генератор выключен, чип работает от ROSC.
    ЗначениеИмя в pico-sdk
    0xD1Edisable
    0xFABenable
  • FREQ_RANGE (биты 11:0, чтение и запись, после сброса не определено) — Диапазон частот кварца; неверный код оставляет прежний.
    ЗначениеИмя в pico-sdkЧто значит
    0xAA01_15mhz1–15 МГц
    0xAA110_30mhz10–30 МГц
    0xAA225_60mhz25–60 МГц
    0xAA340_100mhz40–100 МГц

XOSC_STATUS — состояние генератора

Смещение 0x04, адрес 0x4004 8004, после сброса 0x0000 0000. Макросы pico-sdk: XOSC_STATUS_…

31302928272625242322212019181716
STABLE—BADWRITE—
1514131211109876543210
—ENABLED—FREQ_RANGE
  • STABLE (бит 31, только чтение, после сброса 0x0) — Генератор работает устойчиво, частотой можно пользоваться.
  • BADWRITE (бит 24, сброс записью 1, после сброса 0x0) — В CTRL.ENABLE, CTRL.FREQ_RANGE или DORMANT записано недопустимое значение; сбрасывается записью 1.
  • ENABLED (бит 12, только чтение, после сброса не определено) — Генератор включён, но ещё может не выйти на устойчивую генерацию.
  • FREQ_RANGE (биты 1:0, только чтение, после сброса не определено) — Текущий диапазон частот.
    ЗначениеИмя в pico-sdk
    0x01_15mhz
    0x110_30mhz
    0x225_60mhz
    0x340_100mhz

XOSC_DORMANT — остановка генератора для сна: 0x636F6D61 — остановить, 0x77616B65 — работа

Смещение 0x08, адрес 0x4004 8008, после сброса не определено, чтение и запись. Макросы pico-sdk: XOSC_DORMANT_…

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

XOSC_STARTUP — задержка запуска

Смещение 0x0C, адрес 0x4004 800C, после сброса 0x0000 0000. Макросы pico-sdk: XOSC_STARTUP_…

31302928272625242322212019181716
—X4—
1514131211109876543210
—DELAY
  • X4 (бит 20, чтение и запись, после сброса не определено) — Умножить задержку запуска на 4.
  • DELAY (биты 13:0, чтение и запись, после сброса не определено) — Задержка запуска в единицах по 256 периодов кварца; значение 0xC4 — около 50 000 периодов.

XOSC_COUNT — счётчик вниз на частоте кварца

Смещение 0x10, адрес 0x4004 8010, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: XOSC_COUNT_…

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

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

Какой кварц можно подключить к RP2350?

От 1 до 50 МГц, с выбором диапазона в CTRL.FREQ_RANGE; эталонная схема использует 12 МГц, и тот же кварц ожидает загрузчик USB. Для PLL нужно не меньше 5 МГц, а выше 25 МГц частоту для clk_ref делят.

Как узнать остаток счётчика COUNT в XOSC RP2350?

Никак: во время счёта регистр читается как 1, по окончании — как 0. Запишите число тактов кварца и ждите нуля — такая задержка не зависит от частоты ядра и компилятора.

Источники

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

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

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

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