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

 
 
 
Reply to this topicStart new topic
> Неустойчивая работа SPI (ATMega8), Связь рвется на высокой частоте передачи
Didro
сообщение Nov 10 2009, 20:20
Сообщение #1


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

Группа: Участник
Сообщений: 94
Регистрация: 9-04-07
Пользователь №: 26 893



Добрый день,
отлаживаю связь между двумя ATMega8 через SPI (стенд на изображении в прицепе )
Наблюдаю следующую картину:

при тестировании идет в прерывании таймера посылка 2х байт:

Код
void SPI_MasterTransmit(unsigned char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}
...

SPI_MasterTransmit(12);
SPI_MasterTransmit(13);


а в Slave прием:
Код
SIGNAL (SPI_STC_vect)
{
spi_input = SPDR;

SPDR = 111; //отсыл в ответ

Spiarr[Spiarc] = spi_input;// читаем принятое в массив
Spiarc = Spiarc + 1;// увеличиваем индекс массива приемника
if (Spiarc == 2) // когда = 2 то анализируем принятый "пакет"
{
Spiarc = 0;

if ((Spiarr[0] == 12)&&(Spiarr[1]==13))
    {
           PORTB ^= (1<<1);//  мигаем если пришло то что отправляли
    }
}

}


светодиод первое время мигает - т.е. принимает данные, но через минут 5 потоковой пересылки, с частотой отправки 1 кГц светодиод гаснет - т.е. данные приняты со сбоем или не приняты.

Ощущение такое что накапливается какаято ошибка в отправке.

Свойственно ли это spi ? Поддерживает ли он потоковую пердачу без ошибок ?
С чем это может быть связано ? Можно SPI вести проводами или это целиком наплатный интерфейс ?

В будущем нужно будет связывать ATMega8 с CAN-контроллером (для выхода на CAN-шину) - планировал разместить их на разных платах и кинуть шлейфом, можно ли так делать ?

Спасибо
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 10 2009, 20:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



SPI интерфейс синхронный и для длительной устойчивой работы он требует фреймовой синхронизации. Выделение фреймов чаще всего реализуют отдельным управляющим сигналом (CS, SS и т.п.), либо при помощи временных пауз. В последнем случае при детектировании временной паузы SPI-slave делает сброс/реинициализацию своего модуля SPI. SPI-мастер в паузе также сбрасывает свой SPI-модуль.
Дальность работы SPI ограничена качеством (волнового) согласования линий связи и его тактовой частотой. Чем больше расстояние, тем меньше максимальная тактовая частота. Если входы приемника и передатчика SPI имеют раздельные тактовые входы, то тактируя приемник возратным сигналом CLK, соотношение расстояние/частота можно повысить. К сожалению в МК такая конструкция не применяется и возможна лишь при использовании двух портов SPI из которых один работает как мастер только на передачу, а второй как слейв только на прием.
Для межплатных высокоскоростных соединений обычно используются дифференциальные/симметричные интерфейсы типа LVDS. Также для организации дифференциального интерфейса можно использовать распространенные драйверы RS422, RS485.
Для решения ваших проблем нужно как минимум ввести фреймовую синхронизацию.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Nov 10 2009, 22:14
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(rezident @ Nov 10 2009, 23:48) *
Для решения ваших проблем нужно как минимум ввести фреймовую синхронизацию.

И необходимо обеспечить согласование хотя бы по линиям тактирования и стробирования фрейма. 100-омный резистор последовательно с передатчиком...
Go to the top of the page
 
+Quote Post
Злодей
сообщение Nov 11 2009, 23:58
Сообщение #4


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

Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142



Цитата(rx3apf @ Nov 11 2009, 01:14) *
И необходимо обеспечить согласование хотя бы по линиям тактирования и стробирования фрейма. 100-омный резистор последовательно с передатчиком...

Видел платку 90х90мм, 100-омные резисторы стояли на всех цифровых дорожках. Тогда проглатил "это от наводок", или какое-то такое объяснение, типа 100-ом резистор ни когда не лишний на цифровых линиях. И вот снова он. Можно, пожалуйста, подробнее про этот резистор.

Извините, пожалуйста, за предыующий топик, я правда так думал.

Сообщение отредактировал Злодей - Nov 12 2009, 00:01
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 12 2009, 00:44
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Злодей @ Nov 12 2009, 04:58) *
Можно, пожалуйста, подробнее про этот резистор.
Обсуждалось уже. Например, там.
Go to the top of the page
 
+Quote Post
Злодей
сообщение Nov 12 2009, 02:04
Сообщение #6


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

Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142



Ага, значит здесь он нужен для "согласования импеданса". Здоровский у Вас там пост, спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 15:14
Рейтинг@Mail.ru


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