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

 
 
> вопрос по SPI.
Metallist64
сообщение Oct 15 2008, 06:57
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558



Здравствуйте!Уважаемые знатоки.
Помогите определиться со следующими вопросами по интерфейсу SPI.
На графиках передачи данных можно заметить, что Master и Slave могут осуществлять передачу данных одновременно.
т.е и Master и Slave передают данные друг другу.
В связи с этим возникли следующие вопросы :
- Как сделать одновременно прием и передачу? Ведь регистр данных один и адрес у него один.
- Что будет если прочитать регистр данных Slave если передача от Master еще не закончена?Ведь флаг SPIF устанавливается для передатчика, а не приемника.

- Что будет если во время приема байта от мастера я буду записывать в регистр данных байт который я хочу передать мастеру.
- Как убедиться,в том, что мастер закончил прием байта от slave?
- Не получится ли так, что придется самому придумывать протокол обмена м\у устройствами. Я имею в виду пересылать флаги окончания передачи, готовности и т.д.?
- Какое максимальное расстояние м/у приемником и передатчиком?
Большое спасибо.
PS MK - ATMega8.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Stanislav_S
сообщение Oct 15 2008, 07:19
Сообщение #2


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(Metallist64 @ Oct 15 2008, 11:57) *
Здравствуйте!Уважаемые знатоки.
Помогите определиться со следующими вопросами по интерфейсу SPI.
На графиках передачи данных можно заметить, что Master и Slave могут осуществлять передачу данных одновременно.
т.е и Master и Slave передают данные друг другу.
В связи с этим возникли следующие вопросы :
- Как сделать одновременно прием и передачу? Ведь регистр данных один и адрес у него один.
- Что будет если прочитать регистр данных Slave если передача от Master еще не закончена?Ведь флаг SPIF устанавливается для передатчика, а не приемника.

- Что будет если во время приема байта от мастера я буду записывать в регистр данных байт который я хочу передать мастеру.
- Как убедиться,в том, что мастер закончил прием байта от slave?
- Не получится ли так, что придется самому придумывать протокол обмена м\у устройствами. Я имею в виду пересылать флаги окончания передачи, готовности и т.д.?
- Какое максимальное расстояние м/у приемником и передатчиком?
Большое спасибо.
PS MK - ATMega8.

Регистр действительно один, но данные заходят с другой стороны, посему следует их забирать после окончания передачи кроме того для чтения присутствует буфер. про расстояние однозначно сказать нельзя это зависит от скорости обмена от разводки платы и т д. У меня например работает до 50 см, при тактовой 1 МГц.


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 15 2008, 07:51
Сообщение #3


Гуру
******

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



Цитата(garbuz @ Oct 15 2008, 10:13) *
Скорей всего тут ситуация как с регистром данных UART - их РЕАЛЬНО два !


Цитата(Stanislav_S @ Oct 15 2008, 10:19) *
Регистр действительно один, но данные заходят с другой стороны, посему следует их забирать после окончания передачи кроме того для чтения присутствует буфер.
В документации об этом написано смутно... Предполагаю, что в действительности в SPI два регистра с одним и тем же адресом: по записи в него - данные попадают в сдвиговый регистр и передаются, принятые данные из сдвигового регистра попадают в буферный регистр, откуда читаются командой чтения регистра SPDR. Однако, это - следует проверить в эксперименте...

По поводу Ваших вопросов:

1. Приемник и передатчик работают строго одновременно, поэтому окончание приема = окончанию передачи.
2. Если верно моё предположение, изложенное выше, при чтении регистра данных при незавершенном приёме - прочитаете предыдущий байт.
3. Что будет, если в момент обмена записать байт - в документации не оговорено. Следует проверить экспериментально.
4. Мастер закончит приём от Slave, когда закончит свою передачу (см. 1). Если Slave - не положил ничего в регистр для передачи - попавший в регистр сдвига байт от мастера при предыдущем приёме - уйдёт от Slave мастеру.
5. Что-то, хотя бы элементарное, но придумывать прийтется...
6. Этот интерфейс - для устройств, расположенных на одной плате, или на соседних.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Metallist64   вопрос по SPI.   Oct 15 2008, 06:57
- - kamil yaminov   Хоть регистр и один, но данные на передачу выдвига...   Oct 15 2008, 07:08
- - garbuz   Цитата(Metallist64 @ Oct 15 2008, 10:57) ...   Oct 15 2008, 07:13
- - Metallist64   В даташите в режме slave при приеме байта ждут 1 ...   Oct 15 2008, 07:56
|- - Палыч   Цитата(Metallist64 @ Oct 15 2008, 10:56) ...   Oct 15 2008, 08:08
|- - Metallist64   Большое спасибо! Смутило отсутствие "по о...   Oct 15 2008, 08:14
|- - Stanislav_S   Цитата(Metallist64 @ Oct 15 2008, 13:14) ...   Oct 15 2008, 08:56
|- - Палыч   Цитата(Metallist64 @ Oct 15 2008, 11:14) ...   Oct 15 2008, 09:05
- - Metallist64   Всем участникам ОГРОМНОЕ спасибо! Но прошу доб...   Oct 15 2008, 10:21
|- - Палыч   Цитата(Metallist64 @ Oct 15 2008, 13:21) ...   Oct 15 2008, 12:21
|- - mdmitry   Может не придумывать свой, а взять идеи из готовых...   Oct 15 2008, 12:51
|- - Metallist64   Большое спасибо за оказанную помощь!   Oct 15 2008, 12:58
- - mdmitry   Рассмотрите два варианта: 1. Прерывание при перехо...   Oct 15 2008, 12:17


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

 


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


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