Существует популярное заблуждение, что подтягивающие резисторы необходимы или обязательны на линиях в шине SPI. Я здесь, чтобы однозначно сказать вам, что подтягивающие резисторы не требуются на шине SPI для выполнения её основной функции передачи и приёма цифровых данных.
Буфер в интерфейсе SPI имеет топологию push-pull, которая (на высоком уровне) включает в себя переключающие MOSFET высокого и низкого уровня, фактически формируя инвертор CMOS. Как мы увидим в этой статье, наличие подтягивающих резисторов не оказывает влияния на функциональность шины push-pull.
Тем не менее, есть случаи, когда имеет смысл разместить подтягивающий резистор на шине push-pull, и в некоторых технических описаниях производитель компонентов может рекомендовать или требовать его. Мы рассмотрим эти ситуации и как это влияет на поведение вашей системы. Хотя могут быть более сложные решения, которые устраняют необходимость в подтягивающих резисторах в этих ситуациях, размещение подтягивающего резистора может быть решением, которое упрощает вашу конструкцию и обеспечивает страховку, что интерфейс будет работать правильно.
Давайте рассмотрим типичную модель буфера в интерфейсе SPI. Все буферы SPI имеют топологию толкатель-тягатель, которая состоит из коммутации на высокой и низкой стороне, которая передает сигнал на шину, и каждый сигнал в шине SPI (CS, MOSI, MISO и SCLK) будет иметь эту топологию. Пример такой схемы показан ниже. Обратите внимание, что реальный буфер SPI не так прост, как два транзистора MOSFET, но в общем случае применяется та же идея.
Инвертор CMOS в качестве драйвера SPI. Выход соединяется с дорожкой (представленной как сосредоточенные элементы) и схемой нагрузки (эквивалентная модель RC).
Основная причина использования этой топологии заключается в том, чтобы разрядные емкости в буферной схеме обеспечивали достаточно быстрые скорости нарастания и спада сигнала на выходе, которые будут значительно короче, чем период тактового сигнала на шине. Это то, что позволяет достигать более высоких скоростей передачи данных, чем в протоколе с открытым стоком (например, I2C).
SPI-шина, включающая подтягивающие резисторы, по сути, является драйвером инвертора CMOS с резистором, подключенным параллельно высокоомному полевому транзистору (FET) в выходном буфере. Теперь давайте посмотрим, что происходит в каждом состоянии переключения в драйвере, и мы сможем увидеть, что происходит на шине.
В состоянии логического ВЫСОКОГО уровня NMOS выключен, а PMOS включен. VDDIO теперь подает ток на подключенную дорожку и нагрузку. Емкость в дорожке и нагрузке начинает заряжаться до тех пор, пока напряжение на нагрузке не сравняется с VDDIO. Здесь сопротивление включенного PMOS составляет порядка мОм, в то время как подтягивающий резистор имеет порядок от 1 до 10 кОм. Очевидно, что подтягивающий резистор настолько велик, что по сути он короткозамкнут PMOS в состоянии ВЫСОКОГО логического уровня.
Поскольку весь ток течет через PMOS в состоянии ВЫСОКОГО логического уровня независимо от наличия подтягивающего резистора, характеристики переключения не будут затронуты.
Теперь рассмотрим, что схема перешла в состояние логического НИЗКОГО выхода. В этом состоянии NMOS включен, а PMOS выключен, так что след и емкость нагрузки разряжаются через NMOS в сеть GND. Поскольку PMOS выключен, он выглядит как очень высокое сопротивление (порядка МОм), что значительно больше, чем значение подтягивающего резистора (1 до 10 кОм).
Поскольку подтягивающий резистор в данном случае является меньшим, он позволит течь току величиной VDDIO/R(pu) к NMOS. Для подтягивающего резистора 1 до 10 кОм и VDDIO = 3,3 В, ток утечки в NMOS будет составлять 0,33 до 3,3 мА. Это значительно меньше, чем типичный ток SPI около ~50 мА, так что снова мы не заметим никаких эффектов на характеристиках переключения. Время спада на шине будет ограничено емкостями нагрузки и следа, выходным резистивным импедансом буферной схемы и сопротивлением включенного состояния NMOS.
Очевидно, размещение подтягивающего резистора на линии SPI не влияет на его способность передавать сигнал на шину. Следовательно, подтягивающий резистор должен выполнять какую-то другую функцию, не связанную с передачей данных, иначе резистор не использовался бы.
Причины использования подтягивающего резистора на одной или нескольких линиях в интерфейсе SPI различаются в зависимости от предполагаемой ситуации. Некоторые ситуации, при которых используются подтягивающие резисторы, включают:
Объяснение причин размещения в любой из этих ситуаций заключается в установлении логического состояния на одном из периферийных компонентов в шине. Наиболее распространенная рекомендация - разместить подтягивающий резистор на контакте CS периферийного устройства, чтобы подтянуть его к высокому уровню. Если у периферийного устройства есть активный низкий вход enable, то это всегда будет подтягивать контакт к высокому уровню, если только сторона драйвера не установит контакт в низкий уровень.
Пример такого использования показан ниже. На плате PCB резистор подтяжки должен быть размещен рядом с выводом CS этого периферийного устройства.
Типичное размещение резистора подтяжки на выводе CS шины SPI.
Почему это используется? Указанная причина заключается в том, что во время запуска системы вывод CS может находиться в любом состоянии и это создает риск, что шум может искажать данные на шине. Более того, если устройство-хост запускается раньше периферийного устройства и вывод CS становится активным непреднамеренно, хост может начать манипулировать данными в периферийном устройстве. Иногда это указывается как причина для установки подтягивающего резистора на периферийные устройства памяти.
На сегодняшний день я не могу найти убедительной причины для установки подтягивающего резистора на линию SCLK (часы). Причина в том, что логическая схема приемника не будет переключаться, если не выполнены другие условия (в частности, состояние линии CS), независимо от наличия сигнала тактовой частоты. Некоторые приложения и технические описания рекомендуют подтягивающие резисторы для MISO или MOSI по разным причинам, но проверить, работает ли это, просто, и резистор всегда можно отпаять, когда вы работаете с вашим прототипом.
Поскольку это чаще всего упоминается как проблема с состоянием вывода CS во время запуска системы, я думаю, что последовательность включения питания между периферийными устройствами и хостом системы будет лучшим подходом для предотвращения этой проблемы при запуске. В маленьких системах может не хватать места для установки нескольких регуляторов или для питающего устройства, которое может передавать необходимую мощность. Проще всего установить подтягивающий резистор, но понимайте, что эти подтягивающие резисторы не требуются для корректной работы интерфейса.
Независимо от того, нужно ли вам создать надежную электронику питания или передовые цифровые системы, используйте полный набор функций для проектирования печатных плат и мирового класса инструменты CAD в Altium Designer®. Для реализации сотрудничества в современной междисциплинарной среде инновационные компании используют платформу Altium 365™ для легкого обмена данными проектирования и запуска проектов в производство.
Мы только начали раскрывать возможности Altium Designer на Altium 365. Начните ваш бесплатный пробный период Altium Designer + Altium 365 сегодня.