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

Нужны ли подтягивающие резисторы на линиях SWD?

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

SWD — двухпроводной интерфейс: SWCLK — такт от отладчика, SWDIO — данные в обе стороны. Когда направление передачи меняется, по спецификации Arm линию SWDIO в такт смены направления не ведёт никто, и её уровень держит только подтяжка. Она же не даёт линии плавать, когда отладчик не подключён.

Что требуют документы

ДокументSWDIOSWCLK
Arm IHI 0031Gподтяжка около 100 кОм к питанию на стороне кристаллане нормирует
ST RM0090 (STM32F4)встроенная подтяжка к питаниювстроенная подтяжка к земле

ST пишет прямо: встроенные подтяжки избавляют от необходимости ставить внешние резисторы. В разделе о протоколе SWD тот же справочник повторяет требование Arm о подтяжке 100 кОм — у STM32F4 её роль выполняет встроенная. Для других кристаллов смотрите их документацию: требование Arm адресовано разработчику микросхемы, а будет ли резистор внутри, решает производитель.

Почему подтяжка высокоомная

Arm объясняет: подтяжка лишь удерживает состояние линии и должна быть достаточно слабой, чтобы ток был мал, когда отладчик держит линию в нуле. При 3,3 В:

I=3,3 В100 кОм=33 мкА,3,3 В10 кОм=330 мкАI = \frac{3{,}3\ \text{В}}{100\ \text{кОм}} = 33\ \text{мкА}, \qquad \frac{3{,}3\ \text{В}}{10\ \text{кОм}} = 330\ \text{мкА}

(наш расчёт). Для устройства на батарейке, которое долго висит на отладчике в режиме низкого потребления, Arm советует, чтобы отладчик держал линию в единице. Зато слабая подтяжка медленно возвращает линию из нуля — за много тактов, поэтому перед тем как отпустить линию, отладчик сам выставляет единицу.

Если отладчик не подключается, дело редко в подтяжках — порядок проверки в ответе «Что делать, если ST-LINK пишет No target connected». Протокол и порты отладки описаны в статье «JTAG и SWD», разъёмы — на странице «Распиновка JTAG и SWD», а как работает подтягивающий резистор, объясняет словарь.

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

Повредит ли внешний резистор 10 кОм на SWDIO?

Обычно нет — драйверы отладчика и кристалла его перетягивают. Но Arm просит высокоомную подтяжку, чтобы ток в нуле был мал: 10 кОм при 3,3 В дают 0,33 мА вместо 33 мкА, что заметно в устройствах на батарейке, если отладчик подключён долго.

Почему SWCLK тянут к земле, а не к питанию?

ST объясняет, что SWCLK подаётся на тактовые входы триггеров отладки и не должен плавать. Подтяжка к земле держит такт неактивным, пока отладчик не подключён, и случайные фронты не запускают логику отладки.

А для полного JTAG подтяжки нужны?

Стандарт IEEE, по словам ST в RM0090, рекомендует подтяжки к питанию на TDI, TMS и nTRST. У STM32F4 они встроены вместе с подтяжкой TCK к земле, и внешние резисторы не нужны; у других кристаллов проверьте их документацию.

Источники

  1. Arm. Arm Debug Interface Architecture Specification ADIv5.0 to ADIv5.2 (IHI 0031G, ID022122) — разд. B4.3.2 Line pull-up: на стороне кристалла требуется подтяжка 100K, она лишь удерживает состояние линии; линия, отпущенная в нуле, возвращается в единицу за много тактов; подтяжка предотвращает ложные сигналы без подключённого отладчика и должна быть достаточно высокоомной, чтобы снизить ток, когда отладчик держит линию в нуле; при долгом подключении в режиме низкого потребления отладчик должен держать линию в единице; разд. B4.1.3: в такт смены направления линию не ведёт никто
  2. ST. RM0090: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 reference manual (Rev 21) — разд. 38.4.3: встроенные подтяжки на выводах JTAG — NJTRST, JTDI, JTMS/SWDIO к питанию, TCK/SWCLK к земле; вывод SWCLK подключён к тактовому входу триггеров отладки, плавать ему нельзя; стандарт IEEE рекомендует подтяжки на TDI, TMS и nTRST, для TCK особых рекомендаций нет; встроенные подтяжки избавляют от внешних резисторов; разд. 38.8.2: для двунаправленной линии SWDIO нужна подтяжка, Arm рекомендует 100 кОм

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