Рекомендации по окончанию шины SPI

Итак, в моем предыдущем вопросе я спрашивал об использовании шины SPI на небольшом расстоянии для связи между платами. Мне порекомендовали попробовать согласующие резисторы. Поставил резистор близко к месту назначения (но не точно там, там было расстояние 1 см) и заземлил его. (Поскольку на этой плате не было следов согласующего резистора, мне пришлось импровизировать. Я не мог припаять резистор к устройству, так как это TQFP с тонкими выводами.)

Из некоторых базовых тестов я обнаружил, что резистор на 1 кОм едва снижает перерегулирование. 470 Ом и 180 Ом работали лучше. Чем ниже я опускался, тем лучше это работало. При 180 Ом перерегулирование составляло около вольта или чуть меньше.

Теперь, к сожалению, я не могу опуститься намного дальше, потому что ток больше, чем может выдержать мой MCU. Я решил проблему на текущей версии платы, используя последовательно сопротивление 330 Ом. Это довело выброс до 3,7 В, а время нарастания составило 10 или 11 нс. Но мне бы очень хотелось "правильного" решения на следующей ревизии. Мои требования к частоте остались прежними: 2 МГц, но я бы предпочел 4 МГц.

Поэтому я почувствовал, что должен спросить здесь: в следующей ревизии платы, должен ли я размещать мощные буферы на линиях? Найти буфер на самом деле не проблема, но потребляемый ток значительно увеличится - у меня есть 8 устройств на SPI, которые нуждаются в терминации, и к каждому идут 3 линии, которые всегда активны. Например, SCK идет на все 8 устройств. Каждое устройство будет иметь, скажем, согласующий резистор на 100 Ом. Таким образом, потребляемый ток составляет 12 * 3,3/100 = 390 мА!

Итак, что является лучшим средством здесь? Должен ли я использовать «активное окончание», используя диоды Шоттки в качестве зажимов?

РЕДАКТИРОВАТЬ: Что касается импеданса линии: как я уже упоминал ранее, намерение состоит в том, чтобы подключить 4 внешние платы. Расстояние между колодками одинаковое для всех (12 дюймов). Тем не менее, есть также устройства на той же плате, что и MCU, но они не нуждаются в согласовании — длина составляет около дюйма (или меньше) и очень небольшое превышение (300 мВ). Дорожки, идущие к внешним платам, имеют примерно одинаковую длину и ширину. 2-й слой на моей плате — это непрерывный заземляющий слой.

Распространенным методом является установка последовательного резистора, соответствующего импедансу линии. Попробуйте что-то вроде последовательной нагрузки 50 Ом. Было бы полезно, если бы вы разработали свои дорожки и соединения с фиксированным импедансом. Попробуйте более низкие последовательные окончания и посмотрите, что вы найдете. Он предложил терминировать на землю 32 Ом, вы можете сделать это с гораздо меньшей мощностью, ну, на 3 дБ меньше, подключив 64 Ом к шине питания и 64 Ом к шине заземления.
@Kortuk Резистор на 32 Ом, к сожалению, существенно не уменьшил перерегулирование. Тем не менее, отпечаток также был не в том месте (он никогда не предназначался для использования в качестве терминатора), а не в источнике, так что, возможно, это он, я не уверен. Что касается импеданса линии, все линии имеют примерно одинаковую длину и ширину. Все они проходят по полной плоскости земли, которая находится на 2-м слое.
Окончание серии находится в источнике, если вы поместите его в нагрузку, он ничего не сделает. Попробуйте подключить 50 Ом прямо к источнику последовательно, чтобы увидеть эффект.
Вы можете думать об этом, как описал stevenvh, есть вся линия, действующая как конденсатор, и этот резистор действует как R с ним для нижних частот, если вы думаете об этом как о модели с сосредоточенными параметрами. Согласованный резистор там, если вы посмотрите на модель линии передачи, означает, что у вас есть половина пути амплитуды волны, а затем, когда он достигает другого конца и отражается, он достигает полного значения.

Ответы (5)

Говорить о прекращении сигнала — все равно, что открывать банку с червями. Это ОГРОМНАЯ тема, которую трудно обобщить всего в паре сотен слов. Поэтому не буду. Я собираюсь оставить огромное количество вещей из этого ответа. Но я также дам вам большое предупреждение: в сети много дезинформации о согласующих резисторах. На самом деле, я бы сказал, что большая часть того, что можно найти в сети, неверна или вводит в заблуждение. Когда-нибудь я напишу что-нибудь большое и опубликую в своем блоге, но не сегодня.

Первое, что нужно отметить, это то, что значение резистора, используемого для согласования, должно быть связано с импедансом вашей трассы. Большую часть времени значение резистора совпадает с импедансом вашей трассы. Если вы не знаете, что такое импеданс трассы, вам следует выяснить это. Существует множество онлайн-калькуляторов импеданса . Поиск в Google выдаст еще десятки.

Большинство дорожек на печатных платах имеют импеданс от 40 до 120 Ом, поэтому вы обнаружили, что согласующий резистор номиналом 1 кОм почти ничего не дает, а резистор на 100 Ом работает намного лучше.

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

Ваша терминация, один резистор для заземления на дальнем конце, на самом деле не очень хороша. На самом деле, это неправильно. Люди делают это, но это не идеально. В идеале этот резистор должен подключаться к другой шине питания на половине вашей шины питания. Таким образом, если напряжение ввода-вывода составляет 3,3 В, то этот резистор не будет подключен к GND, а будет подключен к другой шине питания на половине 3,3 В (или 1,65 В). Регулятор напряжения для этой шины должен быть особенным, потому что он должен вырабатывать и потреблять ток, в то время как большинство регуляторов только вырабатывают ток. Регуляторные органы, которые работают для этого использования, упомянут что-то о заделке на первой странице таблицы данных.

Большая проблема с большинством терминаторов заключается в том, что они потребляют много тока. На это есть причина, но я не буду вдаваться в нее. Для слаботочного использования мы должны смотреть на терминацию источника. Самая простая и наиболее распространенная форма согласования источника — это простой последовательный резистор на выходе драйвера. Значение этого резистора такое же, как импеданс дорожки.

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

Я уже говорил, что ваш последовательный резистор для согласования источника должен быть расположен на драйвере, и его значение должно быть таким же, как импеданс вашей дорожки. Это было упрощением. Есть одна важная деталь, которую нужно знать об этом. Большинство драйверов имеют некоторое сопротивление на выходе. Это сопротивление обычно находится в диапазоне 10-30 Ом. Сумма выходного сопротивления и вашего резистора должна равняться импедансу вашей дорожки. Допустим, ваша трасса 50 Ом, а ваш драйвер 20 Ом. В этом случае ваш резистор будет 30 Ом, так как 30 + 20 = 50. Если в спецификациях не указано выходное сопротивление/сопротивление драйвера, вы можете предположить, что оно равно 20 Ом, а затем посмотреть на сигналы на печатной плате и посмотреть, не нужно ли их отрегулировать.

Еще одна важная вещь: когда вы смотрите на эти сигналы на оскопе, вы ДОЛЖНЫ зондировать приемник. Зондирование в любом другом месте, скорее всего, даст вам искаженную форму волны и заставит вас думать, что все хуже, чем есть на самом деле. Кроме того, убедитесь, что ваш заземляющий зажим как можно короче.

Вывод: переключитесь на терминацию источника с резистором от 33 до 50 Ом, и все будет в порядке. Применяются обычные предостережения.

Давид, большое спасибо за исчерпывающий ответ. Все это имело смысл, но я думаю, что в моей системе есть еще одна сложность - линии SPI идут от одной платы к другой. Таким образом, оценка импеданса линии может быть затруднена - сигнал проходит около 3 дюймов по основной плате, проходит через 6-дюймовый плоский кабель, а затем снова проходит по 3-дюймовой дорожке, пока не достигнет места назначения. Провода ленточного кабеля чередуются. земля (например, SCK, GND, MOSI, GND и т. д.) Ваша рекомендация 30-20 Ом остается в силе?
@Saad Что я делал в подобных случаях (и я делал это много раз), так это использовал один резистор в драйвере и настраивал его значение после создания прототипа. Это компромисс, но он работает. На самом деле у меня сейчас есть несколько систем, которые используют SPI по 1-футовым кабелям с 3-6-дюймовыми дорожками на каждой печатной плате. Некоторые из них работают на частоте 30 МГц! Да, начните с 33 или 47 Ом и настраивайте оттуда.
+1 уже, но схема, показывающая, как подключить терминатор источника (т.е. последовательно, а не от линии к земле), была бы очень полезна.
Ваша ссылка на калькулятор больше не работает, к вашему сведению
Почему вы можете предположить, что выходное сопротивление/сопротивление равно 20 Ом?

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

Ваша тактовая частота не так высока, поэтому частоты, которые вам нужны для поддержки даже скорости передачи 4 МГц, не вызывают проблем. Проблема в том, что у вас есть быстрые фронты, управляющие линиями, которые имеют гармоники в сотнях МГц, что действительно вызывает проблемы. На желаемых частотах у вас есть система с сосредоточенными параметрами, а не линия передачи. Это значительно упрощает дело.

Таким образом, решение состоит в том, чтобы ослабить высокие частоты, которые вам на самом деле не нужны, но вызывают проблемы. Это можно сделать с помощью простого RC-фильтра нижних частот сразу после всего, что управляет линией. Частично это то, что сейчас делают резисторы на 330 Ом. Они образуют фильтр нижних частот с паразитной емкостью линии. Очевидно, этого недостаточно и/или недостаточно предсказуемо. Это можно исправить с помощью преднамеренной емкости на каждой линии.

Вы хотите запустить шину на частоте 4 МГц, что означает, что самый быстрый сигнал, который она должна поддерживать, — это прямоугольная волна 4 МГц. Это означает, что длина каждого уровня составляет 125 нс. Допустим, мы хотим, чтобы это было как минимум 4 постоянные времени, что подразумевает 98% времени установления. Это означает, что максимальная постоянная времени, которую мы хотим разрешить, составляет 31 нс. 31 нс / 330 Ом = 94 пФ. Это полная нагрузка на резисторы серии 330 Ом, необходимая для получения постоянной времени 31 нс. Всегда будет какая-то паразитная емкость, которую вы не можете предсказать, поэтому я бы посмотрел, как все будет выглядеть с 47 пФ. Это оставляет место для 10-20 пФ скрытой емкости, не превышая максимально допустимую постоянную времени.

Последовательные резисторы должны быть как можно ближе ко всем контактам, управляющим шиной. Это предполагает, что все остальные контакты на шине будут входами CMOS, когда один из них будет работать. Для линий, которые когда-либо управляются только одним контактом (например, линия синхронизации, которая управляется только мастером), поместите 47 пФ как можно ближе после резистора. Для линий, которые могут управляться разными контактами в разное время (например, MISO), поместите 47 пФ где-то в середине всех драйверов. Каждая линия получает только один конденсатор на 47 пФ, независимо от того, сколько драйверов, но есть один резистор для каждого драйвера.

Приведенные выше расчеты предназначены для того, чтобы стать хорошим руководством для начала. Некоторые параметры не могут быть известны и поэтому учитываются заранее. Начните с 330 Ом последовательно и 47 пФ на землю, но не бойтесь что-то менять на основе реальных наблюдаемых результатов.

В отсутствие какой-либо терминации, когда сигнал отправляется от источника с очень низким импедансом к приемнику с очень высоким импедансом, сигнал будет многократно отражаться туда и обратно; фаза сигнала будет перевернута на 180 градусов при каждом проходе туда и обратно.

Если кто-то не хочет, чтобы сигналы отражались, когда они достигают пункта назначения, можно использовать конечное завершение. Это приведет к тому, что сигнал будет чисто поглощаться в месте назначения без отражения, но во многих распространенных реализациях источник будет видеть значительную нагрузку постоянного тока.

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

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

Моделирование здесь демонстрирует это. Он включает в себя генератор импульсов, который генерирует цепочку импульсов примерно 49 раз в секунду, две последовательно соединенные линии задержки 5 мс (время приема-передачи 1/50 секунды) и переключаемые согласующие резисторы на обоих концах.

Схема включает три переключателя SPDT; нажмите на один, чтобы изменить его состояние. Нижние два переключателя управляют завершением источника и назначения. Для них «вверх» означает хорошее завершение, а «вниз» — плохое. Верхний переключатель определяет, должна ли линия управляться автоматическим генератором импульсов или ручным логическим входом. Чтобы отправить импульсы по линии вручную, переведите верхний переключатель «вниз», а затем часы «L» рядом с ним.

Сигналы, достигающие пункта назначения, будут чистыми, если источник или пункт назначения правильно завершены. Если оба подключены правильно, напряжение принимаемого сигнала будет составлять половину напряжения возбуждения. Если один подключен правильно, а другой нет, полученное напряжение будет составлять около 91% от напряжения возбуждения («плохие» резисторы «неправильные» в десять раз и, таким образом, не могут поглотить около (10/11). энергии). Если ни один из них не завершен, полученное напряжение будет первоначально примерно в 1,656 раза больше напряжения привода, но странные отражения будут появляться каждые 20 мс.

Попробуйте оконечную нагрузку переменного тока (например, конденсатор 470 пФ последовательно с резистором 110 Ом) и соедините эту комбинацию последовательностей на выходе назначения SPI Clock с землей. Завершение будет потреблять около 30 мА в течение времени фронта, что он может легко сделать, но в противном случае ток будет нулевым. Для двунаправленной линии данных все немного сложнее. Я установил оконечную нагрузку переменного тока 470 пФ, 220 Ом как на ведущий, так и на подчиненный конец линии данных SPI, и это работает, т. е. приемлемое превышение и недорегулирование.

Я приветствую комментарии по этому поводу.

Не вдаваясь в подробности, так как предыдущие посты попали в самую точку. Это сводится к тому, что SPI является несбалансированными линиями. Даже если у вас низкая тактовая частота, необходимо учитывать быстрые фронты ns. В моем случае был найден резистор 470 Ом последовательно с линией SPI CLK на стороне Master. Удалив этот резистор и реализовав решение, рекомендованное для несбалансированных линий из решетки, и предложения, опубликованные выше (я смог реализовать только половину решения со стороны ведомого устройства, соответствующим образом настроив колпачки фильтра), я смог увеличить длину моего ленточного кабеля связи SPI от От 10 см до 160 см без ошибок связи:

Повышение помехозащищенности последовательного интерфейса : информационный документ о решетчатых полупроводниках (июль 2014 г.)

Изменить: исходная ссылка больше недействительна; указанный документ остается доступным для загрузки с сайта Lattice Semiconductor здесь .