реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> SPI на 12 МГц через длинные провода
Kitsok
сообщение Nov 20 2007, 17:41
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Добрый день!

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

Непосредственно устройства ввода (кнопки, тумблеры, энкодеры) и вывода (светодиоды, 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, земля и сигналы будут перевиты.

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

Заранее спасибо!
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 20 2007, 18:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Может стоит для такого случая LVDS-драйверы/приемники применить? По крайней мере сигналы, подаваемые на разъем, пробуферировать нужно в любом случае.
Go to the top of the page
 
+Quote Post
bms
сообщение Nov 20 2007, 20:25
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 11-08-05
Пользователь №: 7 545



Достаточно сделать две вещи:
1. Клок от "мастера" размножить на буфере и завести на каждую плату СВОЙ.
2. В цепях данных и клока поставить полследовательные резисторы номиналом 82 Ом (для согласования с CAT5). Резисторы ставить строго на передающей стороне.

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

Это конечно потребует несколько переделать то, что у Вас уже есть, но это единственное дешёвое и надёжное решение.
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 21 2007, 06:39
Сообщение #4


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Рекомендую посмотреть
http://www.gaw.ru/html.cgi/txt/interface/lvds/lvds.htm
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 21 2007, 07:50
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



rezident,alexander55

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



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

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

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


Спасибо большое за ответы!!!
Go to the top of the page
 
+Quote Post
bms
сообщение Nov 21 2007, 20:47
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 11-08-05
Пользователь №: 7 545



Цитата(Kitsok @ Nov 21 2007, 10:50) *
bms
Поскольку данные у меня как бы от крайнего регистра, то его надо змейкой пустить? И CS, наверное, тоже стоит так-же?

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

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


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

Резисторы подтяжки не нужны.
Выравнивание клока и данных в этом случае получится автоматически - т.к. всё это будет передаваться через один 4-х парный кабель.
Важно данные и клок протаскивать через один и тот же корпус буфера, т.е. берёте например счетверённый буфер, как на рисунке. Нельзя использовать разные корпуса (например не счетверённый корпус, а четыре отдельных корпуса), поскольку в этом случае разные корпуса будут иметь разные задержки и при большом числе плат данные и клок могут сильно "разъехаться" во времени. А в пределах одного (счетверённого например) корпуса задержки по всем буферам будут одинаковые.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
gte
сообщение Nov 22 2007, 07:24
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613



Цитата(bms @ Nov 21 2007, 23:47) *
времени. А в пределах одного (счетверённого например) корпуса задержки по всем буферам будут одинаковые.


А данные, прошедшие через SPI устройство, пройдут с нулевой задержкой?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 22 2007, 08:47
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(gte @ Nov 22 2007, 09:24) *
А данные, прошедшие через SPI устройство, пройдут с нулевой задержкой?

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 22 2007, 10:56
Сообщение #9


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(zltigo @ Nov 22 2007, 11:47) *
Добавлю еще, что даже при задержках "скомпенсированных" на многочисленных буферах СLK и MOSI проблема разбега CLK и MISO стоит в полный рост, ибо составляет суммарную задержку передачи CLK туда и MISO обратно.

Да, конечно.
Вот простой расчетик.
При длине кабеля 2 м, сигнал проходит растояние 4 м.
Если сигнал распространяется со скоростью света 300 т.км/с, задержка составит 13,3 нс.
Если учесть индуктивность кабеля и задержки чиповые (3-10 нс), то это значение может удвоиться-утроиться.
Прикиньте, какой это фазовый сдвиг на 12 МГц. Более четверти до половины периода.
Уже есть над чем задуматься. smile.gif
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 22 2007, 11:37
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(alexander55 @ Nov 22 2007, 13:56) *
Да, конечно.
Вот простой расчетик.
При длине кабеля 2 м, сигнал проходит растояние 4 м.
Если сигнал распространяется со скоростью света 300 т.км/с, задержка составит 13,3 нс.
Если учесть индуктивность кабеля и задержки чиповые (3-10 нс), то это значение может удвоиться-утроиться.
Прикиньте, какой это фазовый сдвиг на 12 МГц. Более четверти до половины периода.
Уже есть над чем задуматься. smile.gif


Прошу прощения за нескромный вопрос, но может быть существуют какие-то устоявшиеся решения проблемы с разбегом? Или SPI совсем не предназначен для таких дел?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 22 2007, 11:51
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Kitsok @ Nov 22 2007, 13:37) *
Прошу прощения за нескромный вопрос, но может быть существуют какие-то устоявшиеся решения проблемы с разбегом? Или SPI совсем не предназначен для таких дел?
Приходит в голову использование для приема второго SPI в режиме slave, на который подается CLK с того же регистра, с которого и снимается MOSI. Остается вопрос - где взять еще одну пару в кабеле. А еще могу порекомендовать книжку "Синхронизация в телекоммуникационных системах" - там много интересных решений описано.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 22 2007, 11:53
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kitsok @ Nov 22 2007, 13:37) *
Или SPI совсем не предназначен для таких дел?

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 22 2007, 12:07
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(zltigo @ Nov 22 2007, 14:53) *
Не предназначен.

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


Интересный ход. А как при этом определить, в каком бите у нас что пришло?
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 22 2007, 12:15
Сообщение #14


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Kitsok @ Nov 22 2007, 14:37) *
Прошу прощения за нескромный вопрос, но может быть существуют какие-то устоявшиеся решения проблемы с разбегом? Или SPI совсем не предназначен для таких дел?

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

Цитата(Kitsok @ Nov 22 2007, 15:07) *
Интересный ход. А как при этом определить, в каком бите у нас что пришло?

Да, Вам zltigo предложил классный вариант (можно сказать, гениальный).
Используйте тестовую посылку для выявления где мухи, где котлеты.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 22 2007, 12:25
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kitsok @ Nov 22 2007, 14:07) *
Интересный ход. А как при этом определить, в каком бите у нас что пришло?

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


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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01524 секунд с 7
ELECTRONIX ©2004-2016