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

 
 
> ATmega slave передаёт по SPI, Нужно как принимать данные от ведущего так и передавать данные в ведущ
maksimp
сообщение May 8 2012, 20:44
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Рассматривается возможность ипользования контроллеров ATmega как ведомых (slave) по SPI. Нужно как принимать данные от ведущего так и передавать данные в ведущий. Про передачу данных по SPI там написано такое:
Цитата
The system is single buffered in the transmit direction and double buffered in the receive direc-
tion. This means that bytes to be transmitted cannot be written to the SPI Data Register before
the entire shift cycle is completed.

То есть следующий байт нужно писать в регистр данных только после того как предыдущее значение полностью передано. На ведущем это может привести к лишним паузам между байтами. Но в ведомом тактовые импульсы продолжают поступать от ведущего, и чтобы следующий байт от ведомого был передан правильный, его нужно успеть положить в регистр за время до следующего синхроиспульса SCK, то есть за время передачи одного бита?

Приём данных ведомым заметно легче, так как там есть дополнительный буфер.
Цитата
When receiving data, however, a received character must be
read from the SPI Data Register before the next character has been completely shifted in. Oth-
erwise, the first byte is lost.

То есть, для такого обмена наверное ATmega лучше не использовать?
Как сделано это в ATxmega не понятно из даташита. А вот в AT91SAM7X например есть дополнительный буфер передачи, и есть бит TDRE который показывает что он свободен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nikkolaj
сообщение May 14 2012, 10:22
Сообщение #2


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

Группа: Участник
Сообщений: 147
Регистрация: 25-09-08
Пользователь №: 40 467



Цитата
Тормозить будет если поступают прерывания также и из других источников. Если прерывание от SPI придёт во время того как обрабатывается другое прерывание, то выполнить SPDR=*TxData++; вовремя она может и не успеть.

В таком случае целесообразно в программе ведущего предусмотреть паузу перед выдачей следующего байта.
Величину паузы выбрать достаточной, для того что бы ведомый надёжно успевал загружать данные.


В развитие этой темы.
О протоколах передачи данных для подобных задач.
Для организации передачи данных по SPI между одним ведущим и несколькими ведомыми
существуют какие либо стандартные протоколы?
Или каждый разработчик пишет свой протокол?
Особенностью задачи является то, что сигнал SS один для всех ведомых,
т.е. ведущий задаёт адрес ведомого в протоколе.
Go to the top of the page
 
+Quote Post



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

 


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


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