Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Много устройств на одной SPI шине
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Pasha_a13
Добрый день!

Возник вопрос - нужно на одну шину SPI навесить порядка 25-30 микроконтроллеров, которые будут работать в режиме slave. Мастер будет всего один (тоже контроллер).
Работать они будут цепочкой, т.е. данные вошли в первый MOSI, вышли из MISO и пошли к следующему контроллеру.
Тактироваться все будут от одного источника, так же и как CS у них будет общий.
Так как контроллеров довольно много, то протяженность линии будет довольно большая - порядка 40-50 см, не меньше.
Задержки при обмене данных должны быть минимальные, потому частота тактирования должна быть не менее 12 МГц.

Первую проблему, которую я вижу это нагрузочная способность выводов SCK и CS - решить ее думаю использованием дополнительных буферов с хорошей нагрузочной способностью.
Больше вопросов возникает из-за протяженности линий по плате (емкость проводников и т.п.) - каким образом избежать негативных последствий связанных с этим?

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

Спасибо!
vitan
Цитата(Pasha_a13 @ Nov 10 2014, 15:10) *
как лучше решать

Моделировать.
iosifk
Цитата(Pasha_a13 @ Nov 10 2014, 15:10) *
Добрый день!

Возник вопрос - нужно на одну шину SPI навесить порядка 25-30 микроконтроллеров, которые будут работать в режиме slave. Мастер будет всего один (тоже контроллер).
Работать они будут цепочкой, т.е. данные вошли в первый MOSI, вышли из MISO и пошли к следующему контроллеру.
Тактироваться все будут от одного источника, так же и как CS у них будет общий.
Так как контроллеров довольно много, то протяженность линии будет довольно большая - порядка 40-50 см, не меньше.
Задержки при обмене данных должны быть минимальные, потому частота тактирования должна быть не менее 12 МГц.

Спасибо!

А сами микроконтроллеры 12 МГц по SPI тянут?
Pasha_a13
Да, микроконтроллеры cortex M4 вполне нормально вытягивают такую частоту SPI.

Цитата(vitan @ Nov 10 2014, 16:31) *
Моделировать.

А не подскажете каким образом лучше всего это промоделировать? Специальным софтом (каким?) или на макете?
vitan
Цитата(Pasha_a13 @ Nov 10 2014, 17:01) *
А не подскажете каким образом лучше всего это промоделировать? Специальным софтом (каким?) или на макете?

Выбор большой, от встроенных в САПР симуляторов до "отдельно стоящих". В чем у Вас плата разведена?
Pasha_a13
Цитата(vitan @ Nov 10 2014, 17:38) *
Выбор большой, от встроенных в САПР симуляторов до "отдельно стоящих". В чем у Вас плата разведена?

Плата еще не разведена, я сейчас разрабатываю схему и мне нужно учесть там разные возможные нюансы...типа поставить дополнительные буферы, терминаторы на линии и т.п.
Потому и возникает вопрос как бы это промоделировать сначала, потому что плату такую изготовить будет недешево стоить и потому не хотелось бы ее переделывать потом.
Плата будет разводиться скорее всего в Mentor expedition.
Pasha_a13
Каким образом правильно произвести моделирование?
vitan
Цитата(Pasha_a13 @ Nov 10 2014, 17:52) *
Плата еще не разведена, я сейчас разрабатываю схему и мне нужно учесть там разные возможные нюансы...типа поставить дополнительные буферы, терминаторы на линии и т.п.
Потому и возникает вопрос как бы это промоделировать сначала, потому что плату такую изготовить будет недешево стоить и потому не хотелось бы ее переделывать потом.
Плата будет разводиться скорее всего в Mentor expedition.

Ну так в менторе же полным-полно всего этого. Перед началом разводки можно оценить приблизительно, разведенное - уже точнее. Скачиваете у производителя IBIS-модели, засовываете все это в гиперлинкс и смотрите. Посмотрите тут раздел ментора, там выкладывали кучу тренингов по гиперлинксу и т.п.
Pasha_a13
Спасибо! Попробую гиперлинксом промоделировать.
А вообще можете подсказать какие могут быть подводные камни в подобных решениях как у меня?
Просто я до этого не сталкивался с такими скоростными шинами да еще и с таким кол-вом одновременно подключенных контроллеров на эту шину.
Maverick
Цитата(Pasha_a13 @ Nov 10 2014, 13:10) *
Добрый день!

Возник вопрос - нужно на одну шину SPI навесить порядка 25-30 микроконтроллеров, которые будут работать в режиме slave. Мастер будет всего один (тоже контроллер).
Работать они будут цепочкой, т.е. данные вошли в первый MOSI, вышли из MISO и пошли к следующему контроллеру.
Тактироваться все будут от одного источника, так же и как CS у них будет общий.
Так как контроллеров довольно много, то протяженность линии будет довольно большая - порядка 40-50 см, не меньше.
Задержки при обмене данных должны быть минимальные, потому частота тактирования должна быть не менее 12 МГц.

Первую проблему, которую я вижу это нагрузочная способность выводов SCK и CS - решить ее думаю использованием дополнительных буферов с хорошей нагрузочной способностью.
Больше вопросов возникает из-за протяженности линий по плате (емкость проводников и т.п.) - каким образом избежать негативных последствий связанных с этим?

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

Спасибо!

а чего не хотите поставить ПЛИС?
ПЛИС собирает данные с 25 SPI и записывает в память, а мастер-контроллер ПЛИС "видит" как внешнюю память и т.о. образом забиравет данные.
Да еще понадобяться пару пинов для флагов типа данные готовы, новая команда и т.д...
мастер-контроллер ПЛИС может давать команды, которые будут размещаться в строго оговоренном участке адресного пространства памяти ПЛИС
Xenia
Цитата(Pasha_a13 @ Nov 10 2014, 14:10) *
Работать они будут цепочкой, т.е. данные вошли в первый MOSI, вышли из MISO и пошли к следующему контроллеру.


А кольцо организовать не хотите ли? Так, как в Википедии нарисовано:

Тогда это будет не одна шина, а у каждой пары своя отдельная.
Pasha_a13
Цитата(Xenia @ Nov 10 2014, 18:47) *
А кольцо организовать не хотите ли?

Да, именно так оно и будет организовано. Я наверное просто некорректно описал все.


Цитата(Maverick @ Nov 10 2014, 18:45) *
а чего не хотите поставить ПЛИС?
ПЛИС собирает данные с 25 SPI и записывает в память, а мастер-контроллер ПЛИС "видит" как внешнюю память и т.о. образом забиравет данные

Смотрели в сторону ПЛИС, согласен что наверное было бы более правильно именно их использовать.
Проблема в том что с ПЛИС ни я, ни программист не работали и потому время разработки вырастет в нереальные сроки.
Maverick
Цитата(Pasha_a13 @ Nov 10 2014, 16:52) *
Да, именно так оно и будет организовано. Я наверное просто некорректно описал все.



Смотрели в сторону ПЛИС, согласен что наверное было бы более правильно именно их использовать.
Проблема в том что с ПЛИС ни я, ни программист не работали и потому время разработки вырастет в нереальные сроки.

ТЗ в личку можете написать - может и помогу....
а так Вы можете тоже намучиться мастер-контроллер может тоже времянку попортить особенно в большой программе (нагруженном процессоре)
Pasha_a13
Цитата(Maverick @ Nov 10 2014, 18:57) *
ТЗ в личку можете написать - может и помогу....
а так Вы можете тоже намучиться мастер-контроллер может тоже времянку попортить особенно в большой программе (нагруженном процессоре)

Спасибо за предложение!
Однако, к сожалению, нам нельзя привлекать к проекту сторонних программистов.
MiklPolikov
Я бы с такой схемой не стал связываться. Можно уйти в отладку с головой, и больше никогда из неё не выйти.
На вскидку, проблемы будут такие : во-первых буферы на CS и CLK не будут панацеей, т.к. форма сигнала в линии будет определена в основном её индуктивностью и ёмкостью, тактовые импульсы просто расплывутся в какие-нибудь непонятные то ли колебания , то ли биения. Ну и Вы же всё равно не будете цеплять линию к буферу напрямую, а поставите последовательный резистор 10-100 Ом, как раз для борьбы с дребезгом. Одной мощностью буфера проблему не одолеть. Вы знаете, как выглядит дребезг на фронтах импульсов ? А теперь представьте, что частота этого дребезга начинает расти, что при этом происходит с импульсом и соседними к нему ? А если она попадает в резонанс ? Во-вторых надо не забыть поставить буфер и на MOSI мастер-процессора. Ведь буферы будут создавать задержки, надо их выровнять по всем линиям.

А не хотите ли задействовать по 2 SPI у каждого процессора ? Т.е. один на приём, второй на передачу. И сразу всё просто, никаких мучений.
Pasha_a13
Цитата(MiklPolikov @ Nov 10 2014, 19:04) *
А не хотите ли задействовать по 2 SPI у каждого процессора ? Т.е. один на приём, второй на передачу. И сразу всё просто, никаких мучений.

У контроллера все остальные выводы заняты другими функциями, потому из доступных для общей связи остается один SPI.
vitan
Цитата(Pasha_a13 @ Nov 10 2014, 18:43) *
А вообще можете подсказать какие могут быть подводные камни в подобных решениях как у меня?

Да никаких особо не вижу, за исключением того, что результат от первого контроллера вернется в процессор значительно позже. Получается, что для контроллера в мастере нужно включить некий режим, при котором у него разрядность данных будет равна 25*<разрядность одного контроллера>, причем нужно еще указать, что поток состоит из 25 частей, и каждая попадет в разный слейв. Сомневаюсь, что такой режим там есть...
MiklPolikov
Цитата(Pasha_a13 @ Nov 10 2014, 19:10) *
У контроллера все остальные выводы заняты другими функциями, потому из доступных для общей связи остается один SPI.


Что бы не гадать на кофейной гуще, правду ли я написал про гибель тактового сигнала, возьмите провод 50см, повесьте по его длинне несколько конденсаторов, имитирующих суммарную ёмкость входов 30 процессоров, подайте тактовый сигнал 12МГц, и посмотрите осциллографом, что получилось. Ставлю на то, что там будет чистая синусоида и биения.
Plain
Достаточно регулярных буферов на тактовый и выборку, а тактовый и выход хвоста вернуть второму (ведомому) модулю мастера одинаковыми линиями, и такой "колбасой" можно хоть экватор обогнуть на 1 ГГц.

В те далёкие годы этот интерфейс, исходя из его названия, придумывали как местный, не с такими скоростями и расстояниями, но позже вполне можно было бы додумать и расширенную версию, с вдвое большим числом выводов — не "кольца", а "рельсов", т.е. сдвиговых регистров не один, а два, с двумя парами входных и выходных сигналов данных и буферами на остальные — тогда вышеописанные цепочки в мировом электронпроме были бы нормой.
Pasha_a13
Цитата(vitan @ Nov 10 2014, 19:59) *
Да никаких особо не вижу, за исключением того, что результат от первого контроллера вернется в процессор значительно позже. Получается, что для контроллера в мастере нужно включить некий режим, при котором у него разрядность данных будет равна 25*<разрядность одного контроллера>, причем нужно еще указать, что поток состоит из 25 частей, и каждая попадет в разный слейв. Сомневаюсь, что такой режим там есть...

такого режима там действительно нет, это все будет делаться программно.


Цитата(MiklPolikov @ Nov 10 2014, 20:36) *
Что бы не гадать на кофейной гуще, правду ли я написал про гибель тактового сигнала, возьмите провод 50см, повесьте по его длинне несколько конденсаторов, имитирующих суммарную ёмкость входов 30 процессоров, подайте тактовый сигнал 12МГц, и посмотрите осциллографом, что получилось. Ставлю на то, что там будет чистая синусоида и биения.

Вы совершенно правы. Я сегодня уже нагрузил небольшой емкостью (меньше чем 30 процессоров) и уже получилась почти синусоида.
Вот подобные подводные камни меня и интересовали.
Надеюсь получиться с ними справиться используя дополнительные буферы.


Цитата(Plain @ Nov 10 2014, 21:36) *
Достаточно регулярных буферов на тактовый и выборку, а тактовый и выход хвоста вернуть второму (ведомому) модулю мастера одинаковыми линиями, и такой "колбасой" можно хоть экватор обогнуть на 1 ГГц.

А что имееться ввиду под "регулярным" буфером?
Я читал что именно так делать правильно, возвращать на другой SPI вместе с тактовой частотой, однако , к сожалению, у меня на мастере выделяется всего один SPI на всю цепочку контроллеров.
Есть ли какие-то методы чтобы засинхронизировать входные в мастер данные (MISO) с его исходящей тактовой частотой?
Plain
Тогда тяните все тактовые и данные "звездой", т.е. линиями с одинаковой задержкой.
Maverick
Цитата(Pasha_a13 @ Nov 10 2014, 20:56) *
такого режима там действительно нет, это все будет делаться программно.

что за процессор будет собирать данные с 25-30 SPI ?
и на какой тактовой частоте он будет работать?
разрядность данных у SPI одинаковая?

в принципе я не видел процессора с таким количеством SPI - Вы будете делать SPI програмно, правильно понял Вашу фразу?
Pasha_a13
Цитата(Plain @ Nov 11 2014, 05:34) *
Тогда тяните все тактовые и данные "звездой", т.е. линиями с одинаковой задержкой.

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

Цитата(Maverick @ Nov 11 2014, 15:47) *
что за процессор будет собирать данные с 25-30 SPI ?
и на какой тактовой частоте он будет работать?
разрядность данных у SPI одинаковая?

в принципе я не видел процессора с таким количеством SPI - Вы будете делать SPI програмно, правильно понял Вашу фразу?

Процессоры сами не поддерживают на хардварном уровне этой самой цепочки, потому разгребать всю эту последовательность будет уже софт...задача слейва пропускать через себя посылку, в которой содержится информация для 30 процессоров, вставляя свои данные (либо извлекая их) из соответствующего участка этой посылки. Т.е. здесь SPI будет работать программно-аппаратно.
Разрядность данных у всех процессоров одинаковая.
Главный процессор будет стоять более шустрый чем слейвы, он еще пока выбирается. Смысл в том чтобы он слал не частые небольшие пакеты по SPI, а редкие но с большим кол-вом данных сразу(сразу всем слейвам).
Lmx2315
QUOTE (Pasha_a13 @ Nov 11 2014, 15:04) *
Так данные идут цепочкой, как же я их сделаю звездой....
По поводу тактовых звездой я думал, но неудобно очень получается..


..из-за чипселектов?
Оставьте его один на всех, а в формате передаваемого пакета по SPI предусмотрите софтовую адресацию. Там же можно реализовать как персональную передачу, так и "широковещательную".
Но это конечно будет работать только в одну сторону.
Pasha_a13
Цитата(Lmx2315 @ Nov 11 2014, 16:13) *
..из-за чипселектов?
Оставьте его один на всех, а в формате передаваемого пакета по SPI предусмотрите софтовую адресацию. Там же можно реализовать как персональную передачу, так и "широковещательную".
Но это конечно будет работать только в одну сторону.

думали по этому поводу, но тут постоянно нужно опрашивать и что-либо сообщать слейвам и по логике мастера (таковы требования руководства) он должен посылать редко большое количество данных. А слейвы уже должны это все разгребать.
Если делать как Вы сказали то действительно получается что данные будут посылаться широковещательно и запрашивать ответные данные придется как-то по очереди, что неудобно.
Xenia
Почему бы не использовать дополнительные микросхемы-повторители (без инверсии) на два канала (SS и SCLK) при каждом МК? Логика такая: сигналы SS и SCLK от мастера тянутся до повторителя, находящегося возле слейва, после чего повторенные сигналы достаются данному слейву, а затем тянутся до следующего повторителя (при следующем слейве). Тогда и эффект задержки в цепи не будет мешать, какой бы длинной эта цепь ни была.
Pasha_a13
Цитата(Xenia @ Nov 11 2014, 16:22) *
Почему бы не использовать дополнительные микросхемы-повторители (без инверсии) на два канала (CS и SLK) при каждом МК? Логика такая: сигналы CS и SLK от мастера тянутся до повторителся, находящиимся около слейва, после чего повторенные сигналы достаются данному слейву, а затем тянутся до следующего повторителя (при следующем слейве). Тогда и эффект задержки в цепи перестанет мешать, какой бы длинной эта цепь ни была.

ну я может что-то упустил , но вроде бы эффект задержки связан с расстоянием от мастера до слейва (с протяженностью самой дорожки по плате) и даже при использовании повторителей он все равно останется, а если пускать через сами повторители то набегут еще и задержки самих эти повторителей.
Если я неправ, то поправьте меня пожалуйста.
Xenia
Цитата(Pasha_a13 @ Nov 11 2014, 15:26) *
ну я может что-то упустил , но вроде бы эффект задержки связан с расстоянием от мастера до слейва (с протяженностью самой дорожки по плате) и даже при использовании повторителей он все равно останется, а если пускать через сами повторители то набегут еще и задержки самих эти повторителей.


Для устойчивой работы SPI важно только то, чтобы не набегала задержка между SCLK и MOSI/MISO, поскольку именно SCLK синхронизирует оба последних. А поскольку в предлагаемом варианте длины проводников, соединяющих пары МК, одинаковы, то мы вправе полагать, что и задержку они дают одинаковую. А, стало быть, рассинхронизация в парах между SCLK и MOSI/MISO не возникнет, хотя суммарная задержка по цепи будет накапливаться.

Другое дело, что при замыкании в кольцо, возникнет проблема связи между мастером и последним звеном цепи, т.к. их сигналы SCLK могли сильно разойтись. Между тем, последняя проблема эффективно решается тем, что у мастера-МК (только у него одного!) должен быть второй экземпляр SPI, работающий в режиме Slave с концевым членом цепи.
vitan
А как насчет мультиплексоров? Судя по буферам внешние микросхемы можно ставить. Можно найти достаточно маленькие и с большим количеством каналов. Будете подключать нужный канал на время общения. А, если там можно вместо SPI взять I2C, то там вообще NXP делает кучу мультиплексоров, которые по этому же I2C и управляются. Если взять скоростные, то учитывая количество контроллеров, оно может и по скорости подойти.
Maverick
может стоит взять какую-то STM32 (для примера) c 6 SPI (аппартных) и на каждый аппратный SPI повесить по 4-5 слейвов
На мой взгляд так будет лучше...
Plain
Цитата(Pasha_a13 @ Nov 11 2014, 15:12) *
Цитата(Plain @ Nov 11 2014, 04:34) *
Тогда тяните все тактовые и данные "звездой", т.е. линиями с одинаковой задержкой.

Так данные идут цепочкой, как же я их сделаю звездой...

Например, 17 одинаковой длины линий — две, MOSI и MISO, до головы и хвоста "колбасы", и 15 тактовых — попарно на 30 ведомых.

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

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