-
Notifications
You must be signed in to change notification settings - Fork 3
Boards
Справочная страница · Платы: MURM2, PICO_PC, PICO_DV, ZERO, ZERO2, MURM · Источник истины: раздел GPIO Map в CLAUDE.md
pico-spec работает на шести несущих платах семейства Murmulator, построенных вокруг модуля класса Raspberry Pi Pico. Поддерживаются два семейства MCU:
- RP2350 (новее): MURM2 (RP2350A), PICO_PC (RP2350A), PICO_DV (RP2350), ZERO2 (RP2350B). Больше ОЗУ, больше GPIO и PSRAM — поэтому им достаются тяжёлые функции.
- RP2040 (исходный): ZERO, MURM. ОЗУ меньше, поэтому ряд функций исключён при компиляции.
О проекте Murmulator. Мурмулятор — открытая «плата для разработки и мурмуляции ретроплатформ», созданная Алексом Екб, который реализовал аппаратную часть и первую прошивку для эмуляции ZX Spectrum. Платы собираются из распространённых недорогих компонентов, с открытыми герберами и исходниками многих прошивок, поэтому их легко собрать самостоятельно. Сообщество поддерживает более десяти платформ (ZX Spectrum, БК 0010, Game Boy, Sega Game Gear / Mega Drive / Master System, NES/Dendy/Famicom и др.); pico-spec — это прошивка ZX Spectrum. См. murmulator.ru, Telegram-группу @ZX_MURMULATOR и файловый архив.
| Возможность | RP2040 (ZERO, MURM) | RP2350 (остальные четыре) |
|---|---|---|
| ОЗУ | 256 КБ (≈148 КБ свободной кучи при старте, ≈5 КБ после фреймбуфера) | больше; PSRAM на большинстве плат |
| Сеть (Network) | не поддерживается | ESP-01S по UART (ZiFi, WiFi, FTP, архивы) |
| MIDI out | не поддерживается (PICO_RP2040=1) |
да, на пине UART-TX |
| esxDOS / MB-02+ / Z-Controller / IDE-HDD (Storage) | не поддерживается | да |
| RTC / Mr Gluk TimeKeeper | не поддерживается | да |
| Машина Profi, ULA+, Gigascreen | отключено / ограничено | да |
На RP2040 память впритык. Из 256 КБ ОЗУ после выделения фреймбуфера 240×320 остаётся лишь ≈5 КБ кучи. Большие статические массивы и тяжёлый по памяти код меню могут сломать эти платы — поэтому SD-дисковые интерфейсы, сеть и RTC доступны только на RP2350.
Сборка выбирает один из двух заголовочных профилей плат Pico-SDK в src/boards/ — это
определения кремния, а не дополнительные пользовательские платы:
-
picospec_rp2350b.h— для несущих плат RP2350A/RP2350B (MURM2, PICO_PC, PICO_DV, MURM1_P2). Копия заголовкаpico2из SDK с принудительно включённым вариантом RP2350B (48 GPIO), так что GPIO 30–47 допустимы. -
waveshare_rp2350_pizero.h— для ZERO2 (Waveshare RP2350-PiZero).
Все функциональные пины задаются явно в CMakeLists.txt для каждой платы, поэтому
значения по умолчанию из заголовков неактивны.
| Плата | MCU | Диапазон GPIO | FIXED / REASSIGN / FREE | MIDI | NESPAD |
|---|---|---|---|---|---|
| MURM2 | RP2350A | 0–29 | 15 / 9 / 5 | OK (GPIO 22) | конфликт с PSRAM (CLK=20, LAT=21) |
| PICO_PC | RP2350A | 0–29 | 13 / 10 / 6 | OK (GPIO 26) | OK |
| PICO_DV | RP2350 | 0–29, 47 | 14 / 8 / 9 | БАГ (GPIO 21 = RX!) | конфликт с дисплеем (8, 9) |
| ZERO | RP2040 | 0–28 | 16 / 8 / 5 | нет (RP2040) | OK |
| ZERO2 | RP2350B | 0–47 | 14 / 12 / 22 | OK (GPIO 22) | отключён |
| MURM | RP2040 | 0–28 | 18 / 10 / 0 | нет (RP2040) | OK |
- FIXED — жёстко разведено на плате, изменить нельзя (дисплей, SD-карта, встроенный PSRAM, LED).
- REASSIGNABLE — сейчас используется, но может быть переназначено/отключено программно (NESPAD, клавиатура, MIDI, звук, WAV-вход, UART ZiFi).
- FREE — не используется ни одним периферийным устройством.
FIXED = 15 · REASSIGNABLE = 9 · FREE = 5
| GPIO | Функция | Кат. | Примечания |
|---|---|---|---|
| 0 | — | FREE | |
| 1 | — | FREE | |
| 2 | KBD_CLOCK | REASSIGN | Клавиатура PS/2 |
| 3 | KBD_DATA | REASSIGN | Клавиатура PS/2 |
| 4 | SD MISO | FIXED | SPI0 на плате |
| 5 | SD CS | FIXED | SPI0 на плате |
| 6 | SD SCK | FIXED | SPI0 на плате |
| 7 | SD MOSI | FIXED | SPI0 на плате |
| 8 | BUTTER_PSRAM | FIXED | Встроенный PSRAM RP2350, XIP CS1 |
| 9 | Audio DATA / BEEPER / LATCH_595 | REASSIGN | Тройной алиас (I2S / PWM / 595) |
| 10 | Audio BCK / PWM0 / CLK_595 | REASSIGN | Тройной алиас |
| 11 | Audio LCK / PWM1 / DATA_595 | REASSIGN | Тройной алиас |
| 12–19 | VGA / HDMI (8 пинов) | FIXED | База дисплея = 12; также PSRAM SPI на 18–19 |
| 20 | PSRAM_MOSI / NES_CLK | FIXED | Приоритет PSRAM; конфликт NESPAD! |
| 21 | PSRAM_MISO / NES_LAT | FIXED | Приоритет PSRAM; конфликт NESPAD! |
| 22 | MIDI_TX / LOAD_WAV_PIO | REASSIGN | Взаимоисключающие. UART1 TX funcsel 11 — работает |
| 23 | — | FREE | |
| 24 | — | FREE | |
| 25 | LED | FIXED | |
| 26 | NES_DATA | REASSIGN | NESPAD joy1 |
| 27 | NES_DATA+1 (неявно) | REASSIGN | NESPAD joy2 (PIO читает DATA+1) |
| 28 | — | FREE | |
| 29 | CLK_AY_PIN2 | REASSIGN | Выход тактовой частоты AY |
FIXED = 13 · REASSIGNABLE = 10 · FREE = 6
| GPIO | Функция | Кат. | Примечания |
|---|---|---|---|
| 0 | KBD_CLOCK | REASSIGN | |
| 1 | KBD_DATA | REASSIGN | |
| 2 | — | FREE | Разъём QWST1 |
| 3 | — | FREE | |
| 4 | SD MISO | FIXED | SPI0 на плате |
| 5 | NES_CLK / LOAD_WAV_PIO | REASSIGN | Совместно |
| 6 | SD SCK | FIXED | SPI0 на плате |
| 7 | SD MOSI | FIXED | SPI0 на плате |
| 8 | BUTTER_PSRAM | FIXED | Встроенный PSRAM RP2350, XIP CS1 |
| 9 | NES_LAT | REASSIGN | |
| 10 | — | FREE | |
| 11 | — | FREE | |
| 12–19 | VGA / HDMI (8 пинов) | FIXED | База дисплея = 12 |
| 20 | NES_DATA | REASSIGN | UXT1-3 |
| 21 | NES_DATA2 | REASSIGN | UXT1-4 |
| 22 | SD CS | FIXED | SPI0 на плате |
| 23 | — | FREE | |
| 24 | — | FREE | |
| 25 | LED | FIXED | |
| 26 | BEEPER / LATCH_595 / MIDI_TX | REASSIGN | UART1 TX funcsel 11 — работает |
| 27 | PWM0 / CLK_595 | REASSIGN | Звук PWM правый |
| 28 | PWM1 / DATA_595 | REASSIGN | Звук PWM левый |
| 29 | CLK_AY_PIN2 | REASSIGN | Выход тактовой частоты AY |
FIXED = 14 · REASSIGNABLE = 8 · FREE = 9
| GPIO | Функция | Кат. | Примечания |
|---|---|---|---|
| 0 | ZiFi UART0 TX | REASSIGN | освобождён от KBD; UART0 TX funcsel 2 |
| 1 | ZiFi UART0 RX | REASSIGN | освобождён от KBD; UART0 RX funcsel 2 |
| 2 | — | FREE | |
| 3 | — | FREE | |
| 4 | — | FREE | |
| 5 | SD SCK | FIXED | SPI1 на плате |
| 6–13 | VGA / HDMI (8 пинов) | FIXED | База дисплея = 6; NES_CLK=8, NES_LAT=9 конфликт! |
| 14 | KBD_CLOCK | REASSIGN | перенесён с GP0 ради ZiFi |
| 15 | KBD_DATA | REASSIGN | перенесён с GP1 ради ZiFi |
| 16 | — | FREE | |
| 17 | — | FREE | |
| 18 | SD MOSI | FIXED | SPI1 на плате |
| 19 | SD MISO | FIXED | SPI1 на плате |
| 20 | LOAD_WAV_PIO / NES_DATA | REASSIGN | Без USE_NESPAD |
| 21 | MIDI_TX / NES_DATA2 | REASSIGN | БАГ: GPIO 21 нечётный = UART RX, не TX! MIDI не работает |
| 22 | SD CS | FIXED | SPI1 на плате |
| 23 | — | FREE | |
| 24 | — | FREE | |
| 25 | LED | FIXED | |
| 26 | Audio DATA / PWM0 / LATCH_595 | REASSIGN | |
| 27 | Audio BCK / PWM1 / CLK_595 | REASSIGN | |
| 28 | Audio LCK / BEEPER / DATA_595 | REASSIGN | |
| 29 | CLK_AY_PIN2 | REASSIGN | |
| 47 | BUTTER_PSRAM | FIXED | Встроенный PSRAM RP2350B |
FIXED = 16 · REASSIGNABLE = 8 · FREE = 5
| GPIO | Функция | Кат. | Примечания |
|---|---|---|---|
| 0 | KBD_CLOCK | REASSIGN | |
| 1 | KBD_DATA | REASSIGN | |
| 2–5 | PSRAM SPI (CS / SCK / MOSI / MISO) | FIXED | Встроенный PSRAM |
| 6 | — | FREE | |
| 7 | CLK_AY_PIN2 / NES_CLK | REASSIGN | AY + NESPAD совместно (конфликт) |
| 8 | NES_LAT | REASSIGN | |
| 9 | NES_DATA (DATA2 = 9) | REASSIGN | Один джойстик |
| 10 | Audio DATA / PWM0 / LATCH_595 | REASSIGN | |
| 11 | Audio BCK / PWM1 / CLK_595 | REASSIGN | |
| 12 | Audio LCK / BEEPER / DATA_595 | REASSIGN | |
| 13 | — | FREE | |
| 14 | — | FREE | |
| 15 | — | FREE | |
| 16 | — | FREE | |
| 17 | LOAD_WAV_PIO | REASSIGN | Без MIDI (RP2040) |
| 18–21 | SD SPI (SCK / MOSI / MISO / CS) | FIXED | SPI0 на плате |
| 22–28 | VGA / HDMI (8 пинов от 22) | FIXED | Включая LED=25, SMPS=23, VBUS=24 |
FIXED = 14 · REASSIGNABLE = 12 · FREE = 22
| GPIO | Функция | Кат. | Примечания |
|---|---|---|---|
| 0–1 | — | FREE | PSRAM отключён |
| 2 | PCM5122_I2C_SDA | REASSIGN | Управление ЦАП (если подключён) |
| 3 | PCM5122_I2C_SCL | REASSIGN | |
| 4–6 | — | FREE | NESPAD отключён |
| 7 | CLK_AY_PIN2 | REASSIGN | Выход тактовой частоты AY |
| 8–9 | — | FREE | |
| 10 | Audio DATA / PWM0 / LATCH_595 | REASSIGN | |
| 11 | Audio BCK / PWM1 / CLK_595 | REASSIGN | |
| 12 | Audio LCK / BEEPER / DATA_595 | REASSIGN | |
| 13 | — | FREE | |
| 14 | KBD_CLOCK | REASSIGN | Перенесён с 2/3 ради I2C PCM5122 |
| 15 | KBD_DATA | REASSIGN | |
| 16 | — | FREE | |
| 17 | LOAD_WAV_PIO | REASSIGN | Загрузчик WAV |
| 18 | PCM5122_I2S_BCK | REASSIGN | Битовый клок ЦАП |
| 19 | PCM5122_I2S_LCK | REASSIGN | Клок LR ЦАП |
| 20 | — | FREE | Хороший кандидат для MIDI (UART1 TX) |
| 21 | PCM5122_I2S_DATA | REASSIGN | Данные ЦАП |
| 22 | MIDI_TX | REASSIGN | UART1 TX funcsel 11 — работает |
| 23–29 | — | FREE | |
| 30 | SD SCK | FIXED | SPI1, плата Waveshare |
| 31 | SD MOSI | FIXED | |
| 32–39 | VGA / HDMI (8 пинов) | FIXED | База дисплея = 32 |
| 40 | SD MISO | FIXED | |
| 41–42 | — | FREE | |
| 43 | SD CS | FIXED | |
| 44–46 | — | FREE | |
| 47 | BUTTER_PSRAM | FIXED | Встроенный PSRAM RP2350B |
FIXED = 18 · REASSIGNABLE = 10 · FREE = 0
| GPIO | Функция | Кат. | Примечания |
|---|---|---|---|
| 0 | KBD_CLOCK / DBG_UART0_TX | REASSIGN | DBG_UART=ON → UART0_TX (разъём J6), KBD переходит на GP16/17 |
| 1 | KBD_DATA / DBG_UART0_RX | REASSIGN | DBG_UART=ON → UART0_RX |
| 2–5 | SD SPI (SCK / MOSI / MISO / CS) | FIXED | SPI0 на плате |
| 6–13 | VGA / HDMI (8 пинов) | FIXED | База дисплея = 6 |
| 14 | NES_CLK | REASSIGN | DBG_UART=ON → NESPAD отключён |
| 15 | NES_LAT | REASSIGN | DBG_UART=ON → NESPAD отключён |
| 16 | NES_DATA / KBD_CLOCK (DBG_UART=ON) | REASSIGN | при DBG_UART=ON: сюда переходит KBD |
| 17 | NES_DATA+1 / KBD_DATA (DBG_UART=ON) | REASSIGN | при DBG_UART=ON: сюда переходит KBD |
| 18–21 | PSRAM SPI (CS / SCK / MOSI / MISO) | FIXED | Встроенный PSRAM; BUTTER = 19 |
| 22 | MIDI_TX / LOAD_WAV_PIO | REASSIGN | RP2040: только WAV. RP2350 (MURM_P2): UART1 TX работает |
| 23 | — | FIXED (RP2040) | Питание SMPS на стандартном Pico |
| 24 | — | FIXED (RP2040) | Датчик VBUS на стандартном Pico |
| 25 | LED | FIXED | |
| 26 | Audio DATA / PWM0 / LATCH_595 | REASSIGN | |
| 27 | Audio BCK / PWM1 / CLK_595 | REASSIGN | |
| 28 | Audio LCK / BEEPER / DATA_595 | REASSIGN | |
| 29 | CLK_AY_PIN2 | REASSIGN | RP2040: GPIO29 = ADC3 / VSYS |
- PICO_DV MIDI_TX = GPIO 21 — нечётный GPIO, поэтому аппаратный UART1 даёт RX, а не TX. MIDI на этой плате не работает. Решение: перенести на GPIO 20.
- MURM2 NESPAD против PSRAM — NES_CLK=20, NES_LAT=21 пересекаются с PSRAM_MOSI=20, PSRAM_MISO=21. Сосуществовать не могут.
-
PICO_DV NESPAD против дисплея — NES_CLK=8, NES_LAT=9 попадают в диапазон дисплея
(6–13).
USE_NESPADна этой плате правильно не установлен. -
MURM2 / MURM MIDI_TX = LOAD_WAV_PIO = 22 — две функции на одном пине
(взаимоисключающие). Обработано в коде (предупреждение в
messages.h).
MIDI out использует один пин UART-TX. На RP2350 UART TX доступен через два funcsel, и
только чётные GPIO могут быть TX — нечётный GPIO даёт RX. Код автоматически выбирает
экземпляр UART и funcsel; авторитетный пинмукс берётся из
rp2350[ab]_interface_pins.json (старая эвристика (pin/4)%2 была неверна для GPIO
8/10/24/26). Платы RP2040 (ZERO, MURM) не имеют MIDI (PICO_RP2040=1).
Рабочие пины MIDI: MURM2 GPIO 22, PICO_PC GPIO 26, ZERO2 GPIO 22. На PICO_DV не работает (GPIO 21 — см. баг 1 выше).
Интерфейс NESPAD использует 3-проводное чтение сдвигового регистра (CLK / LATCH / DATA, joy2 на DATA+1). Он OK на PICO_PC, ZERO и MURM, отключён на ZERO2 и конфликтует на MURM2 (с PSRAM) и PICO_DV (с дисплеем) — см. список багов выше.
UART для сети ESP-01S не имеет определения пинов при компиляции — он выбирается во
время выполнения (Config::zifi_tx_pin / zifi_rx_pin, разрешается через
BoardPins::resolveZifiPins()). Когда выбранная пара делит пины с другой периферией, при
загрузке приоритет у ZiFi, а вытесненная периферия пропускает свою инициализацию.
Пары TX/RX по умолчанию для каждой платы:
| Плата | TX / RX (по умолч.) | UART | Примечание |
|---|---|---|---|
| PICO_DV | 0 / 1 | UART0 | выделенный разъём ZiFi |
| MURM2 | 20 / 21 | UART1 | занимает пины NESPAD |
| PICO_PC | 20 / 21 | UART1 | занимает пины NESPAD; альт. 2/3 (QWST1), 10/11 |
| ZERO2 | 24 / 25 | UART1 | свободны |
| MURM-1 (RP2350) | 16 / 17 | UART0 | занимает пины NESPAD |
Полная схема подключения и выбор пинов — на странице Network.
- Storage — использование SD-карты (SPI) по платам
- Network — подключение ESP-01S и выбор пинов UART ZiFi
- Проект Murmulator (железо, герберы, как собрать/купить/прошить): murmulator.ru · Telegram @ZX_MURMULATOR · файловый архив
- Справочник разработчика (полная карта GPIO, поддерживается в актуальном виде): CLAUDE.md
Меню (RU)
Сквозные темы
Для разработчиков