Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Управление большим количеством устройств по SPI
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
:-)
Для одной задачи требуется реализовать управление по интерфейсу SPI относительно большого количества устройств (6 - 8). Пытаюсь разобраться с тем, как лучше это сделать. Возможные варианты:
1) Использовать микроконтроллер. В контроллере задействовать 2/3 аппаратных блока spi, остальное реализовать "ногодрыганием";
2) Использовать микроконтроллер и только "ногодрыгание";
3) Поискать какой-нибудь демультиплексор и использовать один аппаратный блок spi микроконтроллера;
4) Поставить ПЛИС и в ней реализовать кучу блоков spi и её подключить по какому-нибудь интерфейсу к микроконтроллеру;
5) прочие варианты...

В общем-то вопрос в том - как это сделать по-человечески? Главный критерий - максимальная простота решения.
Lmx2315
..почему все устройства нельзя повесить на один аппаратный SPI ? ..один SPI - много чипселектов .
Палыч
Цитата(:-) @ Sep 11 2012, 12:02) *
Главный критерий - максимальная простота решения.

Если Мк будет выступать для всех устройств мастером, то, имхо, самое простое решение: использовать аппаратный SPI микроконтроллера; выводы SS устройств - на свободные ноги МК. Если дифицит свободных ног МК, то - подключаем выводы SS через дешифратор (сокращаем число потребных ног до трех - итого: 3 для SS + MISO + MOSI + SCK = 6 ног на восемь устройств).
_pv
Цитата(Палыч @ Sep 11 2012, 15:19) *
Если дифицит свободных ног МК, то - подключаем выводы SS через дешифратор

проще тогда на тот же spi посадить сдвиговый регистр, sn74xx595. их можно друг за другом наращивать хоть сколько.
тогда нужно всего две доп. ноги (а то и вообще одна, OE и вывод защёлкивания данных тут можно объёдинить вроде, держим их в 0 - выходы висят -> можно загружать адрес в сдвиговый регистр, переводим в 1, данные защёлкиваются и включается определённый spi CS).
Палыч
Цитата(_pv @ Sep 11 2012, 12:40) *
проще тогда на тот же spi посадить сдвиговый регистр

"Проще" - не всегда: "с минимумом используемых ног"
Plain
Самый простой вариант — все устройства последовательно, т.е. один сигнал CS.
andron86
Цитата(Plain @ Sep 11 2012, 10:57) *
Самый простой вариант — все устройства последовательно, т.е. один сигнал CS.

как это?
Палыч
Цитата(Plain @ Sep 11 2012, 12:57) *
Самый простой вариант — все устройства последовательно, т.е. один сигнал CS.

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

Цитата(andron86 @ Sep 11 2012, 13:22) *
как это?

От МК - к MOSI первого устройства. MISO первого устройства соединяем с MOSI второго, MISO второго устройства соединяем с MOSI третьего, и т.д., наконец: MISO последнего устройства соединяем с МК...
ViKo
Цитата(Палыч @ Sep 11 2012, 12:42) *
Тоже - вариант. Только применение его, имхо, ограничено однотипностью подключаемых устройств...

Разве что полярностью сигналов, больше ничем.
andron86
Цитата(Палыч @ Sep 11 2012, 11:42) *
От МК - к MOSI первого устройства. MISO первого устройства соединяем с MOSI второго, MISO второго устройства соединяем с MOSI третьего, и т.д., наконец: MISO последнего устройства соединяем с МК...

Что то туплю. Это понятно, если все устройства мк, можно через протокол разрулить, но если они пассивны (eprom, adc, dac)?

...
а понял Daisy-Chain имелся ввиду
Plain
Цитата(ViKo @ Sep 11 2012, 12:56) *
Разве что полярностью сигналов, больше ничем.

Совершенно верно. Любые законные SPI-устройства будут работать в кольце, а всякие коряги, где на ноги этого интерфейса понавешано дополнительных функций, или где вообще не весь набор ног, разумеется работать не будут.
Палыч
Цитата(Plain @ Sep 11 2012, 15:26) *
Любые законные SPI-устройства будут работать в кольце...

ТС хотел - "как проще". С точки зрения схемотехники: кольцо - проще некуда. Если подключаемые устройства - например, датчики, которые необходимо опрашивать все разом через один и тот же интервал времени, то и для разработки ПО - проблем нет. Но если номенклатура устройств - разнообразна, и обращение к ним из разных частей программы с разным периодом, то - не факт, что для ПО - тоже "просто".
:-)
В общем-то "хорошие" варианты понятны. Спасибо всем за подсказки.
Управлять планируется синтезаторами adf4350 и приемниками max2769.
В типовом случае происходит только установка режима работы при включении и все. Иногда возможны смены режима работы.
Plain
Цитата(:-) @ Sep 11 2012, 14:56) *
Управлять планируется синтезаторами adf4350 и приемниками max2769.

Обе детали никакого отношения к полноценному SPI не имеют.
gerber
Цитата(Plain @ Sep 11 2012, 15:26) *
Совершенно верно. Любые законные SPI-устройства будут работать в кольце, а всякие коряги, где на ноги этого интерфейса понавешано дополнительных функций, или где вообще не весь набор ног, разумеется работать не будут.

Вот с этого места подробнее, пожалуйста. SPI-флэшка, скажем, AT45DB161 - это законное SPI-устройство или нет? Она будет работать в daisy chain ?
Как мне кажется, не будет. Для работы в цепочке SPI-устройство должно иметь в наборе своих опкодов команду BYPASS, после которой всё, что поступает на вход MOSI транслируется на выход MISO.
Или я ошибаюсь?
andron86
Цитата(gerber @ Sep 11 2012, 15:27) *
Вот с этого места подробнее, пожалуйста. SPI-флэшка, скажем, AT45DB161 - это законное SPI-устройство или нет? Она будет работать в daisy chain ?
Как мне кажется, не будет. Для работы в цепочке SPI-устройство должно иметь в наборе своих опкодов команду BYPASS, после которой всё, что поступает на вход MOSI транслируется на выход MISO.
Или я ошибаюсь?

Нужно устройство с поддержкой daisy chain.
ViKo
Цитата(gerber @ Sep 11 2012, 16:27) *
Или я ошибаюсь?

Имеем устройства в виде длинного последовательного регистра. Задвигаем (и принимаем с другого конца) всю последовательность, каждому устройству будет соответствовать своя часть битов. После окончания CS все устройства получат свои команды. А в следующем таком же цикле микроконтроллер получит от них ответ.
:-)
А вот это большой fail с моей стороны...
В таком случае вопрос: как лучше обходиться с ними? CLK, DATA - сделать общими для всех, а CS вывести отдельно на каждую микросхему?
andron86
Цитата(:-) @ Sep 11 2012, 15:54) *
В таком случае вопрос: как лучше обходиться с ними? CLK, DATA - сделать общими для всех, а CS вывести отдельно на каждую микросхему?

​Это самый простой и верный вариант, в большинстве так и делается.
:-)
Впрочем вариант со сдвиговым регистром выглядит тоже интересно, особенно если выберу микроконтроллер с малым количеством ног...
andron86
Цитата(:-) @ Sep 11 2012, 16:05) *
Впрочем вариант со сдвиговым регистром выглядит тоже интересно, особенно если выберу микроконтроллер с малым количеством ног...

Ну если ног не хватает то можно IO-Expander применить. А daisy chain это уж когда совсем прижало. Например до восьмого устройства восемь циклов добираться будете.
_pv
Цитата(gerber @ Sep 11 2012, 19:27) *
Для работы в цепочке SPI-устройство должно иметь в наборе своих опкодов команду BYPASS. Или я ошибаюсь?

не должно быть там никакой команды, он просто должен уметь прозрачно выпихивать данные наружу которые ему попали на вход и защелкивать их только в момент отпускания CS, а не по количеству принятых битов.
andron86
Да, основное, не забудьте суммарные ёмкости учесть, всё-таки 8 устройств
gerber
Цитата(ViKo @ Sep 11 2012, 17:52) *
Имеем устройства в виде длинного последовательного регистра. Задвигаем (и принимаем с другого конца) всю последовательность, каждому устройству будет соответствовать своя часть битов. После окончания CS все устройства получат свои команды. А в следующем таком же цикле микроконтроллер получит от них ответ.

Согласно даташита, та же SPI-флэшка во время задвигания в неё опкода команды и адреса держит свой MISO-выход в состоянии High-Z, значит ли это, что SPI-флэшки нельзя соединять в daisy chain ?
andron86
Цитата(gerber @ Sep 12 2012, 10:20) *
Согласно даташита, та же SPI-флэшка во время задвигания в неё опкода команды и адреса держит свой MISO-выход в состоянии High-Z, значит ли это, что SPI-флэшки нельзя соединять в daisy chain ?

Да.
Plain
Цитата(gerber @ Sep 11 2012, 16:27) *
скажем, AT45DB161 - это законное SPI-устройство или нет?

"Daisy chain" вовсе никакая не разновидность SPI, а наоборот, сам классический SPI в его первоначальном виде — не абстрактный "последовательный интерфейс", а интерфейс последовательно соединённых устройств, синхронно передающий и принимающий их сигналы, т.е. сигналы эти обновляются внутри них только с окончанием передачи (снятие SS), никак иначе.

Вот только в этом, законном случае, в кольце может быть сколько угодно разношёрстных устройств, все они будут без проблем работать, и интерфейс будет состоять только из 4-х сигналов — SCK, MOSI, MISO, SS.
esaulenka
Цитата
сам классический SPI в его первоначальном виде

Ищутся желающие, чтобы подать в суд на производителей SPI-флешек.
Они незаконно написали в даташите, что их устройства работают по протоколу SPI !
andron86
Цитата(esaulenka @ Sep 12 2012, 16:36) *
Ищутся желающие, чтобы подать в суд на производителей SPI-флешек.
Они незаконно написали в даташите, что их устройства работают по протоколу SPI !

Гы...., ну просто на форуме очень много теоретиков, надо это учитывать.
ViKo
Цитата(andron86 @ Sep 13 2012, 07:50) *
Гы...., ну просто на форуме очень много теоретиков, надо это учитывать.

Поставьте SPI Flash в конец пищевой цепочки, тогда до всех устройств перед ней данные с микроконтроллера будут доходить. А после нее, в микроконтроллер - только от нее.
andron86
Цитата(ViKo @ Sep 13 2012, 12:44) *
Поставьте SPI Flash в конец пищевой цепочки, тогда до всех устройств перед ней данные с микроконтроллера будут доходить. А после нее, в микроконтроллер - только от нее.

А до пищевой цепочки, искать устройства с daisy chain? :-)))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.