несколько устройств на SPI с общей SS

Тема в разделе "Arduino & Shields", создана пользователем YeS, 28 ноя 2016.

  1. YeS

    YeS Гик

    Всем привет. Появилась необходимость повесить несколько устройств на SPI, но поскольку количество слэйвов заранее не определено, хотелось бы извернуться так, чтобы шина SS была у всех устройств общей. Т.е. на мастере занять только 1 пин под SPI_SS. Грубо говоря при старте сеанса общения со слэйвами мастер скажет всем адрес нужного слэйва и лишние перейдут в режим простоя, а нужный слэйв в режим ожидания инфы. Возможно ли такое в принципе?
     
  2. AlexVS

    AlexVS Гик

    Может через расширитель портов попробовать...
    Ну а так вообще то - бред, SS для того и нужен, что бы выбрать конкретное устройство.
     
  3. YeS

    YeS Гик

    Через расширитель портов не удобно. У меня задача именно сделать шину из 5 проводов и вешать на неё дополнительные девайсы типа как на rs485. Количество девайсов заранее не известно, поэтому такой замут приходится выдумывать. Можно было бы по I2C конечно сделать, но скорость боюсь будет хромать.
     
  4. AlexVS

    AlexVS Гик

    Вряд ли SPI в данном случае подходит.
     
  5. Unixon

    Unixon Оракул Модератор

    А что а устройства будут висеть на шине? Какой у них интерфейс? Почему именно 5 проводов?
     
  6. YeS

    YeS Гик

    Управляет всем arduino mega, а слэйвами будут несколько arduino nano v3, которые управляют релюшками и считывают данные некоторых своих входов.
    не 5, а 6 конечно (SCK, MOSI, MISO, SS, GND, VCC). Обсчитался )))
     
  7. Unixon

    Unixon Оракул Модератор

    Тогда лучше RS422, как раз две дифф. пары есть.
    SPI с одним SS это точка-точка, а не шина.
     
  8. YeS

    YeS Гик

    В том и был вопрос нельзя ли извернуться и сделать шиной.

    Кстати. Может подскажете, раз уж такое дело. На меге 2560 пины для I2C SDA и SCL. Нужно ставить подтягивающие резисторы к ним или они там встроенные? Я так понял что нужно, но не уверен до конца.
     
  9. Tomasina

    Tomasina Сушитель лампочек Модератор

    встроенных нет.
     
    YeS нравится это.
  10. Neilon

    Neilon Нерд

    Сделать SPI как RS485? Странновато звучит...))
    Unixon
    тебе дело говорит, советую использовать для этого RS485/422, это надёжный помехозащищённый вариант, всего 2 провода, есть дешевые готовые платки с приёмопередатчиками UART-RS485/422, тогда задача станет довольно тривиальной.
    [​IMG]
    Извернуться конечно можно всегда, но SPI для этого просто не предназначен, а так можно и через сеть 220 В устройства друг к другу подключить...
     
    Последнее редактирование: 29 ноя 2016
  11. YeS

    YeS Гик

    Возможно звучит странновато, но иначе я бы и не задал вопрос. RS485 не интересно ибо нужно конвертеры ставить, а для I2C к примеру не нужно. Дальность для меня абсолютно не важна. Я делал на этих конвертерах систему обогрева этажа офисного здания с централизованным управлением с сервера. Так что знаю их. SPI хотелось из за хорошей скорости.
     
  12. Igor68

    Igor68 Гуру

    SPI - для обмена между элементами на плате... ну или между платами... местное одним словом и Chip Select (CS) для каждого свой. Тащите 3 сигнала для 7 устройств (вместе с нулевым будет 8) и т.д . На каждое устройство свой дешифратор. Снизьте скорость если дистанция велика. Помехозащищённость стремится к нулю на расстоянии...
    Ну и все вытекающие. Если устройства не интеллектуальные (контроллеры), а к примеру там регистры и память в разных комнатах... то лучше сигналы приводить к дифференциальному виду... а это и есть аппаратная составляющая RS485. Причём сигналов управления и формирования Chip Select это тоже касается. Про тактирование тоже не забываем.
    Простите! Я про SPI... может существует другой SPI?
    Ещё раз простите!
    С глубоким уважением!
     
  13. Unixon

    Unixon Оракул Модератор

    А какая именно вам скорость нужна?
     
  14. Unixon

    Unixon Оракул Модератор

    CAN еще не забываем, там обработка коллизий есть.
     
  15. rkit

    rkit Гуру

    Если пинов на ардуино жалко, то можно взять spi регистр, чтобы он переключал ведомых. Потребует смекалки, конечно, но обойдетесь всего одним пином для выбора самого регистра.
     
  16. Neilon

    Neilon Нерд

    Ну коли так, можно конечно поизвращаться))
    1) Типо SPI на всех выключен
    2) "SS" в режиме порта: у ведущего на OUT, у ведомых INPUT
    3) Ведущий импульсами выбирает ведомого, типо 1 импульс - первый, 2 импульса - второй и тп
    4) Потом ведущий и ведомый включают SPI и обмениваются данными, после чего выключают и всё заново...
    Скорость передачи будет как у свеженького SPI, но выход из "режима ожидания" конечно будет давать задержку определённую...
    Я описал протокол мастер-куча слэйвов, если там что-то другое в таком же стиле можно доработать...
     
    Последнее редактирование: 1 дек 2016
  17. Unixon

    Unixon Оракул Модератор

    Вы так и не озвучили потребную скорость...
     
  18. Neilon

    Neilon Нерд

    скорость? ну так-то надо пробовать ...вопще частота шины SPI в дуньке по умолчанию 4МГц вроде, но её можно менять настройкой делителя.
     
  19. YeS

    YeS Гик

    Не могли бы вы дать ссылочку на то где об этом почитать?
     
  20. rkit

    rkit Гуру

    google.com