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

Можно ли подключить несколько микроконтроллеров к одному отладчику по SWD?

Обновлено Редакция GAW

Обычный SWD — соединение точка — точка: отладчик посылает запрос, и единственный подключённый кристалл отвечает по линии SWDIO. Второй кристалл на той же паре проводов ответил бы одновременно с первым. Чтобы этого не было, Arm добавила в SWD версии 2 режим multidrop: после сброса линии отладчик пишет в регистр TARGETSEL, и отвечает только выбранное устройство.

Кто это умеет

КристаллSWD multidropИсточник
RP2040да: по DAP на каждое ядро плюс Rescue DP на общей шинедаташит RP2040, разд. 2.3.4
STM32 с поддержкой multidropда, если разные TargetSel; в STM32CubeProgrammer — только запись флеш-памяти и байтов конфигурацииUM2237, разд. 3.2.10
STM32F103нет: идентификатор SW-DP 0x1BA01477, поле версии — DPv1 (наш разбор)RM0008, разд. 31

Варианты для чипов без multidrop

  1. Отдельный разъём SWD на каждый чип — проще всего; распиновки — на странице «Распиновка JTAG и SWD».
  2. Цепочка JTAG — TDO одного на TDI другого, TCK и TMS общие. В STM32F103 два TAP, поэтому длина регистра команд в цепочке из двух чипов — 2 · (5 + 4) = 18 бит (наш расчёт по RM0008).
  3. Переключатель линий SWDIO и SWCLK между чипами.

Как устроены оба протокола, разобрано в статье «JTAG и SWD», а термины — в словаре на странице SWD.

Похожие вопросы

Можно ли просто соединить SWDIO и SWCLK двух STM32F103 параллельно?

Нет. Без multidrop оба кристалла ответят на один и тот же запрос и будут одновременно управлять линией SWDIO — данные испортятся, а выходы могут конфликтовать. Ставят отдельный разъём на каждый чип или переключатель линий.

Как устроена цепочка JTAG из нескольких STM32F103?

TDO одного чипа соединяют с TDI следующего, а TCK и TMS подают на все параллельно. В каждом STM32F103 два TAP подряд, поэтому в цепочке из двух чипов четыре TAP, и отладчик должен уметь переводить лишние в BYPASS — это поддерживают не все отладчики и программы.

Сколько чипов поддерживает multidrop?

Архитектура SWD версии 2 по спецификации Arm допускает практически неограниченное число устройств, ограничивает только электрика линии. На деле ограничение — уникальность TARGETSEL: два кристалла с одинаковым идентификатором на одной шине не различить. Некоторые чипы позволяют его менять: у RP2040 номер экземпляра — старшие 4 бита адреса DAP — задаётся регистром sysconfig, что даташит прямо предлагает для систем из нескольких микросхем; значение 0xF занято Rescue DP.

Источники

  1. Arm. Arm Debug Interface Architecture Specification ADIv5.0 to ADIv5.2 (IHI 0031G, ID022122) — разд. B4.1: SWD протокола версии 2 — многоточечная архитектура: двухпроводное подключение ко многим устройствам, число устройств ограничено только электрикой, совместимость с отладчиками без multidrop, неактивные устройства могут отключать питание и не нагружают линию; требует состояния dormant; разд. B2.2.11 — регистр TARGETSEL выбирает устройство сразу после сброса линии, во время ответа на запись никто не управляет линией; TARGETSEL есть в DPv2
  2. STMicroelectronics. UM2237 STM32CubeProgrammer software description, Rev 29 (November 2025) — разд. 3.2.10 SWD Multidrop: один интерфейс SWD для нескольких устройств на одной шине, поддерживаются только запись флеш-памяти и байтов конфигурации; команда -getTargetSelList показывает устройства на шине; параметр подключения TargetSel=<значение>; одновременно можно подключить только устройства с разными TargetSel; старая прошивка ST-LINK — нужна обновлённая; подробности в AN6382
  3. STMicroelectronics. RM0008 Reference manual STM32F101/F102/F103/F105/F107, Rev 21 (February 2021) — разд. 31.5: в STM32F10xxx два последовательно соединённых TAP — boundary scan (регистр команд 5 бит) и Cortex-M3 (4 бита), неиспользуемый TAP переводят в BYPASS; после выбора SWD TAP boundary scan отключается; идентификатор SW-DP 0x1BA01477
  4. Raspberry Pi Ltd. RP2040 Datasheet — разд. 2.3.4: отладка через независимые DAP каждого ядра на общей шине SWD multidrop (SWD v2), каждый DAP отвечает только на свой TARGETSEL, остальные отпускают линию; отдельный Rescue DP; адреса по умолчанию: ядро 0 — 0x01002927, ядро 1 — 0x11002927, Rescue DP — 0xf1002927; номер экземпляра (старшие 4 бита) меняется регистрами sysconfig PROC0/PROC1_DAP_INSTID для многокристальных систем, 0xF зарезервирован; рекомендуемая частота SWD до 24 МГц, при плохих или длинных проводах — до 1 МГц

Нашли ошибку?