Перейти к содержанию
    

Связь двух контроллеров по SPI.

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

Если обмен между МК также примитивен, как и в примере ТС, то соглашусь: можно применить и повтор.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В AVR активный сигнал на входе SS (на ноге SS, настроенной как ввод) разрешает работу сдвигового регистра SPI. И не важно в каком режиме работает SPI - master или slave. Для мастера низкий (активный) сигнал на входе SS фактически означает готовность подчиненного устройства.

 

1. Сигналом SS управляет мастер.

2. Если сигналом SS управляет не мастер, см. п.1.

 

19.3.2 Master Mode

When the SPI is configured as a Master (MSTR in SPCR is set), the user can determine the

direction of the SS pin.

If SS is configured as an output, the pin is a general output pin which does not affect the SPI

system. Typically, the pin will be driving the SS pin of the SPI Slave.

If SS is configured as an input, it must be held high to ensure Master SPI operation. If the SS pin

is driven low by peripheral circuitry when the SPI is configured as a Master with the SS pin

defined as an input, the SPI system interprets this as another master selecting the SPI as a

slave and starting to send data to it. To avoid bus contention, the SPI system takes the following

actions:

1. The MSTR bit in SPCR is cleared and the SPI system becomes a Slave. As a result of

the SPI becoming a Slave, the MOSI and SCK pins become inputs.

2. The SPIF Flag in SPSR is set, and if the SPI interrupt is enabled, and the I-bit in SREG is

set, the interrupt routine will be executed.

Thus, when interrupt-driven SPI transmission is used in Master mode, and there exists a possibility

that SS is driven low, the interrupt should always check that the MSTR bit is still set. If the

MSTR bit has been cleared by a slave select, it must be set by the user to re-enable SPI Master

mode.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под термином "мастер" понимается МК, SPI которого работает в "master mode".

Поэтому утверждение

Сигналом SS управляет мастер.
как говорит один мой коллега: "Всего лишь Ваша неправильная точка зрения". :rolleyes:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под термином "мастер" понимается МК, SPI которого работает в "master mode".

Поэтому утверждениекак говорит один мой коллега: "Всего лишь Ваша неправильная точка зрения". :rolleyes:

 

Какая прелесть, что она совпадает со мнением ребят из AVR. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сигнал о готовности ведомого устройства в шине SPI отсутствует, его нужно отдельно выдумывать.

Я делал подтягиванием различных линий к определённым уровням (подойдут SCK, MOSI): мастер настраивает

эти линии на вход без подтяжки, а слейв -- с подтяжкой. После включения SPI мастером у слейва эти линии остаются входами.

 

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

 

Илья

 

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

 

Включите мозг, товарищи! Если слейв не готов отдать данные сразу (в следующем слове за командой на чтение), то поезд ушел. Всё. Навсегда.

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

И если есть команды долгоиграющие (стирание флеша например), то как раз чтением статуса и дожидаются конца операции.

Ну еще можно бит Ready и тд. И никаких манипуляций SS со стороны слейва! У вас уже есть прекрасный механизм передачи

данных - не надо его портить. Это ж надо додуматься!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Включите мозг, товарищи! Если слейв не готов отдать данные сразу (в следующем слове за командой на чтение), то поезд ушел. Всё. Навсегда.

[CENSORED]

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

 

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

 

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

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

 

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

 

Илья

Изменено пользователем IgorKossak

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, как реализовать команду "чтение статуса"? Или это единственная команда?

void Init (void) {
............
............

SPDR= "ОТВЕТ МАСТЕРУ";

}

void MAIN (void) }

while (1) {

  }
}

ISR (SPI_vect) {

SPDR= "ОТВЕТ МАСТЕРУ"; На будущее
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4) устройство-мастер выждав после передачи время, необходимое для гарантированной реакции подчиненного устройства на первый байт, производит считывание байта ответа.

«Выжидать время, необходимое для гарантированной реакции подчиненного устройства» - наверно, нехорошо. Откуда вы знаете это гарантируемое время? Да и в процессе разработки программа в подчиненном МК может поменяться, поменяется и гарантируемое время. Каждый раз это отслеживать неудобно.

На мой взгляд, проще и удобней сделать так: мастер регулярно посылает стартовый байт и ждет, когда придет байт ответа. Раз пришел байт ответа, значит, периферийный МК закончил свои дела и переключился на обмен с мастером, можно начинать сеанс связи.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...