Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Длина SPI?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
Tarakanich
Прошу прощения если вопрос глупый... Ни в одном описании не нашел длины линии связи, подозреваю что не велика. Хочется около 5 МГц. Если да, то какой кабель и разъем использовать, если нет, то какие альтернативы?
Artem_Petrik
Цитата(Tarakanich @ Nov 29 2008, 06:12) *
Прошу прощения если вопрос глупый... Ни в одном описании не нашел длины линии связи, подозреваю что не велика. Хочется около 5 МГц. Если да, то какой кабель и разъем использовать, если нет, то какие альтернативы?

У меня SPI без проблем ходит по кросс-плате 19" корзины (~40см). На платах правда стоят буфера рядом с разьемами. Скорость примерно такая же. Так что проблем быть не должно.
Что касается кабеля: шлейф и разьемы IDC - дешево и сердито smile.gif .
rezident
Цитата(Tarakanich @ Nov 29 2008, 07:12) *
Ни в одном описании не нашел длины линии связи, подозреваю что не велика. Хочется около 5 МГц.
Длина линии связи зависит от нескольких факторов, поэтому прямо так в документации не регламентируется. Попробую построить объяснение "на пальцах" smile.gif
Представьте себе одиночный импульс который был сгенерирован на одном конце линии и "прибежал" на другой конец. У него есть два варианта: полностью поглотиться в нагрузке приемника, либо частично или полностью отразившись "убежать" назад к источнику сигнала. В свою очередь у источника сигнала его никто не ждет и принимать не желает, поэтому импульс "бежит" опять к приемнику сигнала. И т.д. было до бесконечности, если бы в линии связи не было затухания и на концах линии сигнал бы частично не поглощался.
Чем это плохо? А тем, что вместо одного импульса на входе приемника получаем их множество, "прибежавших" ко входу с различной задержкой. Задержка определяется тем, что скорость ЭМ волны (скорость света) является вовсе не бесконечной величиной. Так что время задержки будет зависеть впрямую от длины линии. Амплитуда повторных импульсов будет зависеть от степени затухания сигнала в линии и от согласования импеданса линии и входа приемника. Слишком больше затухание делать нельзя, потому что тогда импульс может быть настолько ослаблен, что вход приемника его уже не сможет воспринять. А вот уравнять импедансы линии и входа это наипервейшая задача, которую к сожалению не всегда можно сделать впрямую. Если их импеданс очень близкий, то энергия всего импульса поглотится нагрузкой и отраженка будет слабой или отсутствовать. Но ведь входное сопротивление у современной логики весьма высокое, а у линии связи волновое сопротивление обычно невысокое. Если втупую зашунтировать вход сопротивлением близким к волновому сопротивлению линии, то выходной каскад передатчика может и не "прокачать" его. Тогда нужно будет дополнительно буферировать выходной сигнал. Лучше всего в таком случае использовать сбалансированный (дифференциальный) интерфейс, который проще поддается согласованию. Оправдано это или нет см. ниже.
Как все это проявляется? Когда на входе устройства присутствует два или более импульса вместо одного "истинного" то, естественно могут возникнуть сбои в передаче. Поскольку вы используете синхронный интерфейс (SPI), то наверняка знаете, что в нем данные передаются на выход синхронно с одним фронтом, а "защелкиваются" на входе по другому фронту тактового сигнала. Сбои в отношении тактового сигнала проявляются как ложное защелкивание данных вследствие того, что приемник "не знает" какие импульсы "истинные", а какие возникли вследствие отраженки. Аналогично с данными. Фронт изменения потенциала на линии данных может многократно отражаться бегая по линии туда-сюда и в результате к моменту прихода (истинного) фронта тактового сигнала может "защелкнуться" не новое, а старое состояние линии данных.
Как с этим бороться? Для начала следует оценить все "опасности". Для примера возьмем длину линии из сообщения Artem_Petrik (40см) и вашу частоту (5МГц). Отраженный сигнал в линии данных должен пробежать туда-сюда 2*0,4м со скоростью 3*10^8м/с, поэтому он будет запаздывать на 2*0,4м/(3*10^8м/с)=2,67нс. Фронт по которому будут защелкнуты данные придет через 1/2*1/5МГц=100нс. Т.е. в этот промежуток времени может сравнительно "безопасно" "прибежать" до 37 переотраженных импульсов. Понятно, что в реальности столько не будет. Во-первых, у реальной линии есть свой импеданс (даже у дорожки на печатной плате и то индуктивность порядка 10нГн/1см, не говоря уже о каком-нибудь ленточном кабеле на котором защелкнуты разъемы IDC). А во-вторых, у выхода, от которого сигнал будет переотражаться, сопротивление обычно весьма небольшое (в отличие от высокоимпедансного входа), поэтому амплитуда отраженного сигнала будет там ослаблена. Так что при таких данных 2-3-4 отраженных импульса (достаточной по амплитуде для срабатывания входной логики приемника величине) на шине данных нам ничего не испортят. Но ведь такие же импульсы могут быть и на линии тактирования! Да, но давайте смотреть, какая логика у нас на входе? Она вообще способна реагировать на импульсы длительностью 2,67нс? Если нет, то неплохо, если же да, то имеем проблему. Можно попробовать заменить ее на логику с меньшим быстродействием. Например, вместо 74AC04 тут будет предпочтительнее 74HC04. Распиновка и диапазон напряжений питания такие же, а быстродействие ниже, что в данном случае нам на руку. Для увеличения затухания в линии также применяют последовательное включение (с линией) резисторов номиналом от десятков до сотни Ом. Резистор вносит потери в добротность линии связи и способствует более быстрому затуханию амплитуды переотраженных импульсов.
Все вышеизложенное только одну часть проблемы освещает - процессы в самой линии. Но ведь существует еще и внешнее воздействие на линию связи. А вот как бороться с внешними ЭМИ, читайте, например, в статье Алексея Кузнецова "Помехоустойчивые устройства".
P.S. извиняюсь, если что-то непонятно или нелогично изложил. Вопрос-то не такой уж простой, чтобы вот так "галопом по Европам" можно было его полно и понятно осветить laughing.gif Просто ответы типа такого что дал Artem_Petrik (это не наезд и не попытка оскорбления!) "у меня на ~40см в 19" стойке работает" в общем-то ничего не гарантируют и не объясняют, почему именно работает или не работает. cool.gif
Artem_Petrik
Цитата(rezident @ Nov 30 2008, 00:43) *
....


Вот это я понимаю ответ!!! a14.gif Огромное спасибо за разъяснение от имени всех новичков ( себя правда к ним не отношу biggrin.gif )

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

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

Все же считаю, что 5МГц @ 10см - далеко не те условия, при которых уже нужно заморачиваться по поводу согласования. Хотя признаюсь что на всякий пожарный согласующий резистор 33 ома у меня возле выхода SCK стоит. wink.gif
rezident
Цитата(Artem_Petrik @ Nov 30 2008, 02:07) *
Хочется только отметить, что фраза

не совсем корректна, так как коэффициент отражения от короткозамкнутого выхода, также как и от открытого равен еденице. Тоесть амплитуда отраженного сигнала в этом случае ослаблена не потому, что там сопротивление "весьма небольшое", а потому что оно значительно сильнее отличается от 0, чем сопротивление высокоимпедансного входа - от бесконечности. В идеале нужно, чтобы внутреннее сопротивление выхода равнялось волновому сопротивлению линии передачи. Обычно приходится еще и резистор ставить, чтоб его увеличить.
ОК. Принято.
Цитата(Artem_Petrik @ Nov 30 2008, 02:07) *
Все же считаю, что 5МГц @ 10см - далеко не те условия, при которых уже нужно заморачиваться по поводу согласования.
Согласен. Просто ваш ответ меня не удовлетворил, а свой коротким не получился smile.gif
Цитата(Artem_Petrik @ Nov 30 2008, 02:07) *
Хотя признаюсь что на всякий пожарный согласующий резистор 33 ома у меня возле выхода SCK стоит. wink.gif
Ну вот видите! А ведь процесс дознания еще и не начинался biggrin.gif
zltigo
Цитата(Artem_Petrik @ Nov 30 2008, 00:07) *
Хотя признаюсь что на всякий пожарный согласующий резистор 33 ома у меня возле выхода SCK стоит. wink.gif

Это называется "слышал звон, но не знает, где он" sad.gif - последовательный резистор именно на тактовом сигнале, а не на данных, есть хороший способ получить гимморой, ибо приводит к немонотонному фронту сигнала. Весь вопрос, на каком уровне получите ступеньку. Для клоков выбирать оптимальный драйвер и согласовывать нагрузку у приемника сигнала классическим резистивным делителем между питанием и землей.
Цитата
Все же считаю, что 5МГц @ 10см - далеко не те условия, при которых уже нужно заморачиваться по поводу согласования.

Для не считающих себя начинающими smile.gif - имеет значение соотношение длительности фронта импульса и времени распространения. Длительность фронта меньше времени распространения до приемника - получаете "длинную линию".
Tarakanich
Artem_Petrik rezident и zltigo огромное спасибо! Такого ответа даже и не ожидал! a14.gif Благодарности нет предела!
zltigo обязательно учту.
Artem_Petrik
Цитата(zltigo @ Nov 30 2008, 02:42) *
Это называется "слышал звон, но не знает, где он" sad.gif - последовательный резистор именно на тактовом сигнале, а не на данных, есть хороший способ получить гимморой, ибо приводит к немонотонному фронту сигнала. Весь вопрос, на каком уровне получите ступеньку. Для клоков выбирать оптимальный драйвер и согласовывать нагрузку у приемника сигнала классическим резистивным делителем между питанием и землей.

Если вы о том, что последовательное согласование у драйвера не подходит для тактовых сигналов вообще, то я пожалуй с вами не соглашусь. Гиморрой можно получить где угодно, главное знать как smile.gif
В моем случае все нормально, можете не беспокоиться. Фронт сигнала достаточно крут, кроме того буфер его еще корректирует.

Цитата
Для не считающих себя начинающими smile.gif - имеет значение соотношение длительности фронта импульса и времени распространения. Длительность фронта меньше времени распространения до приемника - получаете "длинную линию".

Спасибо за поправку, тут я конечно неточен. Правда и вы тоже smile.gif. Как уже отметил resident имеет значение не столько длительность фронта импульса, сколько быстродействие микросхемы приемника. Будь у меня длительность фронта хоть пикосекунда, если оно идет на логику серии HC, то для определения "длииности линии" стоит отталкиваться от времен порядка 5нс.
IhorOs
на днях столкнулся с проблемой нестабильной передачи по spi.

что имелось, что наблюдалось и как решалось.
контролер avr 8515, соотв. частота такта spi 1 мгц. Связь с платами через кабель длинной 25 см, на платах всякого вида перефирия (dac, adc, регистры) - никаких проблем.
но вот при попытке связать два уже два контроллера (каждый на своей плате)- наблюдались редкие сбои при передаче.
Изначально соединялся arm7 at91rm3400 с avr atmega8535 (arm7 ведущий, avr - ведомsq). Когда с целью исследования соединили плату того же 8515 в качестве ведущего, который стабильно работал с перефирией - ситуация повториласть, то есть наблюдались редкие сбои.

Когда посмотрели осциллографом на сигналы - на приемном конце после фронтов наблюдались 2-3 периода затухающих колебаний амплитудой 100..200 mv и периодом 10..15 нс. Вопрос о некорректном подключении щупов (например, земли по идиотски) был снят, так так на передающем конце таких выбросов не было.

Рабочая версия была, что реально выбросы ("пики") малость больше, но просто наличный осцилограф и щупы не позваляли их наблюдать.
Выличели тем, что на приемном конце клоки пропустили через интегрирующую цепочку из 22 омного резистора включенного в разрыв и коненсатора 33 пф, включенного на землю. Способ лечения как бы подтверждает версию о "пичках".
То, что соотв. проблемы не наблюдали на плате с перифирией - списали на то, что приемник spi в перефирии более медленный чем в контролере и на пички уже не реагировал. ну или просто там плата более по человечески разведена...

zltigo:
> последовательный резистор именно на тактовом сигнале, а не на данных, есть хороший способ получить гимморой, ибо приводит к немонотонному фронту сигнала.


Не совсем так. Всякие выбросы на даных наблюдались после фронтов на даный, когда клоки в неактивном состояниии, во время активного фронта клока сигнал на данных уже был чист, посему біло принято решение с линией данных ничего не делать. Это во первых. во вторых - интегрирующая цепочка по клоках ну никак не нарушает моннотоности фронта, даже наоборот (убирает переходные выбросы). Другое дело, что она несколько уменшает крутизну фронта. Но для соотв. постоянной времени цепочки уменшения крутизны фронта было признано допустимым.
Что и подтвердила практика.


пс. если бы кабеля былы бы сделаны немного по человечески, то есть, к примеру, сигнальные провода чередовались с заземляющими, то вероятнее всего, никаких трабл не было бы. Но посколькуо кабеля были сделаны особо талантливо и возможности их переделать пока не было - сделали так, как сделали.
zltigo
Цитата(IhorOs @ Dec 9 2008, 12:30) *
Другое дело, что она несколько уменшает крутизну фронта. Но для соотв. постоянной времени цепочки уменшения крутизны фронта было признано допустимым.

Вопросы получения из клоков хрензнаетчего путем очень очень большого (по сравнению с исходной длительностью фрона) из завала НА ПРИЕМНОЙ СТОРОНЕ с целю подавить внешние помехи и последующей степени работоспособности чего-либо от таких клоков на к теме обсуждения отношени не имеют.
GetSmart
IhorOs, у меня бывали похожие глюки из-за неправильных настроек SPI. Тем более если общаются процы разных типов. Это может быть банальное соревнование фронтов, когда слэйв меняет данные не на том фронте клока, а если клок чуток затормозить RC-цепочкой, то вроде бы проблема исчезает. На 25 см проводах вообще никаких глюков не должно быть, тем более на 1 МГц. Такую низкую скорость можно и на метр делать. Хотя где-то читал, что TTL сигналы дальше 30 см не рекомендуется тянуть, но на невысоких скоростях это можно обойти например RC-цепочками и триггерами шмитта. 1 МГц SPI можно даже на сто метров передавать через 485 драйвера и витую пару.
Zman
по моему опыту:
Соединял несколько плат стнадартным плоским кабелем и разъёмами IDC, в одном шлейфе и сигналы и питание. Питание на обоих платах 3.3в, сигналы чередуются с земляными проводами, на входах и выходах стоят триггеры Шмидта (SN74LVC2G14DBVRG4, SN74LVC14APW). Частота клока SPI 1.8Мгц, проверял работу на кабеле 3.5м (хотя реально надо не более 50см), работает абсолютно без сбоев, на скопе тоже не видно никаких "завихрений", звона итд... присутствует небольшая ёмкость, но она нейтрализется ТШ.. большое значение имеет разводка земли.

ставить последовательные резисторы и доп. кондёры считаю шаманством... коллега на старой плате долго возился таким образом - подбирал сопротивление, глюки то пропадали, то появлялись в зависимости от фазы луны и настроения... короче неконструктивно это всё...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.