реклама на сайте
подробности

 
 
> Связь двух контроллеров по SPI.
Jenya7
сообщение Mar 16 2016, 08:06
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



у меня есть драйвер на Mega168. мне понадобилось связать две платы вместе. из свободных имеющихся интерфейсов есть только SPI. думаю сделать Master-Slave. с мастером все понятно а как организовать слейв на SPI?

интересно такой пример будет работать со стороны слейва?
Код
ISR(SPI_vect)
{
    uint8_t command, reply;
    command = SPDR;   // Slave has received
    switch(command)
    {
        case 1: reply = 101; break;
        case 2: reply = 102; break;
        case 3: reply = 103; break;
    }
    SPDR = reply;     // Slave sends on next SPI          
}


Сообщение отредактировал Jenya7 - Mar 16 2016, 08:44
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Mar 16 2016, 20:23
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



SPI - Это дуплекс , если Slave положил правильный ответ в SDR , то мастер его получит - даже если не захочет


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 17 2016, 07:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(ILYAUL @ Mar 17 2016, 00:23) *
SPI - Это дуплекс , если Slave положил правильный ответ в SDR , то мастер его получит - даже если не захочет

Ключевое слово в Вашем утверждении - "если". Если подчиненное устройство успело положить правильный ответ до того, как мастер начал процесс обмена, то - да, мастер получит его. Но, если не успел, то и не получит.
Я и говорю: мастер должен предусмотреть достаточную задержку между своей посылкой и приемом ответа для того, чтобы подчиненное устройство гарантированно успело положить ответную информацию.


Цитата(501-q @ Mar 17 2016, 08:57) *
Обычно активный сигнал SS на входе мастера переводит его узел SPI в режим ведомого ...

В AVR активный сигнал на входе SS (на ноге SS, настроенной как ввод) разрешает работу сдвигового регистра SPI. И не важно в каком режиме работает SPI - master или slave. Для мастера низкий (активный) сигнал на входе SS фактически означает готовность подчиненного устройства. Этот сигнал теоретически можно было бы использовать при обмене между двумя МК, если бы в AVR была бы некая аппаратная реализация готовности подчиненного устройства, поскольку мастеру необходимо дождаться неких действий подчиненного устройства при передаче ответа. Наличие сигнала готовности подчиненного упростило бы ПО мастера. Поскольку готовность подчиненного устройства аппаратно не поддерживается в AVR, то мастер либо должен сделать необходимой длины паузу при приёме ответа, либо (что я считаю нерациональным) получить информацию о готовности подчиненного другим путем.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 17 2016, 07:18
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Палыч @ Mar 17 2016, 10:00) *
Ключевое слово в Вашем утверждении - "если".

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


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 17 2016, 07:36
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(ILYAUL @ Mar 17 2016, 11:18) *
элементарный повтор - сие таже задержка .

Если обмен между МК также примитивен, как и в примере ТС, то соглашусь: можно применить и повтор.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Связь двух контроллеров по SPI.   Mar 16 2016, 08:06
- - Палыч   Цитата(Jenya7 @ Mar 16 2016, 12:06) с мас...   Mar 16 2016, 12:30
|- - Jenya7   Цитата(Палыч @ Mar 16 2016, 18:30) Начну ...   Mar 16 2016, 14:18
|- - AI7   Цитата(Палыч @ Mar 16 2016, 16:30) 4) уст...   Mar 25 2016, 19:12
- - ILYAUL   SS - в помощь   Mar 16 2016, 13:53
|- - Палыч   Цитата(ILYAUL @ Mar 16 2016, 17:53) SS - ...   Mar 16 2016, 14:35
- - Lerk   И обратите внимание, что обрабатывать данные в пре...   Mar 16 2016, 14:10
- - ILYAUL   А зачем Slave формировать SS - это дело мастера   Mar 16 2016, 15:27
|- - Палыч   Цитата(ILYAUL @ Mar 16 2016, 19:27) это д...   Mar 16 2016, 15:38
|- - Lerk   Цитата(Палыч @ Mar 16 2016, 18:38) Нужно ...   Mar 16 2016, 16:35
||- - Палыч   Цитата(Lerk @ Mar 16 2016, 20:35) Зачем н...   Mar 16 2016, 19:39
||- - 501-q   Приветствую! Цитата(Палыч @ Mar 17 2016,...   Mar 17 2016, 04:57
||- - Gorby   Цитата(501-q @ Mar 17 2016, 05:57) С...   Mar 18 2016, 10:40
||- - 501-q   Цитата(Gorby @ Mar 18 2016, 15:40) Включи...   Mar 21 2016, 04:59
|- - ILYAUL   Цитата(Палыч @ Mar 16 2016, 18:38) Нужно ...   Mar 16 2016, 19:19
|- - Lerk   Цитата(Палыч @ Mar 17 2016, 10:00) В AVR ...   Mar 17 2016, 07:40
|- - Палыч   Под термином "мастер" понимается МК, SPI...   Mar 17 2016, 11:03
|- - Lerk   Цитата(Палыч @ Mar 17 2016, 14:03) Под те...   Mar 17 2016, 15:13
- - ILYAUL   ЦитатаКстати, как реализовать команду "чтение...   Mar 21 2016, 12:58


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016