Страница 1 из 1

SPI длинная линия

Добавлено: Пн июн 03, 2013 06:52:53
xmavr
Доброго времени суток!
Хотелось бы узнать как правильно согласовать линию передачи данных между мегой и несколькими датчиками по SPI-интерфейсу (длина веревки около 5-8м)? Датчики соединены стандартно: MOSI,MISO,CLK в общей шине, CS для каждого свой.

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 07:11:47
SmarTrunk
Несколько метров для SPI многовато.

Самое простое - на приемном конце, непосредственно перед микросхемой, поставить резисторы около 300 Ом в разрыв каждой линии интерфейса. Это предотвратит (ну или уменьшит) выбросы на фронтах ("звон" из-за несогласованной линии передач). Учесть, что для линий MISO и MOSI приемные концы с противоположных сторон. Может, для такой длинной линии поставить резисторы с обоих сторон линии...

Если не поможет, то можно ставить на передающем конце микросхемы - шинные формирователи, а на приемном - соответственно шинные приемники. Я бы так стал делать.

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 07:21:24
uk8amk
Или дифференциальные трансмиттеры если уровень помех высокий.

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 09:06:36
const1105
Для начала узнать о скорости передачи данных, потом советы.

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 11:55:30
SmarTrunk
Это полезно, но не так важно, т.к. SPI - изначально быстрый интерфейс, и даже если его "замедлить", уменьшив частоту CLK, останутся проблемы искажения фронтов из-за длинных несогласованных линий и т.д.

Хотя при меньших скоростях можно советовать переходить на UART, тоже с установкой каких-то доп.микросхем.

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 12:24:14
Kavka
SmarTrunk писал(а):Самое простое - на приемном конце, непосредственно перед микросхемой, поставить резисторы около 300 Ом в разрыв каждой линии интерфейса. Это предотвратит (ну или уменьшит) выбросы на фронтах ("звон" из-за несогласованной линии передач). Учесть, что для линий MISO и MOSI приемные концы с противоположных сторон. Может, для такой длинной линии поставить резисторы с обоих сторон линии...
Про резистор на стороне приёмника, это да. Но лучше его ставить на передающей стороне. А лучше RC-цепочку (параметры посчитать исходя из скорости). Т.к. любой провод это антенна и, например, фронт в несколько нано секунд с выхода микрухи будет такой звон создавать на длинном проводнике без цепочки уменьшающей скорость нарастания сигнала.

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 15:23:45
Alexey_Sh
uk8amk писал(а):Или дифференциальные трансмиттеры

Для подключения датчика по SPI на нескольких метрах я использовал передатчики и приемники стандарта RS485. А также разъёмы на ПП 8P8C и покупные кабели (патч корды) :).

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 16:30:27
xmavr
Спасибо всем :)
Получается для длинных линий необходимо использовать либо LVDS, либо RS422/485 приёмопередатчик и согласовывать линии резисторами равными волновому сопротивлению кабеля?

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 16:34:01
SmarTrunk
Я считаю, что можно руководствоваться примерами и рекомендациями из даташитов упомянутых микросхем

Re: SPI длинная линия

Добавлено: Пн июн 03, 2013 16:43:49
КРАМ
xmavr писал(а):Спасибо всем :)
Получается для длинных линий необходимо использовать либо LVDS, либо RS422/485 приёмопередатчик и согласовывать линии резисторами равными волновому сопротивлению кабеля?

Совершенно неважно какой сигнал передается в линии, важно лишь, чтобы отраженный от нагрузки сигнал был достаточно мал и не создавал звона.
Таким образом можно передавать хоть 10 МГц SPI...
Я, например, передаю похожий сигнал через приемопередатчик ADM4857 с частотой до 9 МГц на расстояния около 10...12 метров.
Главное - согласовать линию У НАГРУЗКИ и чтобы драйвер тянул это волновое сопротивление.

Re: SPI длинная линия

Добавлено: Вт июл 09, 2013 10:30:57
Кудесник
Дополнительно ко всем "терминаторам" придётся и второй канал "SPI" использовать для приёма от датчиков данных, так как опережение сигнала "SCK" в комплексе с отставанием данных будет нарушать синхронизацию. Необходимо чтобы данные шли вместе с синхронизацией, то есть, "SCK" ушёл, а потом вернулся с данными от датчика!

Re: SPI длинная линия

Добавлено: Вт июл 09, 2013 10:42:30
Kavka
Ну, да. Если уж пошла речь о таких длинах, то вот
http://www.ti.com/lit/an/slyt441/slyt441.pdf

Re: SPI длинная линия

Добавлено: Вт июл 09, 2013 20:52:12
Кудесник
Отличный материал! Более 100 метров - верится легко, да и кабель очень удобно какой нибудь UTP в 4 витые пары применить.

Re: SPI длинная линия

Добавлено: Ср июл 10, 2013 01:36:05
SmarTrunk
Интересный документ, очень детальный.

Только не раскрыта тема сигнала SS (или CS, или CE, в общем как его там...). Часто "слейвы" требуют такого сигнала в обязательном порядке, от мастера. При двухсторонней коммуникации по принципу, описанному в документе, может еще и потребоваться такой сигнал назад, от "слейва" ко второму SPI мастера, который тоже будет "слейв" (согласно Figure 2 документа)... Хотя при односторонней передаче данных, например, в случае вывода информации на устройство отображения, будет проще. Так что, считаю, в статье полезный пример, но не окончательный рецепт на все случаи жизни.