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

SWD — отладочный интерфейс

SWD — интерфейс, по которому отладчик вроде ST-Link подключается к микроконтроллеру на ядре ARM Cortex-M: прошивает флеш-память, останавливает программу, читает переменные и регистры. Ему нужны всего два сигнальных провода плюс земля.

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

SWD (Serial Wire Debug) — двухпроводной отладочный интерфейс ядер ARM Cortex-M. Линия SWDIO передаёт данные в обе стороны, SWCLK — тактовый сигнал от отладчика. Через SWD отладчик — ST-Link, J-Link или другой — получает доступ к шине ядра: записывает флеш-память, ставит точки останова, читает и меняет память и регистры периферии.

SWD в STM32

Отладочный порт SWJ-DP в STM32F1 объединяет JTAG на пяти выводах и SWD на двух. После сброса активен JTAG, а на SWD отладчик переключает порт специальной последовательностью на линиях TMS и TCK (RM0008, разд. 31.4).

ВыводSWDJTAG
PA13SWDIOJTMS
PA14SWCLKJTCK
PA15—JTDI
PB3SWO (трассировка)JTDO
PB4—NJTRST

У STM32F1 ненужные выводы JTAG освобождают полем SWJ_CFG регистра AFIO_MAPR: 010 — JTAG выключен, SWD работает, и PA15, PB3, PB4 становятся обычными выводами; 100 — выключен и SWD. После сброса выводы снова принадлежат отладке, поэтому такой микроконтроллер прошивают, подключаясь к нему под сбросом, или через встроенный загрузчик. Режимы выводов и их состояние после сброса — в статье о GPIO STM32, разъёмы отладчиков JTAG и SWD — на странице «Распиновка JTAG и SWD».

Что ещё даёт отладка

Кроме прошивки и остановки программы, ядро Cortex-M3 имеет блоки FPB (аппаратные точки останова во флеш-памяти, у STM32F103 их шесть), DWT (точки наблюдения и счётчик тактов CYCCNT) и ITM (программная трассировка через SWO). Подробнее — в статье об архитектуре Cortex-M3, а о прошивке через загрузчик и флеш-память — в статье Flash и загрузчик STM32.

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

Какие выводы нужны для SWD на STM32?

SWDIO — PA13 и SWCLK — PA14, плюс общий провод. Эти выводы после сброса отданы отладке и у STM32F1, и у STM32F4. Вывод PB3 может выдавать трассировку SWO.

Почему после перенастройки порта A пропадает отладчик?

Потому что выводы PA13 и PA14 переведены в другой режим. У STM32F4 после сброса в GPIOA_MODER лежит 0xA800 0000 — PA13, PA14 и PA15 в режиме альтернативной функции. Если записать в MODER значение целиком, а не изменить только нужные поля, SWD отключится. Меняйте регистр чтением-изменением-записью.

Чем SWD отличается от JTAG?

JTAG использует пять выводов, SWD — два. Порт SWJ-DP в STM32 поддерживает оба: после сброса активен JTAG, а отладчик переключает порт на SWD специальной последовательностью. У STM32F1 выводы JTAG, не нужные для SWD, — PA15, PB3 и PB4 — освобождают полем SWJ_CFG = 010 регистра AFIO_MAPR.

Источники

  1. STMicroelectronics. RM0008: Reference manual STM32F101xx–STM32F107xx, Rev 21, 2021 — 31.4 — порт SWJ-DP: JTAG на пяти выводах и SWD на двух, назначение выводов после сброса; 9.4.2 — поле SWJ_CFG регистра AFIO_MAPR
  2. STMicroelectronics. RM0090 Rev 22. Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 — 8.4 — значения после сброса: GPIOA_MODER = 0xA800 0000, PA13–PA15 в режиме альтернативной функции
  3. STMicroelectronics. AN4899: STM32 microcontroller GPIO hardware settings and low-power consumption — 6.6 — выводы отладчика, используемые для других целей

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