Перейти к содержанию
    

SPI на 12 МГц через длинные провода

Добрый день!

 

Любительским образом разрабатываю устройство ввода-вывода для строительства "картонных кабин" для авиасимуляторщиков.

 

Непосредственно устройства ввода (кнопки, тумблеры, энкодеры) и вывода (светодиоды, 7-сегментные индикаторы) подключаются к сдвиговым регистрам ('165 и '595), регистры каскадированы и подключены к контроллеру, к SPI-порту через преобразователь уровней 3.3<->5 ADG3304 и инвертор '04 (нужен для инвертирования CS для '165.

Частота SPI выбрана равной 12 МГц из соображений производительности контроллера, периода опроса энкодеров и т.д.

 

Имеется разведенная плата, на ней - ветка из 8 '165 и 8 '595. Дальше шина оканчивается разъемом RJ-45, где имеется 4 сигнала и 4 "земли". Предполагается подключать дальше цепочкой следующие платы с регистрами(модули), делая таким образом длинную цепочку из сдвиговых регистров.

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

 

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

 

Как решение предполагаю установку подтягивающих к +5 резисторов, буфера типа '125 и проходных резисторов 20-50 ом. Аналогичную схему планирую также ставить на всех последующих модулях. Соединяться все это хозяйство будет неэкранированной витой парой CAT5, земля и сигналы будут перевиты.

 

Поскольку ни образования, ни опыта в высокочастотной электронике у меня нету, прощу помощь уважаемых знатоков - поможет ли затея с буфером и резисторами?

 

Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может стоит для такого случая LVDS-драйверы/приемники применить? По крайней мере сигналы, подаваемые на разъем, пробуферировать нужно в любом случае.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Достаточно сделать две вещи:

1. Клок от "мастера" размножить на буфере и завести на каждую плату СВОЙ.

2. В цепях данных и клока поставить полследовательные резисторы номиналом 82 Ом (для согласования с CAT5). Резисторы ставить строго на передающей стороне.

 

Да, еще. Желательно, в случае если провода от платы до платы будут длинными - выровнять по длине линии данных и клока.

 

Это конечно потребует несколько переделать то, что у Вас уже есть, но это единственное дешёвое и надёжное решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

rezident,alexander55

 

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

 

 

 

bms

Поскольку данные у меня как бы от крайнего регистра, то его надо змейкой пустить? И CS, наверное, тоже стоит так-же?

 

Про резисторы понял. Подтяг не нужно?

 

А вот про размножение клока - это сложно.... 4-парный кабель - это максимум 4 платы, т.е. на плате (при ограничении в 2048 регистров - это по 512 регистров на плату.... Либо делать плату размножителя клоков отдельную... В общем, буду думать, с точки зрения разъемов не очень понятно, как это сделать. Платы-то последовательно соединяются..

 

 

Спасибо большое за ответы!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

bms

Поскольку данные у меня как бы от крайнего регистра, то его надо змейкой пустить? И CS, наверное, тоже стоит так-же?

 

Про резисторы понял. Подтяг не нужно?

 

А вот про размножение клока - это сложно.... 4-парный кабель - это максимум 4 платы, т.е. на плате (при ограничении в 2048 регистров - это по 512 регистров на плату.... Либо делать плату размножителя клоков отдельную... В общем, буду думать, с точки зрения разъемов не очень понятно, как это сделать. Платы-то последовательно соединяются..

Спасибо большое за ответы!!!

 

Размножать клок можно непосредственно на плате. Схематично вариант такого размножения показан на рисунке. Ставите на входе каждой платы буфер-повторитель, через него заводите на регистры данные и размножаете клоки. Один из клоков и данные с последнего регистра выводите во внешний мир через резисторы согласования. Таким образом можно соединить сколько угодно плат.

 

Резисторы подтяжки не нужны.

Выравнивание клока и данных в этом случае получится автоматически - т.к. всё это будет передаваться через один 4-х парный кабель.

Важно данные и клок протаскивать через один и тот же корпус буфера, т.е. берёте например счетверённый буфер, как на рисунке. Нельзя использовать разные корпуса (например не счетверённый корпус, а четыре отдельных корпуса), поскольку в этом случае разные корпуса будут иметь разные задержки и при большом числе плат данные и клок могут сильно "разъехаться" во времени. А в пределах одного (счетверённого например) корпуса задержки по всем буферам будут одинаковые.

post-7545-1195678011_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

времени. А в пределах одного (счетверённого например) корпуса задержки по всем буферам будут одинаковые.

 

А данные, прошедшие через SPI устройство, пройдут с нулевой задержкой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А данные, прошедшие через SPI устройство, пройдут с нулевой задержкой?

Добавлю еще, что даже при задержках "скомпенсированных" на многочисленных буферах СLK и MOSI проблема разбега CLK и MISO стоит в полный рост, ибо составляет суммарную задержку передачи CLK туда и MISO обратно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавлю еще, что даже при задержках "скомпенсированных" на многочисленных буферах СLK и MOSI проблема разбега CLK и MISO стоит в полный рост, ибо составляет суммарную задержку передачи CLK туда и MISO обратно.

Да, конечно.

Вот простой расчетик.

При длине кабеля 2 м, сигнал проходит растояние 4 м.

Если сигнал распространяется со скоростью света 300 т.км/с, задержка составит 13,3 нс.

Если учесть индуктивность кабеля и задержки чиповые (3-10 нс), то это значение может удвоиться-утроиться.

Прикиньте, какой это фазовый сдвиг на 12 МГц. Более четверти до половины периода.

Уже есть над чем задуматься. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, конечно.

Вот простой расчетик.

При длине кабеля 2 м, сигнал проходит растояние 4 м.

Если сигнал распространяется со скоростью света 300 т.км/с, задержка составит 13,3 нс.

Если учесть индуктивность кабеля и задержки чиповые (3-10 нс), то это значение может удвоиться-утроиться.

Прикиньте, какой это фазовый сдвиг на 12 МГц. Более четверти до половины периода.

Уже есть над чем задуматься. :)

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения за нескромный вопрос, но может быть существуют какие-то устоявшиеся решения проблемы с разбегом? Или SPI совсем не предназначен для таких дел?
Приходит в голову использование для приема второго SPI в режиме slave, на который подается CLK с того же регистра, с которого и снимается MOSI. Остается вопрос - где взять еще одну пару в кабеле. А еще могу порекомендовать книжку "Синхронизация в телекоммуникационных системах" - там много интересных решений описано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или SPI совсем не предназначен для таких дел?

Не предназначен.

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

Устоявшиеся :). Для случаев, когда нужно пропускать/буферизировать десяткомегагерцовые SPI использую, например, 9bit посылки при этом лишний бит и лишний такт используется для компенсации задержки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не предназначен.

 

Устоявшиеся :). Для случаев, когда нужно пропускать/буферизировать десяткомегагерцовые SPI использую, например, 9bit посылки при этом лишний бит и лишний такт используется для компенсации задержки.

 

Интересный ход. А как при этом определить, в каком бите у нас что пришло?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Устоявшегося (или устоявшевося) решения нет (готового). SPI - это синхронный интерфейс для SWAP. Его преимущество проявляется при близком расположении SPI-устройств (на одной плате или набираемом блоке).

PS. При больших длинах посмотрите в сторону снижения CLK.

Или изменения алгоритма функционирования (например, аппаратного SPI с учетом задержек от каждого SPI)

или вариант Сергея.

 

Интересный ход. А как при этом определить, в каком бите у нас что пришло?

Да, Вам zltigo предложил классный вариант (можно сказать, гениальный).

Используйте тестовую посылку для выявления где мухи, где котлеты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересный ход. А как при этом определить, в каком бите у нас что пришло?

На "трансляторе" производится стробирование принимаемых данных входной тактовой и таким образом вносится гарантированный сдвиг ровно на один бит. Передавать будете в первых восьми битах а принимать в последних восьми.

 

 

P.S.

А вообще так SPI c TTL уровнями использовать это махровое радиолюбительство :(.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...