Пусковой /открытый дренаж; подтягивающие /тянущий вниз

Я читаю спецификацию чипа ARM Cortex, в частности главы GPIO. В конечном счете, я хочу настроить различные контакты GPIO, чтобы использовать их в режиме «Альтернативная функция» для доступа для чтения /записи в SRAM.

Из всех доступных регистраторов GPIO я не понимаю два: GPIO_PUPDR и GPIO_OTYPE, которые являются соответственно «регистром подтягивания /выпадающего списка» и « выходной регистр типа ".

Для GPIO_PUPDR У меня есть три варианта:

  • Без подтягивания или выпадания
  • подтягивающие
  • Потяните вниз

Для GPIO_0TYPE У меня есть два варианта:

  • Выходное нажатие
  • Выход с открытым стоком

В чем разница между всеми различными конфигурациями и которая будет наиболее подходящей для связи с SRAM?

Документация для платы, над которой я работаю, доступна здесь ( см. стр. 24 для схем SRAM). Справочное руководство для ARM Chip доступно здесь (см. Стр. 145 и 146 для регистров GPIO).

41 голос | спросил Randomblue 15 MarpmThu, 15 Mar 2012 13:26:40 +04002012-03-15T13:26:40+04:0001 2012, 13:26:40

3 ответа


49

Этот ответ является общим для процессоров и периферийных устройств, и в конце имеет специальный комментарий к SRAM, который, вероятно, относится к вашей конкретной оперативной памяти и CPU.

Выходные контакты могут управляться в трех разных режимах:

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

Входными штырьками могут быть входные данные с помощью:

  • подтягивание - резистор, подключенный к высокому
  • выпадающий - резистор, подключенный к низкому
  • pull-up и pull-down - как резистор, подключенный к высокому, так и резистор, подключенный к низкому (только в редких случаях).

Существует также режим запуска Шмитта , где входной контакт вытягивается со слабым подтягиванием до начального состояния. Когда он остается один, он сохраняется в своем состоянии, но с минимальными усилиями может быть выведен в новое состояние.

Открытый слив полезен, когда несколько затворов или штифтов соединены вместе с (внешним или внутренним) подтягиванием. Если все штырьки высоки, все они разомкнуты, и подтягивание приводит в порядок контакты. Если какой-либо штырь низкий, все они падают, когда они связаны друг с другом. Эта конфигурация эффективно формирует ворота AND.

При управлении SRAM вы, вероятно, хотите, чтобы линии передачи данных или линии адресов были высокими или низкими как можно более жесткими и быстрыми, чтобы можно было задействовать активный привод вверх и вниз, поэтому указывается push-pull. В некоторых случаях с несколькими ОЗУ вы можете делать что-то умное и комбинировать линии, где другой режим может быть более подходящим.

С SRAM с вводом данных из SRAM, если ИС RAM всегда утверждают данные, то штырь без подтягивания возможно OK, так как ОЗУ всегда устанавливает уровень, и это минимизирует нагрузку. Если строки данных RAM иногда открыты или тристаты, вам понадобятся входные контакты, чтобы иметь возможность устанавливать их собственное действительное состояние. При очень высокой скорости связи вы можете использовать подтягивание и aa pull-down, поэтому параллельное эффективное сопротивление - это сопротивление соединения, а напряжение холостого хода шины устанавливается двумя резисторами, но это несколько специалист.

ответил Russell McMahon 15 MarpmThu, 15 Mar 2012 14:33:43 +04002012-03-15T14:33:43+04:0002 2012, 14:33:43
13

Я нашел этот ответ из STM32 Общие сведения о настройках GPIO

  • GPIO_PuPd (Pull-up /Pull-down)

В цифровых схемах важно, чтобы сигнальные линии никогда не позволяли «плавать». То есть, они должны всегда находиться в высоком состоянии или в низком состоянии. При плавании состояние не определено и вызывает несколько различных типов проблем.

Способ исправить это - добавить резистор из сигнальной линии либо в Vcc, либо в Gnd. Таким образом, если линия не будет активно приводиться в действие высоким или низким, резистор приведет к дрейфу потенциала до известного уровня.

У ARM (и других микроконтроллеров) есть встроенная схема для этого. Таким образом, вам не нужно добавлять другую часть в свою схему. Например, если вы выберете «GPIO_PuPd_UP», это равносильно добавлению резистора между сигнальной линией и Vcc.

  • GPIO_OType (Тип вывода):

Push-Pull: это тип вывода, который большинство людей считает «стандартным». Когда выход идет низко, он активно «тянут» на землю. И наоборот, когда выход установлен на высокий, он активно «толкается» к Vcc. Упрощенный, он выглядит так: «введите

С другой стороны, выход с открытым дренажем активен только в одном направлении. Он может вытащить штифт в направлении земли, но он не может прогнать его высоко. Представьте предыдущее изображение, но без верхнего MOSFET. Когда он не тянет на землю, MOSFET (нижняя сторона) просто непроводящий, что приводит к поплавке выхода.

Для этого типа выхода в цепь должен быть добавлен нагрузочный резистор, что приведет к тому, что линия будет гореть высоко, если она не будет низкой. Вы можете сделать это с помощью внешней части или путем установки значения GPIO_PuPd в GPIO_PuPd_UP.

Название происходит от того факта, что утечка MOSFET не внутренне связана ни с чем. Этот тип вывода также называется «открытым коллектором» при использовании BJT вместо MOSFET.

  • GPIO_Speed ​​

В основном, это контролирует скорость нарастания (время нарастания и время падения) выходного сигнала. Чем быстрее скорость нарастания, тем больше шума излучается из схемы. Хорошая практика - поддерживать медленную скорость нарастания и только увеличивать ее, если у вас есть определенная причина.

ответил Abhishek 22 AMpFri, 22 Apr 2016 09:58:46 +030058Friday 2016, 09:58:46
0

Еще один маленький бит: для микроконтроллеров, у которых нет явного режима «открытого стока», такого как платы AVR и Arduino ATmega328, такие как Uno, этот режим «открытого стока» может быть смоделирован путем записи функцию обертки, которая просто устанавливает вывод «Output LOW» при отправке 0 и который настраивает контакт как «Input LOW» (режим с высоким импедансом, внутреннее pullup-resistor NOT on), когда вы отправляете его 1. Таким образом, вы получаете тот же эффект. Эти современные 32-битные микроконтроллеры ARM-ядра имеют намного больше возможностей.

Кроме того, p146 Справочное руководство STM32, связанное с выше , содержит следующие [мои добавления в квадратных скобках] :

  

â € «Режим открытого стока:« ¼ »в регистре« Выход »активирует N-MOS [тем самым активно управляя LOW, подключая штырь к GND] , тогда как« â € œ1 »в выходной регистр выходит из порта в Hi-Z (P-MOS никогда не активируется) [режим с высоким импедансом - то же, что и плавающий вход без подтягивающих или выпадающих резисторов]

     

- Режим Push-pull: A-¼ в Регистре выходов активирует N-MOS [активно диски LOW, подключив вывод к GND] , тогда как «1» в выходной регистр активирует P-MOS [активно диски HIGH, подключив вывод к VCC]


В коде Arduino, что «функция-обертка» может быть реализована следующим образом:

digitalWriteOpenDrain(byte pin, bool state)
{
    if (state==LOW)
    {
        pinMode(pin, OUTPUT);
        digitalWrite(pin, LOW);
    }
    else //state==HIGH
    {
        pinMode(pin, INPUT);
        digitalWrite(pin, LOW);
    }
}

Или упрощено:

digitalWriteOpenDrain(byte pin, bool state)
{
    digitalWrite(pin, LOW);
    if (state==LOW)
    {
        pinMode(pin, OUTPUT);
    }
    else //state==HIGH
    {
        pinMode(pin, INPUT);
    }
}

Обратите внимание, что для включения внутреннего резистора подтягивания на Arduino вы можете:

pinMode(pin, INPUT_PULLUP);

ИЛИ (то же самое):

pinMode(pin, INPUT);
digitalWrite(pin, HIGH);
ответил Gabriel Staples 9 FebruaryEurope/MoscowbFri, 09 Feb 2018 03:42:39 +0300000000amFri, 09 Feb 2018 03:42:39 +030018 2018, 03:42:39

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132