Jump to content

    

Recommended Posts

Пишу модуль для SPI. Написал slave мод.

Теперь хочу написать master"а. Но я кое что не понимаю. Вот мастер посылает посылку slave, посылка состоит из команды и данных и ждет ответной посылки после отправки сообщения.

Вопрос...как он узнает когда начинается ответная посылка?

т.е. нужно заранее знать на каком такте начинается выдача slave"ом ответной посылки??

Share this post


Link to post
Share on other sites
Вопрос...как он узнает когда начинается ответная посылка?

т.е. нужно заранее знать на каком такте начинается выдача slave"ом ответной посылки??

Тут, наверное, многое зависит от конкретного устройства и нужно читать его документацию.

Вот для двух МК AVR во время посылки байта синхронно передается ответ из сдвигового регистра slave. С передачей второго байта можно принять первый переданный байт и т.д. Т.е. два сдвиговых регистра Master и Slave можно считать распределенным 16-разрядным регистром.

А вот под рукой MFRC522, так там при передаче в ответ идет все что угодно и, в данном случае, это не важно, т.к. первый байт адрес с битом записи, а далее байты данных. И в ответ устройство данных не выдает, а байты в ответ идут только из-за принципа работы SPI. При чтении - первый байт адрес с битом чтения, в ответ какие то любые данные, далее 2-й байт с битом чтения и в ответ данные по первому адресу и т.д.

Пусть меня поправят, если я что-то не так понимаю.

Ранее использовал SPI для дисплеев и никогда не читал их ответы: одни работали без ответа, ответы других не интересовали в тех случаях.

 

Share this post


Link to post
Share on other sites

Классический SPI это простой сдвиговый регистр. Т.е. прием данных от слейва происходит одновременно с передачей данных в слейв. Далее надо смотреть на конкретные м/сх, которые вы хотите подключить к SPI.

 

Очень часто они работают по принципу запрос-ответ. Сначала выдается команда (путем записи ее кода в SPI регистр мастера и сдвига), при этом принятые данные от слейва игнорируются. Затем выдается команда типа NOP (например записью 00 или FF в тот же ригистр SPI мастера), и принятый данные от слейва используются как ответ на первую команду.

 

Смотрите в DS на конкретную м/сх

 

Share this post


Link to post
Share on other sites

Я понял так. Классический SPI- полный дуплекс. Началась передача мастер выдает свои данные, слейв свои

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

 

Т.е. вопрос в другом.

Вот есть устройство на ПЛИС, я его заведу в режим слейв. Пусть это устройство что-то считает (фильтр/контрольная сумма и тп.). Тогда я ему даю пакет с командой и данными по SPI. Но как Master поймет, когда данные готовы?

Надо тоже тайминг выставить, мол с такого-то такта можешь считать данные?

 

 

вот два примера. ПЛИС- slave МК(stm32)- Master. Мк выдает команду и какие-то данные и ждет обработанные данные. И когда он поймет когда они точно выставлены?

Или взять написать master slave VHDL. Когда мастер поймет, что данные есть точно?

 

 

т.е. я конкретную микросхему не запускаю и даташита нету, значит опереться не на что, а просто хочу передать ПЛИС информацию /обработать и выдать назад..

 

Может я с интерфейсом ошибся и выбрать другой (Мк-плис связка)?

 

 

 

 

 

 

 

Идея была такой. Я передаю с ПК в МК информацию по протоколу высокого уровня, он его разворачивает (crc/битстафинг ) и передает ПЛИС. Ну и все обратно.

Edited by go2winner

Share this post


Link to post
Share on other sites

Добавьте в ПЛИС дополнительную линию: флаг готовности. Появилась единица -- данные готовы.

Или можно организовать чтение флага по SPI.

Share this post


Link to post
Share on other sites
Мк выдает команду и какие-то данные и ждет обработанные данные. И когда он поймет когда они точно выставлены?

Или взять написать master slave VHDL. Когда мастер поймет, что данные есть точно?

 

Только что в соседней теме обсуждали. Три пути:

1. Посчитать, сколько тактов занимает вычисление, и считывать обработанные данные спустя время Тобр.

2. На ПЛИС реализовать отдельный сигнал готовности данных к выдаче, завести его на МК и по нему считывать данные.

3. На ПЛИС реализовать простенький протокол: пока данные обрабатываются, на любой запрос отвечаем словом "статуса", если данные обработку завершили и готовы к выдаче, то отвечаем словом "данные". Тип слова указывается в служебном разряде SPI-сообщения.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this