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

 
 
> Связь двух контроллеров по 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, 15:27
Сообщение #2


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

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



А зачем Slave формировать SS - это дело мастера


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

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


Гуру
******

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



Цитата(ILYAUL @ Mar 16 2016, 19:27) *
это дело мастера

Нужно дать понять мастеру, что подчиненное устройство произвело операции необходимые для обмена, а до той поры приостановить обмен. Поскольку инициатором обмена по SPI всегда выступает мастер, то задействовать SS нужно именно мастера. В этом случае сигнал на SS мастера формирует, естественно, подчиненное устройство.
Go to the top of the page
 
+Quote Post
Lerk
сообщение Mar 16 2016, 16:35
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 5-05-11
Пользователь №: 64 797



Цитата(Палыч @ Mar 16 2016, 18:38) *
Нужно дать понять мастеру, что подчиненное устройство произвело операции необходимые для обмена, а до той поры приостановить обмен. Поскольку инициатором обмена по SPI всегда выступает мастер, то задействовать SS нужно именно мастера. В этом случае сигнал на SS мастера формирует, естественно, подчиненное устройство.


Зачем называть сигнал о готовности ведомого - SS? Назовите его, например, DR - data ready, и никто не будет путаться о чем, собственно, идет речь.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 16 2016, 19:39
Сообщение #5


Гуру
******

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



Цитата(Lerk @ Mar 16 2016, 20:35) *
Зачем называть сигнал о готовности ведомого - SS?

Так сигнал обозначен в документации от производителя МК: сигнал о готовности ведомого устройства заводится на SPI, работающего в режиме master, на ту из ног, которая обозначается SS.

Цитата(ILYAUL @ Mar 16 2016, 23:19) *
MISO - нет овета (нуного) не принял.(Повтор) Есть принял.

Подчиненное устройство может правильно принять команду, а вот мастер нужный ответ на команду может не получить никогда...
Go to the top of the page
 
+Quote Post
501-q
сообщение Mar 17 2016, 04:57
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



Приветствую!

Цитата(Палыч @ Mar 17 2016, 00:39) *
Так сигнал обозначен в документации от производителя МК: сигнал о готовности ведомого устройства заводится на SPI, работающего в режиме master, на ту из ног, которая обозначается SS.



Ну зачем же так?!

Обычно активный сигнал SS на входе мастера переводит его узел SPI в режим ведомого (Master становится Slave'ом). SS -- это сокращение от Slave Select.

Сигнал о готовности ведомого устройства в шине SPI отсутствует, его нужно отдельно выдумывать. Я делал подтягиванием различных линий к определённым уровням (подойдут SCK, MOSI): мастер настраивает эти линии на вход без подтяжки, а слейв -- с подтяжкой. После включения SPI мастером у слейва эти линии остаются входами.

Но выделение отдельной сигнальной линии -- правильнее.

Илья

Сообщение отредактировал 501-q - Mar 17 2016, 04:58
Go to the top of the page
 
+Quote Post
Gorby
сообщение Mar 18 2016, 10:40
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002



Цитата(501-q @ Mar 17 2016, 05:57) *
Сигнал о готовности ведомого устройства в шине SPI отсутствует, его нужно отдельно выдумывать.
Я делал подтягиванием различных линий к определённым уровням (подойдут SCK, MOSI): мастер настраивает
эти линии на вход без подтяжки, а слейв -- с подтяжкой. После включения SPI мастером у слейва эти линии остаются входами.

Но выделение отдельной сигнальной линии -- правильнее.

Илья


Бред сивой свинячьей кобылособаки! (с)

Включите мозг, товарищи! Если слейв не готов отдать данные сразу (в следующем слове за командой на чтение), то поезд ушел. Всё. Навсегда.
Вычитается при следующей команде чтения. А вот грамотный разработчик вводит в систему команд "чтение статуса".
И если есть команды долгоиграющие (стирание флеша например), то как раз чтением статуса и дожидаются конца операции.
Ну еще можно бит Ready и тд. И никаких манипуляций SS со стороны слейва! У вас уже есть прекрасный механизм передачи
данных - не надо его портить. Это ж надо додуматься!


--------------------
Умею молчать на 37 языках...
Go to the top of the page
 
+Quote Post
501-q
сообщение Mar 21 2016, 04:59
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



Цитата(Gorby @ Mar 18 2016, 15:40) *
Включите мозг, товарищи! Если слейв не готов отдать данные сразу (в следующем слове за командой на чтение), то поезд ушел. Всё. Навсегда.

[CENSORED]
"Сразу" -- это когда? На следующем такте SCK? Через 10 мкс? Через 10 мс? Через 10 секунд? Ага, "сразу" -- точный инженерный термин.

Слейв может подготовить данные и сообщить об этом мастеру. Поезд подождёт, пока ему разрешат ехать дальше.

Цитата
Вычитается при следующей команде чтения. А вот грамотный разработчик вводит в систему команд "чтение статуса".

Грамотный разработчик сначала анализирует требования ко времени реакции слейва/системы и т.д.

Кстати, как реализовать команду "чтение статуса"? Или это единственная команда? Или всё же нужно сделать задержку/паузу на время подготовки слейвом ответа на команду мастера? И как эту задержку можно уменьшить (если нужно уменьшать)?

Илья

Сообщение отредактировал IgorKossak - Mar 21 2016, 08:51
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   Цитата(Палыч @ Mar 16 2016, 18:38) Нужно ...   Mar 16 2016, 19:19
- - ILYAUL   SPI - Это дуплекс , если Slave положил правильный ...   Mar 16 2016, 20:23
|- - Палыч   Цитата(ILYAUL @ Mar 17 2016, 00:23) SPI -...   Mar 17 2016, 07:00
|- - ILYAUL   Цитата(Палыч @ Mar 17 2016, 10:00) Ключев...   Mar 17 2016, 07:18
||- - Палыч   Цитата(ILYAUL @ Mar 17 2016, 11:18) элеме...   Mar 17 2016, 07:36
|- - 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 - 19:40
Рейтинг@Mail.ru


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