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).
| Вывод | SWD | JTAG |
|---|---|---|
| PA13 | SWDIO | JTMS |
| PA14 | SWCLK | JTCK |
| PA15 | — | JTDI |
| PB3 | SWO (трассировка) | 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.
Источники
- STMicroelectronics. RM0008: Reference manual STM32F101xx–STM32F107xx, Rev 21, 2021 — 31.4 — порт SWJ-DP: JTAG на пяти выводах и SWD на двух, назначение выводов после сброса; 9.4.2 — поле SWJ_CFG регистра AFIO_MAPR
- STMicroelectronics. RM0090 Rev 22. Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 — 8.4 — значения после сброса: GPIOA_MODER = 0xA800 0000, PA13–PA15 в режиме альтернативной функции
- STMicroelectronics. AN4899: STM32 microcontroller GPIO hardware settings and low-power consumption — 6.6 — выводы отладчика, используемые для других целей
Нашли ошибку?
Смотрите также
- Cortex-M3Регистры, карта памяти, bit-banding, NVIC, SysTick, MPU, старт, пример
- GPIO STM32Режимы выводов, регистры F1 и F4, BSRR, AF, скорость, токи, 5 В, код
- Flash и загрузчик STM32Страницы и секторы, BOOT0, системный загрузчик, AN3155, IAP, option bytes, RDP
- Загрузчик (bootloader)Прошивка МК без программатора через UART или USB