Хотелось бы узнать как правильно согласовать линию передачи данных между мегой и несколькими датчиками по SPI-интерфейсу (длина веревки около 5-8м)? Датчики соединены стандартно: MOSI,MISO,CLK в общей шине, CS для каждого свой.
SPI длинная линия
- Сообщения: 4
- Зарегистрирован: Пн окт 10, 2011 14:42:42
Доброго времени суток!
Хотелось бы узнать как правильно согласовать линию передачи данных между мегой и несколькими датчиками по SPI-интерфейсу (длина веревки около 5-8м)? Датчики соединены стандартно: MOSI,MISO,CLK в общей шине, CS для каждого свой.
Хотелось бы узнать как правильно согласовать линию передачи данных между мегой и несколькими датчиками по SPI-интерфейсу (длина веревки около 5-8м)? Датчики соединены стандартно: MOSI,MISO,CLK в общей шине, CS для каждого свой.
Последний раз редактировалось xmavr Пн июн 03, 2013 15:48:38, всего редактировалось 1 раз.
- Реклама
Несколько метров для SPI многовато.
Самое простое - на приемном конце, непосредственно перед микросхемой, поставить резисторы около 300 Ом в разрыв каждой линии интерфейса. Это предотвратит (ну или уменьшит) выбросы на фронтах ("звон" из-за несогласованной линии передач). Учесть, что для линий MISO и MOSI приемные концы с противоположных сторон. Может, для такой длинной линии поставить резисторы с обоих сторон линии...
Если не поможет, то можно ставить на передающем конце микросхемы - шинные формирователи, а на приемном - соответственно шинные приемники. Я бы так стал делать.
Самое простое - на приемном конце, непосредственно перед микросхемой, поставить резисторы около 300 Ом в разрыв каждой линии интерфейса. Это предотвратит (ну или уменьшит) выбросы на фронтах ("звон" из-за несогласованной линии передач). Учесть, что для линий MISO и MOSI приемные концы с противоположных сторон. Может, для такой длинной линии поставить резисторы с обоих сторон линии...
Если не поможет, то можно ставить на передающем конце микросхемы - шинные формирователи, а на приемном - соответственно шинные приемники. Я бы так стал делать.
Это полезно, но не так важно, т.к. SPI - изначально быстрый интерфейс, и даже если его "замедлить", уменьшив частоту CLK, останутся проблемы искажения фронтов из-за длинных несогласованных линий и т.д.
Хотя при меньших скоростях можно советовать переходить на UART, тоже с установкой каких-то доп.микросхем.
Хотя при меньших скоростях можно советовать переходить на UART, тоже с установкой каких-то доп.микросхем.
- Реклама
Про резистор на стороне приёмника, это да. Но лучше его ставить на передающей стороне. А лучше RC-цепочку (параметры посчитать исходя из скорости). Т.к. любой провод это антенна и, например, фронт в несколько нано секунд с выхода микрухи будет такой звон создавать на длинном проводнике без цепочки уменьшающей скорость нарастания сигнала.SmarTrunk писал(а):Самое простое - на приемном конце, непосредственно перед микросхемой, поставить резисторы около 300 Ом в разрыв каждой линии интерфейса. Это предотвратит (ну или уменьшит) выбросы на фронтах ("звон" из-за несогласованной линии передач). Учесть, что для линий MISO и MOSI приемные концы с противоположных сторон. Может, для такой длинной линии поставить резисторы с обоих сторон линии...
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Для подключения датчика по SPI на нескольких метрах я использовал передатчики и приемники стандарта RS485. А также разъёмы на ПП 8P8C и покупные кабели (патч корды)uk8amk писал(а):Или дифференциальные трансмиттеры
- Сообщения: 4
- Зарегистрирован: Пн окт 10, 2011 14:42:42
Спасибо всем
Получается для длинных линий необходимо использовать либо LVDS, либо RS422/485 приёмопередатчик и согласовывать линии резисторами равными волновому сопротивлению кабеля?
Получается для длинных линий необходимо использовать либо LVDS, либо RS422/485 приёмопередатчик и согласовывать линии резисторами равными волновому сопротивлению кабеля?
Я считаю, что можно руководствоваться примерами и рекомендациями из даташитов упомянутых микросхем
Совершенно неважно какой сигнал передается в линии, важно лишь, чтобы отраженный от нагрузки сигнал был достаточно мал и не создавал звона.xmavr писал(а):Спасибо всем![]()
Получается для длинных линий необходимо использовать либо LVDS, либо RS422/485 приёмопередатчик и согласовывать линии резисторами равными волновому сопротивлению кабеля?
Таким образом можно передавать хоть 10 МГц SPI...
Я, например, передаю похожий сигнал через приемопередатчик ADM4857 с частотой до 9 МГц на расстояния около 10...12 метров.
Главное - согласовать линию У НАГРУЗКИ и чтобы драйвер тянул это волновое сопротивление.
- Сообщения: 9
- Зарегистрирован: Ср ноя 21, 2012 18:20:27
Дополнительно ко всем "терминаторам" придётся и второй канал "SPI" использовать для приёма от датчиков данных, так как опережение сигнала "SCK" в комплексе с отставанием данных будет нарушать синхронизацию. Необходимо чтобы данные шли вместе с синхронизацией, то есть, "SCK" ушёл, а потом вернулся с данными от датчика!
Ну, да. Если уж пошла речь о таких длинах, то вот
http://www.ti.com/lit/an/slyt441/slyt441.pdf
http://www.ti.com/lit/an/slyt441/slyt441.pdf
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 9
- Зарегистрирован: Ср ноя 21, 2012 18:20:27
Отличный материал! Более 100 метров - верится легко, да и кабель очень удобно какой нибудь UTP в 4 витые пары применить.
Интересный документ, очень детальный.
Только не раскрыта тема сигнала SS (или CS, или CE, в общем как его там...). Часто "слейвы" требуют такого сигнала в обязательном порядке, от мастера. При двухсторонней коммуникации по принципу, описанному в документе, может еще и потребоваться такой сигнал назад, от "слейва" ко второму SPI мастера, который тоже будет "слейв" (согласно Figure 2 документа)... Хотя при односторонней передаче данных, например, в случае вывода информации на устройство отображения, будет проще. Так что, считаю, в статье полезный пример, но не окончательный рецепт на все случаи жизни.
Только не раскрыта тема сигнала SS (или CS, или CE, в общем как его там...). Часто "слейвы" требуют такого сигнала в обязательном порядке, от мастера. При двухсторонней коммуникации по принципу, описанному в документе, может еще и потребоваться такой сигнал назад, от "слейва" ко второму SPI мастера, который тоже будет "слейв" (согласно Figure 2 документа)... Хотя при односторонней передаче данных, например, в случае вывода информации на устройство отображения, будет проще. Так что, считаю, в статье полезный пример, но не окончательный рецепт на все случаи жизни.


