Рекомендации по настройкам по умолчанию для неиспользуемых выводов на STM32 (ARM Cortex M3) - поднимать / опускать?

13

В настоящее время мы используем различные варианты семейства микроконтроллеров STM32. Я хотел бы знать следующее:

1) Каковы рекомендуемые настройки по умолчанию для выводов микроконтроллеров в целом, если у вас есть возможность выбрать оба подтягивания или понижения? Каковы плюсы и минусы перехода с одним или другим? (Предполагая, что вы будете устанавливать их по умолчанию в качестве входных данных)

2) В частности, я хотел бы знать, что делать с неиспользуемыми выводами для семейства микроконтроллеров STM32. Для меня очевидно, что мы не должны оставлять штырьки плавающими (это все, что написано в таблице данных :(), но я должен настроить их на ввод с подтягиванием или ввод с подтягиванием? В частности, я бы хотел выбрать настройку, которая наименее восприимчива к ESD, а также, если возможно, потребляет наименьшее количество энергии.

3) Что касается критических выводов, следует ли нам полагаться на встроенное ПО для правильной установки выводов в правильное состояние по умолчанию или эта ответственность должна лежать на внешнем оборудовании (подключение внешних подтягиваний или опусканий)? Если значения, выбранные для внешних резисторов, больше, чем внутренние повышающие или понижающие значения, настройка во встроенном программном обеспечении не имеет значения.

Плюс, который я вижу для выполнения вышеизложенного, заключается в том, что если микро не инициализируется должным образом по какой-либо причине (неисправное оборудование или тому подобное), мы не полагаемся на прошивку для правильной настройки вывода.

Недостаток, который я вижу, состоит в том, что делать это дороже аппаратного обеспечения.

Любой свет, который вы можете пролить на вышеупомянутое, будет действительно оценен.

Благодарность..

IntelliChick
источник
Почему бы не установить неиспользуемые контакты в качестве выходов? Это устранило бы проблему подтягивания против понижения.
Коннор Вольф
Следует отметить: «При любом событии сброса все GPIO являются плавающими входами. Это предотвращает любое случайное повреждение GPIO в случае чрезвычайной ситуации». embedded-lab.com/blog/stm32-gpio-ports-insights
cp.engr

Ответы:

10

Этот ответ не является специфическим для STM32, но основан на опыте и многих подобных дискуссиях в течение многих (многих) лет. Другие могут добавить к этому - он охватывает основные моменты (я думаю), но может быть не полным.

Отрадно видеть, как кто-то задает эти простые, но фундаментальные вопросы и показывает, как такие «мелочи» могут «сгореть» в реальной жизни.

то есть "если микро не инициализируется должным образом ..." действительно читает "... когда микро не инициализируется должным образом ..." :-) - и очевидно, что вы понимаете это.

Так:

  • Для тех, кто действительно хочет получить четко определенный результат, очень важно использовать внешние подтяжки или понижения. Это самое важное, что нужно сделать здесь. Все остальное - бонус. То есть установка на входы с внутренним pullxxx - это компромисс, который почти всегда будет работать.
    НО, если «почти всегда» недостаточно для вашего дизайна, тогда вам нужен внешний pull xxxs.

  • Подтягивание или опускание не дают ошеломляющего лучшего результата. Это может варьироваться между IC, но может быть определено из таблицы данных. При прочих равных условиях (какими бы они ни были), я бы предпочел понижение напряжения, поскольку существует вероятность более низкой утечки к внешним токам устройства - но это может быть минимальным в печатной плате с конформным покрытием и / или в благоприятной среде.

  • Вы можете посмотреть на действия при запуске, если вы действительно заботитесь. например, вытянутый штифт начнёт низкий уровень и на некоторой стадии переместится вверх. Вытащенная булавка, вероятно, будет оставаться низкой во всем. Это, вероятно, не важно, но упоминается для полноты.

  • Чувствительность к электростатическим разрядам будет зависеть от конкретного устройства, вполне вероятно, симметрична, и в среднем по многим процессорам, вероятно, предпочтит понижение, поскольку драйверы имеют тенденцию уменьшаться лучше, чем исходные, если они асимметричны. Если вы беспокоитесь о ESD, то вы можете использовать низкие выходы с понижением напряжения - поскольку путь с низким импедансом (вероятно) обеспечит лучшую защиту от ESD. Но если вы очень заботитесь о ESD, вы захотите спроектировать его для других целей, а не полагаться на защиту внутри IC в качестве основной защиты.

  • По вопросу 3 - внешние pullxxxs желательны, но кажется безопасным использовать значения, которые находятся на верхнем пределе надлежащей конструкции, а затем использовать внутренние xxx параллельно, если это необходимо. Однако, поскольку внутренняя тяга xxxs часто имеет коэффициент 2: 1, вы можете получить самый большой R и наименьший ток, используя только внешний. Чего вы, конечно, хотите избежать, так это внешних подтягиваний и внутренних провалов или недостатков - но это вряд ли проблема.

  • Когда я говорю «... ограничивающий верх надлежащего дизайна ...», я имею в виду именно это, а не «превышающий ограничение ...». т. е. штифт будет иметь определенное значение сопротивления, которое позволяет соответствовать спецификации Vin в худшем случае. Резистор большего размера может потреблять меньший ток в резисторе, но может начать слегка включать внутренний переключатель. то есть может случиться так, что существует Rpulldown_current по сравнению с наименьшим общим компромиссом текущего тока, так как внутренний драйвер начинает видеть ток утечки (который будет чрезвычайно мал), увеличивая ток для Dirver и шепча его немного.

  • Если вы используете, например, pulldown, вы можете найти более низкое энергопотребление, чтобы установить вывод на вывод и снизить его, но это вариант, который можно выбрать в свое время.

  • Почти в стороне - НИКОГДА не позволяйте защитным диодам обрабатывать "любые значительные токи" на любой стадии во время работы. Разрешение им сделать это может привести к совершенно необъяснимым действиям процессора. Чем меньше текущее значение, тем ниже вероятность того, что что-то пошло не так, и тем сложнее его найти.

Рассел МакМахон
источник
1
Очень проницательный ответ. Большое спасибо. Не могли бы вы подробнее рассказать об этом - «Если вы сильно заботитесь о ESD, то, возможно, вы захотите использовать низкие выходы с понижением напряжения - поскольку путь с низким импедансом (вероятно) обеспечит лучшую защиту от электростатических разрядов»? Если установить выход - вы бы по умолчанию открыли сток или двухтактный (высокий / низкий)?
IntelliChick
2

Что вы оптимизируете для? Оптимизация затрат требует, чтобы вы установили неиспользуемые выводы на выходы. Оптимизация надежности требует, чтобы были определены все уровни выводов, даже в течение короткого периода времени, прежде чем микропрограмма сможет установить неиспользуемые выводы в соответствии с тем, что она считает целесообразным.

Мне когда-то приходилось проверять надежность расчетов процессорной платы. Это было хорошо разработано, с развязывающими крышками повсюду и резисторами тяги к чему угодно на всех выводах ввода / вывода. Инженер по надежности вынул свое руководство, добавил частоты отказов всех задействованных компонентов и получил цифру, в которой преобладали частоты отказов пассивных компонентов. Эта цифра была выше, чем требование, поэтому у нас возникла проблема. Удалите эти резисторы, и фигура будет в порядке. Но на это предложение инженеры-электрики начали кричать в гневе (справедливо, IMO). Я не помню, как история закончилась; Я думаю, что мы пошли к клиенту и попросили об освобождении от ответственности за исключение частоты отказов резисторов из расчета на том основании, что они не вели значительный ток.

Воутер ван Оойен
источник
1

Я просто настраиваю неиспользуемые контакты как выходы и устанавливаю их низкими.

Леон Хеллер
источник
Вы обычно устанавливаете их на двухтактный или открытый сток? И в обоих случаях вы бы установили их на низком уровне? Можете ли вы сказать мне, почему вы бы выбрали один над другим.
IntelliChick
@Leon Heller - он отвечает тесту "работает обычно", но не работает ", когда микропроцессор не инициализирует должным образом, или когда Мерфи слегка полунабрасывает, как он иногда делает. Ваш пин-код установлен на выход и установлен на низкое значение ПЛЮС раскрытия , работает.
Рассел МакМахон