Как работает интерфейс SWD во встраиваемых системах
Что такое интерфейс SWD и как он работает
Команды, выпускающие встраиваемые продукты на базе ARM, сталкиваются со знакомой проблемой во время начальной загрузки: прошивка загружается, плата включается, а затем ничего не происходит. Нет вывода, нет ответа, нет явной ошибки. Журнал UART молчит. Светодиод остается темным. Без возможности остановить процессор и проверить состояние регистров расследование немедленно заходит в тупик.
Именно для решения этой проблемы и был разработан интерфейс SWD. Он предоставляет инженерам прямой доступ к процессору — остановка выполнения, чтение памяти, установка точек останова и перепрошивка — используя всего две сигнальные линии на печатной плате. Такое сочетание низкой стоимости использования выводов и глубокого доступа стало причиной того, что SWD стал стандартным интерфейсом отладки и программирования для всех встраиваемых решений на базе ARM Cortex.
Протокол Serial Wire Debug — Сигнальная архитектура и роли выводов

SWD использует два обязательных сигнала: SWDIO и SWDCLK. SWDCLK передает тактовый сигнал от отладочного зонда к целевому микроконтроллеру. SWDIO является двунаправленным — он передает как команды от хоста, так и ответы от цели по одному проводу, используя полудуплексную передачу данных.
Режим полудуплекса работает за счет циклов переключения. Когда хост завершает отправку пакета запроса, управление линией переходит к целевому устройству для подтверждения и фазы чтения данных. Протокол точно определяет эти переходы, поэтому обе стороны знают, когда передавать данные, а когда слушать. Двух проводов достаточно, поскольку протокол сериализует все, что JTAG отправил бы параллельно по четырем или пяти линиям.
Два дополнительных сигнала расширяют интерфейс. Линия nRESET позволяет отладчику инициировать аппаратный сброс целевого устройства — полезно, когда процессор завис, а программный сброс через порт отладки ненадежен. Вывод SWO (Serial Wire Output) передает трассировочные данные от целевого устройства к отладчику. printf-логирование на основе ITM и трассировка инструкций ETM используют SWO в качестве выходного пути.
Два провода обеспечивают остановку, доступ к памяти, программирование флэш-памяти и точки останова — добавление SWO в качестве третьего контакта обеспечивает трассировку в реальном времени без полнофункционального порта трассировки JTAG.
Электрический интерфейс прост. SWDIO требует подтягивающего резистора — обычно 10 кОм — для удержания линии в высоком состоянии, когда ни одна из сторон не передает данные. SWDCLK может быть плавающим или подтягиваться к земле. Значение подтягивающего резистора имеет значение: слишком слабое — и линия медленно заряжается при высоких тактовых частотах; слишком сильное — и оно противодействует силе драйвера отладчика во время переходов.
SWD против JTAG — когда какой протокол выбрать
И SWD, и JTAG основаны на одной и той же спецификации ARM Debug Interface (ADI). Они используют одну и ту же базовую архитектуру Debug Port и Access Port. Разница заключается в физической топологии и количестве сигналов, а не в возможностях отладки.
JTAG использует пять сигналов: TCK, TMS, TDI, TDO и, опционально, TRST. Несколько устройств могут совместно использовать одну цепочку JTAG — каждое устройство передает данные от TDI к TDO, образуя последовательную цепочку. SWD является точечным. Один отладчик подключается к одному целевому устройству. В этом заключается основное компромиссное решение.
| Критерий | SWD | JTAG |
|---|---|---|
| Количество сигналов | 2 (+ опционально SWO, nRESET) | 4–5 |
| Топология | Точка-точка | Последовательная цепочка (несколько устройств) |
| Поддержка нескольких устройств | Ограниченная (SWD multidrop, не универсальная) | Нативная |
| Вывод трассировки | SWO (один пин, ограниченная пропускная способность) | Полноценный порт трассировки TPIU (4-битный параллельный) |
| Оптимальное решение | Одноядерные ARM, печатные платы с ограничением по выводам | Цепочки нескольких устройств, высокоскоростная трассировка |
Большинство современных разработок на базе ARM Cortex-M используют SWD в качестве основного интерфейса. Ограничения по количеству выводов на печатных платах малого форм-фактора делают двухпроводную конструкцию практичной там, где JTAG потребовал бы значительную часть доступных GPIO. В SoC с двумя ядрами или платах с несколькими программируемыми устройствами топология цепочки JTAG остается лучшим выбором.
На многих устройствах ARM возможно переключение между JTAG и SWD на одном физическом разъеме. Последовательность выбора JTAG-to-SWD включает отправку определенного 16-битного магического значения на TMS/SWDIO при тактировании TCK/SWDCLK. Большинство отладочных зондов обрабатывают это автоматически. 10- и 20-выводные отладочные разъемы Cortex от ARM несут оба протокола на одном посадочном месте, поэтому конструкция печатной платы не требует изменений при переключении между ними.
Для одноядерных ARM-мишеней с ограниченным пространством на плате SWD является практичным выбором по умолчанию. Оставьте JTAG для разработок, где требуется соединение нескольких устройств в цепочку или высокоскоростная параллельная трассировка.
Разъемы SWD, сопоставление выводов и электрическая совместимость
Отладочный разъем ARM Cortex выпускается в двух стандартных размерах. 20-выводная версия (с шагом 0,1 дюйма) является классической формой, используемой на оценочных платах и большинстве настольных отладочных адаптеров. 10-выводная версия (с шагом 0,05 дюйма, 2x5) чаще встречается на производственном оборудовании, где пространство на плате ограничено. Оба несут SWDIO, SWDCLK, nRESET, SWO, VTref (измерение напряжения на мишени) и GND.
Tag-Connect является популярной альтернативой для производственных плат. Он полностью исключает разъем — подпружиненный зонд контактирует с небольшим посадочным местом на печатной плате. Посадочное место TC2030-IDC охватывает SWD шестью контактами и широко используется в серийных производственных установках. Стоимость платы снижается почти до нуля, а посадочное место достаточно мало, чтобы поместиться в плотных компоновках.
Необходимо уделять внимание совместимости по напряжению. Зонд должен соответствовать напряжению ввода-вывода мишени. Большинство современных зондов определяют VTref и соответственно сдвигают свои уровни драйва, поддерживая мишени с напряжением 1,8 В, 3,3 В и 5 В. Подключение 3,3-вольтового зонда напрямую к 1,8-вольтовой мишени без сдвига уровня со временем повредит ячейки ввода-вывода мишени, даже если связь изначально работает.
- SWDIO pull-up: стандартное начальное значение 10 кОм к VCC; уменьшить до 4,7 кОм, если время нарастания сигнала медленное при высоких частотах SWDCLK
- Длина трассировки: держите трассировки SWDIO и SWDCLK короткими и согласованными; длинные трассировки на быстропереключающихся сигналах вызывают отражения, которые искажают пакеты
- Развязка: разместите развязывающий конденсатор 100 нФ близко к выводам VDD микроконтроллера; транзакции SWD генерируют всплески тока, влияющие на целостность сигнала
- Конфликт GPIO: убедитесь, что выводы SWDIO и SWDCLK не переназначены другим периферийным устройствам в прошивке перед попыткой подключения
Полный справочник по распиновке разъема, схемы подключения по уровням напряжения и рекомендации по разводке печатных плат см. в Справочник по распиновке и подключению разъема SWD.
Интерфейс SWD во встраиваемых системах — отладка, программирование и производственное использование
Понимание протокола — это основа. Более важный вопрос для большинства встраиваемых команд заключается в том, как SWD вписывается в полный жизненный цикл продукта — от раннего запуска до программирования в производстве и обслуживания на месте эксплуатации. Каждый этап имеет свои требования, и SWD удовлетворяет всем им через один и тот же двухпроводной интерфейс.
Прошивка и внутрисхемное программирование через SWD

SWD является основным путем внутрисхемного программирования для целевых устройств ARM Cortex-M и Cortex-A. Он не требует предварительно загруженного загрузчика на целевом устройстве. Отладочный зонд подключается непосредственно к порту отладки процессора, останавливает ядро и записывает во флэш-память через контроллер флэш-памяти с отображением в памяти.
Последовательность программирования следует единому шаблону для всех поставщиков и инструментов:
- Подключение: зонд устанавливает связь SWD и считывает IDCODE целевого устройства для подтверждения его идентификации
- Остановка: зонд останавливает ядро Cortex через порт отладки (Debug Port)
- Стирание: зонд стирает секторы флэш-памяти целевого устройства, используя алгоритм флэш-памяти, загруженный в ОЗУ целевого устройства
- Программирование: бинарный образ записывается по страницам, при этом алгоритм флэш-памяти выполняется на целевом устройстве для выполнения каждой записи
- Проверка: зонд считывает записанные данные и сравнивает их с исходным бинарным файлом
- Сброс: зонд освобождает ядро, и прошивка начинает выполнение
Алгоритмы флэш-программирования специфичны для поставщиков МК. OpenOCD, pyOCD и IDE от поставщиков содержат библиотеки этих алгоритмов. Когда новый вариант МК еще не добавлен в базу данных инструмента, алгоритм приходится добавлять вручную — это частая проблема при внедрении нового релиза кремния на этапе производственного развертывания.
Существуют два основных потока программирования SWD на стороне хоста. Программирование методом перетаскивания (drag-and-drop), используемое зондами на базе CMSIS-DAP и DAPLink, представляет зонд как USB-накопитель. Перетаскивание бинарного файла на него автоматически запускает последовательность флэш-программирования. Этот подход быстр для полевых техников и не требует установки программного обеспечения. Потоки, управляемые хостом, с использованием GDB с OpenOCD или CLI-инструментов поставщиков, таких как STM32CubeProgrammer или nrfjprog, предоставляют больше контроля — они поддерживают скриптинг, протоколирование прохождения/непрохождения тестов и интеграцию с автоматизированными системами тестирования.
Рекомендации по выбору зонда и настройке инструментария на стороне хоста см. в разделе выбор и настройка отладочного зонда SWD.
Частота SWDCLK определяет фактическую скорость программирования. Большинство целевых платформ Cortex-M поддерживают SWDCLK до 10 МГц в стабильных условиях, хотя многие производственные приспособления работают на частоте 4–8 МГц для обеспечения запаса по параметрам в зависимости от температуры и длины кабеля. При частоте 4 МГц программирование образа размером 256 КБ обычно занимает менее 10 секунд, включая стирание и проверку. Станции одновременного программирования (gang programming), где один хост одновременно программирует четыре или восемь плат, распространены в серийном производстве для достижения целевых показателей времени цикла.
Расположение тестовых точек имеет значение. Тестовые точки SWDIO, SWDCLK, GND и VCC должны быть доступны с фикстурной стороны платы. Размещение их на стороне компонентов требует двусторонней фикстуры, что увеличивает стоимость и сложность. Группировка их в постоянном месте в разных ревизиях продукта делает повторное использование фикстуры практичным.
Отладка в реальном времени, трассировка и интеграция CoreSight

SWD — это транспортный уровень для архитектуры отладки CoreSight от ARM. Понимание этой архитектуры объясняет, что именно может делать зонд после подключения к цели.
CoreSight организует доступ к отладке через два типа портов. Debug Port (DP) — это сам интерфейс SWD, он обрабатывает подключение, аутентификацию и управление верхнего уровня. Access Port (AP) находится за DP и обеспечивает доступ к конкретным ресурсам: AHB-AP предоставляет доступ для чтения/записи ко всей карте памяти, а регистры Core Debug находятся в этой карте. Через AHB-AP зонд может читать и записывать любой адрес памяти, регистр периферийного устройства или регистр ЦП, пока ядро остановлено.
Точки останова и точки наблюдения работают через блоки DWT и FPB в ядре Cortex-M. Аппаратные точки останова останавливают процессор, когда выполнение достигает определенного адреса. Точки наблюдения останавливаются при доступе к памяти — чтении, записи или обоих — по указанному адресу или диапазону адресов. Cortex-M4 обычно предоставляет шесть аппаратных точек останова и четыре точки наблюдения. Превышение этих ограничений требует программных точек останова, которые изменяют инструкцию во флэш-памяти и имеют свои собственные ограничения.
Отладка в режиме остановки по своей природе инвазивна. Процессор останавливается, а чувствительные ко времени периферийные устройства — сторожевые таймеры, коммуникационные периферийные устройства, контуры управления двигателем — продолжают работать или выдают ошибку, пока ядро остановлено. Инженеры, работающие с системами реального времени, нуждаются в неинвазивных методах отладки для критически важных по времени участков.
Трассировка SWO решает эту проблему. Вывод Serial Wire несет данные из Instrumentation Trace Macrocell (ITM) и, в ядрах с ETM, трассировку инструкций. Трассировка ITM позволяет прошивке записывать сообщения журнала в программный FIFO с 32 каналами. Зонд считывает их в реальном времени, не останавливая ядро. Это встроенный эквивалент отладки printf, но с незначительными накладными расходами во время выполнения по сравнению с выводом UART — типичная запись ITM занимает несколько тактов, а данные выводятся через SWO со скоростью до нескольких мегабит в секунду.
RTT (Real-Time Transfer) — это альтернатива, когда SWO недоступен или когда зонд не поддерживает трассировку. RTT использует небольшой кольцевой буфер в целевой ОЗУ. Зонд считывает буфер через порт отладки, пока ядро работает. Дополнительный пин не требуется. Компромисс заключается в потреблении ОЗУ — типичный буфер RTT использует от 512 байт до 4 КБ в зависимости от объема журнала — и небольшой задержке по сравнению с SWO.
Для практической настройки точек останова, конфигурации трассировки SWO и RTT см. пошаговую настройку среды отладки SWD.
SWD в промышленных HMI, IoT и встраиваемых системах управления производством

В промышленных контроллерах HMI на базе ARM, периферийных узлах IoT, микроконтроллерах управления двигателями и устройствах автоматизации зданий SWD выполняет три различные роли в жизненном цикле продукта: отладка при разработке, программирование в производстве и обслуживание в полевых условиях. Каждая роль имеет свои требования, и интерфейс обрабатывает все три через одно и то же физическое соединение.
Промышленные HMI и контроллеры автоматизации используют SWD в основном для программирования в производстве и обновлений прошивки в полевых условиях. Типичный тестовый стенд на производственной линии HMI использует подпружиненные контакты (pogo pins) на контактных точках SWDIO, SWDCLK, GND и VCC. Хост запускает скриптованную последовательность прошивки, регистрирует результат с серийным номером платы и отмечает сбои для доработки. Время цикла на плату обычно составляет 15–30 секунд, включая этапы функционального тестирования. Сам интерфейс SWD добавляет к этому общему времени менее 10 секунд.
Промышленные IoT-узлы часто работают на целевых платформах Cortex-M33 или Cortex-M4 с включенными TrustZone или защитой от чтения в производственных условиях. Во время разработки SWD обеспечивает полный доступ к отладке. Перед отправкой прошивка включает защиту от чтения — однократная запись в опционные байты или предохранительный регистр, который отключает доступ к отладке SWD и предотвращает считывание памяти. Содержимое флэш-памяти становится нечитаемым через порт отладки. Это стандартный механизм защиты интеллектуальной собственности прошивки в отгруженных продуктах.
Повторное включение SWD после установки защиты от чтения требует полного стирания. Устройство стирает всю флэш-память перед повторным открытием доступа к отладке. Это защищает прошивку — невозможно считать образ, а затем восстановить его — но это означает, что гарантийный ремонт или заводская доработка требуют полного перепрограммирования устройства с нуля. Создайте рабочий процесс доработки, учитывающий это до начала производства, а не после прибытия первого возвращенного устройства.
МК для управления двигателями и силовой электроники добавляют временное ограничение. Многие из этих конструкций используют выводы SWD в качестве GPIO при нормальной работе — МК переназначает SWDIO и SWDCLK на другие функции после загрузки. Подключение зонда после переназначения происходит молча. Решение — окно отладки: короткий период при запуске, инициируемый GPIO или определенным условием загрузки, в течение которого прошивка удерживает SWD активным до переназначения. Это позволяет зонду подключиться в течение окна и остановить ядро до возникновения переназначения.
Двухъядерные SoC — все чаще встречающиеся в промышленных МК, таких как серия STM32H7 или NXP i.MX RT — требуют SWD multidrop или отдельные разъемы отладки для каждого ядра. SWD multidrop присваивает каждому ядру уникальный идентификатор цели на одних и тех же линиях SWDCLK/SWDIO. Не все зонды поддерживают это. Проверьте версию прошивки зонда и поддержку multidrop перед принятием архитектуры SWD для двухъядерных систем в новой конструкции.
Интеграция CI/CD теперь является стандартной практикой в командах разработчиков встраиваемых систем, занимающихся выпуском подключенных продуктов. OpenOCD, pyOCD и большинство у vendor CLI инструментов предоставляют интерфейс командной строки, который может напрямую вызывать конвейер сборки. Типичный шаг автоматизированного тестирования включает прошивку, выполнение самотестирования при включении питания через порт отладки, считывание результата прохождения/непрохождения из известного адреса памяти и регистрацию результата. Это позволяет выявлять сбои записи во флэш-память и основные ошибки прошивки при каждой сборке, а не только во время циклов ручного тестирования.
STONE HMI применяет структурированные процессы разработки прошивок в проектах автоматизации.
Для команд разработчиков встраиваемых продуктов такая дисциплина процессов важна за пределами лаборатории разработки. Когда процедуры программирования в производстве, автоматизированного тестирования и полевого ремонта определены и протестированы до первого производственного запуска, риск поставки значительно снижается. Роль SWD в этом рабочем процессе — это не просто удобство отладки — это механизм, который делает возможным повторяемое, проверяемое программирование в производстве на оборудовании на базе ARM.
Часто задаваемые вопросы об интерфейсе SWD
Для чего используется интерфейс SWD?
SWD обеспечивает доступ для отладки, прошивку и трассировку в реальном времени для процессоров ARM Cortex. Он охватывает полный жизненный цикл продукта: отладка при инициализации во время разработки, программирование в производстве и обновления прошивки в полевых условиях. Архитектура и рабочий процесс программирования подробно описаны в разделах выше.
Сколько пинов требуется для SWD?
SWD требует два пина: SWDIO и SWDCLK. Третий пин, nRESET, является необязательным, но рекомендуется для надежного подключения зонда, когда целевое устройство может находиться в неизвестном состоянии. Четвертый пин, SWO, добавляет возможность вывода трассировки. Полный список сигналов см. в H3 1.1.
Можно ли использовать SWD для производственного программирования, а не только для отладки разработки?
Да, производственное программирование через SWD является стандартной практикой для встраиваемых продуктов на базе ARM. Светильные приспособления с игольчатыми контактами (pogo pins), групповые программаторы и скриптовые инструменты командной строки используют интерфейс SWD для массового программирования флэш-памяти. Последовательность программирования, ограничения скорости и факторы проектирования светильных приспособлений рассмотрены в H3 2.1.
В чем разница между SWD и UART для прошивки?
Прошивка через UART использует загрузчик, уже присутствующий в ПЗУ или флэш-памяти микроконтроллера — процессор должен быть запущен, а загрузчик активен. SWD полностью обходит процессор, записывая данные непосредственно во флэш-память через порт отладки. SWD работает, даже если на целевом устройстве нет прошивки, поврежден образ или процессор завис.
Поддерживается ли SWD на всех процессорах ARM Cortex?
SWD поддерживается на всех процессорах ARM Cortex-M и большинстве процессоров Cortex-A. Он является частью спецификации ARM Debug Interface (ADI) и включен в кремний Cortex-M начиная с Cortex-M0. Небольшое количество старых или глубоко встраиваемых конфигураций Cortex-A предоставляют только JTAG, но они редко встречаются в текущих разработках.
Как отключить SWD в готовом продукте для защиты прошивки?
Большинство микроконтроллеров ARM Cortex-M предоставляют механизм защиты от чтения — однократную запись в опционные байты или предохранитель безопасности, который отключает доступ к порту отладки и предотвращает считывание памяти. Повторное включение требует полного массового стирания, которое уничтожает прошивку. Рабочий процесс обеспечения безопасности и соображения по доработке рассмотрены в H3 2.3.