Связь микроконтроллера с микроконтроллером SPI

Я кое-что читал и даже получил «главный» SPI, работающий на моем микроконтроллере. Вот мой вопрос, в основном, если мастер хочет инициализировать запись на ведомое устройство, которое мы пишем в SSPBUF, как мы можем контролировать то, что отвечает ведомое устройство? Таблица данных не кажется мне действительно ясной, порядок событий в этом случае.

т.е. Мастер помещает char в SSPBUF, это инициирует модуль SPI для отправки данных ведомому, во время сдвига ведомый возвращает байт.

На ведомой стороне есть что-то, что говорит вам, что у вас есть входящие данные, и вы можете сначала записать в свой SSPBUF, ЗАТЕМ принять данные?

OR

Нужно ли вам записывать в SSPBUF первое «возвращаемое значение», которое вы хотите отправить обратно, прежде чем мастер сможет инициировать передачу?


person onaclov2000    schedule 27.05.2010    source источник


Ответы (4)


Вы хотите использовать прерывание на линии GPIO, которая обрабатывает выбор чипа вашего подчиненного устройства. Убедитесь, что ведомому устройству достаточно времени для обработки этого прерывания и загрузки регистра исходящих данных до запуска часов.

Некоторые модули SPI не позволяют использовать GPIO — вам нужно будет проверить, есть ли в вашем модуле SPI функция обработки выбора микросхемы, или включить модуль только на основе активности GPIO.

person Yann Ramin    schedule 03.06.2010
comment
на самом деле, глядя на этот ответ, после повторного посещения темы кажется, что это имеет большой смысл, если я просто подожду, пока не увижу привет от выбора микросхемы, а затем передам данные баффу, тогда я должен быть готов к данным. Я должен попробовать. - person onaclov2000; 19.07.2010

Обычно то, что я делал в прошлом с SPI, я отправлял 2 байта от ведущего к ведомому с минимальной задержкой между ними. Мастер отправляет: «X Y», где «X» — это переменная, которую он хочет прочитать от ведомого, а «Y» — это просто фиктивная переменная, которая используется для синхронизации ответа от ведомого. В то же время ведомое устройство получает прерывание, когда оно получает «X», ищет, какое значение поместить в свой выходной буфер, а когда оно получает «Y», ответ на его пакет передается ведущему устройству.

person Seidleroni    schedule 03.06.2010

Каким бы ни был ваш микроконтроллер, три, скорее всего, будут ISR, связанным с получением данных SPI, и регистром, где полученные данные могут быть доступны и скопированы в локальную переменную.

person vicatcu    schedule 28.05.2010
comment
Есть, но это означает только входящие данные, проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как убедиться, что у меня есть данные в подчиненном устройстве, которые мне нужны, прежде чем мастер инициирует ответ. ИЛИ с каждой передачей, которая происходит, я думаю, что решил это, но теперь у меня иногда возникают проблемы с синхронизацией, однако я не читал главную сторону канала сейчас, когда у меня подключен ведомый, но я сообщу когда я узнаю больше информации. - person onaclov2000; 28.05.2010

Сначала вам нужно подтвердить, что у вашего ведущего и ведомого есть общие значения параметров, таких как режим SPI и размер данных. Режим SPI определяет полярность холостого хода тактовой линии SPI и фронт выборки данных, будет ли он первым или вторым. Размер данных покажет, является ли он 8-битным или 16-битным, или может быть чем-то другим в зависимости от чипа.

Теперь, когда мастер выбирает ведомый через вывод выбора микросхемы/ведомого, ведомый становится активным и ждет, пока часы изменят свое состояние, как только часы меняют состояние, ведомый снова ждет тактовой линии для 1-го или 2-го фронта в зависимости от выбора режима SPI. Если это 1-й край ведомого устройства, то оно отбирает данные линии MOSI и помещает их во внутренний регистр сдвига, если ведомое устройство также должно передавать данные, оно должно сохранять данные на линии MISO до выбранного фронта тактового сигнала. Этот процесс будет повторяться до 8 или 16 раз в зависимости от размера данных. По завершении ведущий и ведомый могут генерировать прерывание для своего ЦП для сбора данных (в случае микроконтроллера).

person Chandan Kumar    schedule 24.09.2017