Можно ли привязать вывод SS, если используется только одно устройство SPI?

8

Я прочитал в Интернете, что для запуска транзакции SPI на устройстве, поддерживаемом SPI, линия SS (выбор подчиненного устройства, или выбор микросхемы) должна быть установлена ​​на низкий уровень для всей транзакции, а затем должна быть доведена до высокого уровня в конце и до конца транзакции. Если я создаю схему, содержащую только одно устройство SPI, нужно ли мне понижать команду отправки строки SS, затем каждый раз поднимать линию ss или я могу привязать линию ss к низкому уровню и отправлять неограниченное количество команд? Устройство, которое я использую, является звуковым чипом ISD1700 .

Ник Алексеев
источник
3
В общем, да, вывод SS позволяет ведомому устройству знать, когда транзакция начинается и заканчивается. Без этого нет ничего, чтобы гарантировать, что это остается в синхронизации. Это может работать, но если оно когда-либо выйдет из синхронизации, оно не восстановит его.
Кевин Уайт
4
@kevinWhite на самом деле многим SPI-устройствам необходим переход SS для запуска внутреннего конечного автомата. Таблица данных для вашего конкретного устройства должна дать вам ответ, но если вы уже получили его, почему бы не попробовать его?
Akohlsmith
1
@akohlsmith - Я согласен, я говорю, что вам действительно нужен СС, а не то, что вы можете обойтись без него. Даже те устройства, которые не требуют его для выполнения внутренних операций, могут выйти из синхронизации с мастером. Единственный производитель, который рекомендовал не использовать SS, - это аналоговые устройства для некоторых из своих устройств, где у них есть несколько функций, назначенных для выводов, так что SS может быть недоступен. Я не вижу, как это может быть надежным, и я слышал жалобы, когда устройство требует сброса, чтобы восстановить синхронизацию.
Кевин Уайт
Я согласен с @akohlsmith. И если вы хотите ответить на вопрос, я буду голосовать. Вот мой аргумент: я периодически общаюсь с устройством через SPI. Но есть функция, управляемая прерываниями, которая также требует SPI для того же устройства. Используя вывод SS, я смогу прервать текущую транзакцию SPI, не завершив ее. Предоставляя мне доступ к устройству SPI быстрее, при обслуживании прерывания.
st2000

Ответы:

14

[@Kevin и @akohlsmith должны публиковать свои комментарии в качестве ответов.
Это чтобы расширить их комментарии. ]

SPI 1 не предписывает точное поведение SS (подчиненная строка выбора 2 ). Это поведение зависит от реализации каждого отдельного устройства. Я видел устройства, которые могут работать с постоянно установленным SS. Я также видел устройства, которые требуют падения и повышения краев на СС.

Хотя в явном виде не говорится, что SS должен быть переключен,
в руководстве по проектированию (стр. 31) говорится, что SS запускает и завершает транзакцию SPI. Было бы разумно предположить, что SS должен быть переключен для прохождения транзакции SPI.

1 SPI - это скорее обычай, нежели стандарт.
2 CS (выбор микросхемы) - другое название для выбора ведомого.

Ник Алексеев
источник
6
Это очень хороший ответ. Многие / большинство целевых устройств SPI полностью зависят от линии SPI_CS, чтобы инициализировать конечный автомат захвата битов внутри детали для синхронизации между инициатором и целевыми устройствами. Есть несколько устройств, которые могут выполнять повторную синхронизацию, просто распознавая синхронизацию или паттеры кода операции на лету на сигнальной линии MOSI. Но они в меньшинстве, и любому, кто разрабатывает систему с использованием устройств SPI, рекомендуется предоставлять SPI_CS для каждого целевого устройства, даже если это означает использование дополнительных схем и / или GPIO с устройством-инициатором для обеспечения этой возможности.
Майкл Карас
Не нужно добавлять другой ответ, ваш снимок отражает то, что я и @kevinwhite говорили. :-)
akohlsmith
5

Это полностью зависит от ведомого устройства.

Если протокол для подчиненного устройства включает в себя какое-то кадрирование, будь то с пакетами фиксированной длины, байтами запуска / остановки или заголовком, который задает длину пакета, тогда подчиненное устройство может работать без выбора микросхемы. В плате, над которой я сейчас работаю, есть чип флэш-памяти SPI, который, кажется, вполне доволен выбором микросхемы или без нее. Он может быть постоянно подключен к 0 В (включен) без проблем.

Это на самом деле вызвало у нас некоторые проблемы, потому что подрядчик настроил некоторые низкоуровневые операции ввода-вывода, включая SPI, и мы (и они!) Не поняли, что у них не работает выбранный чип. Это было до тех пор, пока мне не пришлось расширить работу SPI, чтобы добавить еще одно SPI-устройство на ту же шину, которая, как я обнаружил, у нас фактически не было выбора микросхем!

И наоборот, многим ведомым устройствам для выбора данных действительно требуется выбор чипов, и отправка большего количества бит / байтов, чем ожидаемый пакет, без освобождения выбора чипов в конце будет рассматриваться как недопустимая передача и отклонена. ЦАПы часто загружают новое значение на выходной сигнал на чипе выбора переднего фронта. Аналогичным образом, АЦП часто используют передачу SPI для начала (а иногда и времени) преобразования, поэтому в качестве триггера им нужно выбрать передний край чипа.

Ваша таблица данных на самом деле ничего не говорит о том, как управлять вашим конкретным чипом через SPI, и у меня недостаточно мотивации, чтобы гуглить его. Упражнение осталось для читателя ...;)

Грэхем
источник
Я просто завяжу SS и молюсь, чтобы он работал, поскольку в техническом описании устройства, которое я получил из Интернета, только говорится, что (в соответствии с таблицей определения выводов в техническом описании) SS используется для включения устройства. В нем также говорится, что если SS высокий, то другие линии SPI будут в состоянии высокого импеданса. скрещенные пальцы.
@ Майк, я обнаружил некоторую мотивацию этим утром, поэтому я прогуглил "ISD1700". Первые две ссылки были двумя файлами PDF. Первым был лист данных, на который вы ссылались; и второе было руководством по проектированию, которое говорит точно, как управлять чипом. В руководстве по проектированию говорится (раздел 10.2, стр. 31): «Транзакция SPI инициируется на заднем фронте вывода SS». Так что нет, в таблице говорится, что вы не можете сойти с рук, что вы планируете. И я не хочу быть слишком язвительным, но если бы у вас был JFGI и вы прочитали две лучшие ссылки, которые появились, вы могли бы ответить на свой вопрос.
Грэм
3

Не зная ничего конкретного о ведомом устройстве SPI, нет, вы не можете просто привязать низкий уровень SS.

Многие устройства используют передний край SS для сброса своей внутренней логики до начала новой транзакции. Например, память может интерпретировать первые два байта как адрес, а затем последующие байты как данные. Некоторые воспоминания не выполняют физическую запись до тех пор, пока не будет снят SS.

Для некоторых устройств с правильным протоколом вам, возможно, удастся сойти с рук. Однако, это не будет работать с большинством устройств там.

Олин Латроп
источник
Несколько лет опоздал на этот. И я здесь, потому что я тоже искал ответы. Очень хорошая информация, которую вы добавили, Олин, и хорошая информация от других. Я думаю, что проблема заключалась главным образом в интерпретации слов «выбор чипа» или «выбор ведомого» - что, если кто-то был вынужден что-то предполагать, то это предположение означало бы просто активировать это устройство и отключить все другие подчиненные устройства, которые в противном случае могли бы мешать связи между рабом и хозяином. Честное и логичное «предположение». Хорошо, что эта тема проясняется прямо здесь, в этой теме.
Кенни
Другой следующий вопрос из этой темы может быть ----- если вывод выбора / включения микросхемы не должен быть постоянно «включен», то когда именно должно быть включено и отключено ведомое устройство spi? Например - отключаем ли мы ведомое устройство после завершения каждой команды, отправленной ведомому?
Кенни