Skip to content

RP2350: монитор шины и программатор

Паспорт модуля

ПараметрЗначение
Аудитория🟡🔴; пройдены М7, М9; базовый Python желателен
Аутентичная задачасобрать штатный отладочный контур комплекта: трассировка шины в реальном времени + автозагрузка программ — то, чего нет у Итера и что станет «фишкой» на защите
Объём4 занятия × 90 мин
Оборудованиеплата RP2350 (Pico 2-класс), MicroPython или C SDK, соединители, резисторы 1 кОм последовательно в линии (защита), ПК с терминалом
ОграниченияRP2350 — 3,3-вольтовое устройство; чтение 5-В шины 74HC — только через делители/буферы; выходы RP2350 в 5-В систему HC читаются как «1» (VIH 3,15 В < 3,3 В), но на пределе — предпочтителен буфер 74HCT
Техника безопасности стыковки уровней (главный warning модуля): входы RP2350 не толерантны к 5 В. Каждая слушаемая линия шины — через делитель 1,8 кОм / 3,3 кОм (5 В → ≈3,2 В) или через буфер 74LVC245 с питанием 3,3 В (входы LVC толерантны к 5 В). Подключение напрямую = мёртвый GPIO. Проверка мультиметром до первого включения — пункт чек-листа.

Цели

Обучающиеся …Блум—АндерсонМиллерПроверка
1объясняют, почему монитор должен быть пассивным и синхронным фронту CLKпониматьзнаетквиз
2запускают PIO-захват шины и читают трассу в терминалеприменятьпоказывает какживой лог эстафеты байта из М7
3пишут скрипт-загрузчик: hex-файл → SRAM (через режим PROG, управляя MAR/данными/WE)создаватьделаетзолотой дамп совпал
4согласуют уровни 5 В ↔ 3,3 В и обосновывают схему стыкаприменять/оцениватьпоказывает какприёмка стыка мультиметром

Оценивание

Итог: демонстрация двух режимов. Монитор: на однотактном режиме М6 каждая строка лога = один такт, значения совпадают со светодиодами шины. Программатор: файл fib.hex заливается и верифицируется (0 расхождений), время ≤5 с — против 15 минут ручного ввода в М9 (этот контраст — мотивационное ядро модуля).

Путь и ключевые артефакты

ТемаРазминкаЯдро
1Стык уровнейцикл записи SRAM (М9)расчёт делителя; сборка стыка 8 линий данных + CLK; приёмка
2PIO-монитор3 вопроса зан. 1worked example PIO-программы; лог в терминал
3Программаторсхема стыка по памятискрипт записи: перебор адресов, выставление данных, импульс /WE через GPIO
4Интеграциякумулятивный квиз М9–М10формат .hex курса; верификация; сдача узла в фонд

Worked example PIO-монитора (MicroPython), захват 8 линий данных по фронту CLK:

import rp2, machine

@rp2.asm_pio(in_shiftdir=rp2.PIO.SHIFT_LEFT, autopush=True, push_thresh=8)
def bus_snoop():
    wait(0, pin, 8)   # ждём низкий CLK (пин 8 группы)
    wait(1, pin, 8)   # фронт CLK
    in_(pins, 8)      # защёлкиваем 8 бит шины -> FIFO

sm = rp2.StateMachine(0, bus_snoop, freq=125_000_000,
                      in_base=machine.Pin(0))   # GPIO0..7 = D0..D7, GPIO8 = CLK
while True:
    print(f"BUS=0x{sm.get() & 0xFF:02X}")
Почему PIO, а не «читать GPIO в цикле»: программный опрос из Python пропускает фронты уже на сотнях герц; конечный автомат PIO аппаратно ждёт фронт и защёлкивает шину с наносекундной дисциплиной — тот же принцип «по фронту», что и у триггеров машины (М5). Отладчик подчиняется тем же законам, что и отлаживаемое, — красивое место для рефлексии. 🔴 расширяют захват до 16 линий (данные+адрес) и пишут разборщик трассы «такт → микрооперация».
Типичные ошибки: монитор подключён без общей земли с макеткой — «мусор» в логе (земля объединяется первой, размыкается последней); делитель посчитан, но собран наоборот (на GPIO пришло 5·3,3/(1,8+3,3) вместо 5·… — проверить формулу и мультиметр); программатор дёргает /WE, пока машина в режиме RUN — правило блокировки: тумблер PROG физически отключает УУ от памяти.

Уровни

Глоссарий