Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 12.06.2010, 05:22  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
Вопрос Пакетная синхронизация в SPI

Сижу-никак не соображу.
Есть две аврки, между собой соеденины по SPI. Одна постоянно мастер, другая - слэйв.

Мастер кидает пакет, в ответ на который слэйв выполняет нужные действия. Пакет в формате [ключевой символ (назначение пакета)][данные][CRC].

Принимает-то он принимает, но где начало пакета, а где конец - не знает.

Пока вижу только один выход. Преобразовывать все в ascii символы, ну а там уже будет символ начала пакета и символ конца. Но это ресурсы - время и память - преобразование в ascii, в слэйве обратно.
Но ведь есть пакетная синхронизация - вывод слэйв селект. Только вот никакого события камень не генерит при изменении уровня. Да, SPI-то включается, но прерывания нет. Только по приходу байта. А ждать в цикле времени нет...

Есть у кого-нибудь соображения?
Реклама:
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 12.06.2010, 07:23  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: пакетная синхронизация в SPI

Сообщение от alberio Посмотреть сообщение
Есть у кого-нибудь соображения?
Если АВР свежая, то есть PCINT - настраиваем на фронт у SS и будет прерывание.
Если не свежая, то можно соединить SS с любым входом внешнего прерывания INTх, или даже на захват или компаратор. Правда одним выводом придется пожертвовать.
kison вне форума  
Непрочитано 12.06.2010, 07:42  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: пакетная синхронизация в SPI

отследить конец пакета - поставить небольшую задержку (десяток циклов) после приема байта и программно отслеживая уровень на СС. Следовательно следующий байт - начало нового пакета
niXto вне форума  
Непрочитано 12.06.2010, 11:44  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пакетная синхронизация в SPI

Запускать таймер по приходу первого такта. По переполнению таймера заканчивать прием. Если принят весь пакет, останавливать таймер.
Easyrider83 вне форума  
Непрочитано 12.06.2010, 12:06  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,727
Сказал спасибо: 2,417
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Пакетная синхронизация в SPI

А если пакеты разной длины?
Проще, если есть гарантированная пауза между пакетами.
baiderin вне форума  
Непрочитано 12.06.2010, 12:15  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пакетная синхронизация в SPI

Ну тогда ключевой символ должен обнулять приемный массив, куда данные сваливаются. Я обычно такое на прерывании делаю. Пришел байт, сваливаем его в массив. Если байт начальный, обнуляем массив. Если длинна массива = длинне вашей передачи, ждать CRC, сравнить CRC, если верно, выставить флаг готово. Примерно так.
Easyrider83 вне форума  
Непрочитано 12.06.2010, 13:10  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,948
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Пакетная синхронизация в SPI

Сообщение от alberio Посмотреть сообщение
.
Принимает-то он принимает, но где начало пакета, а где конец - не знает.
Вы же говорили, что у вас есть маркер начала пакета. В принципе, более ничего и не надо (SS - тоже надо время от времени делать, но это борьба с помехой - например, лишним или пропавшим стробом).

А так логика проста. Прерывание приема байта по SPI - там есть режим приема. То есть - ждем маркер, принимаем данные, конец - прием контрсуммы. За маркером может еще идти инфо о длине и назначении данных.

Если в режиме "ждем маркер" принят не маркер - просто ничего не делать.

Я как-то так делал двусторонний обмен между двумя МК (так получилось, что пришлось по SPI - хотя понятно, что это "через зад"). Я сделал так - мастер всегда передавал. Если ему сказать слэйву было нечего - передавал нули. Зато слэйв мог все время передавать и мастеру.

И протокол был такой (с обоих сторон) - 0 - ничего не делаем, ждем маркер. Принят маркер - следующий - идентификатор, котрый дает инфо - сколько байт и куда покласть после проверки КС. Принят идентификатор - знаем, сколько байт информации принять в буфер. Принято все - принимаем последний, контрсумму, проверяем, и если Ок - кладем на место и флаг.

Хотел сделать еще - если ошибка в КС, то дернуть SS, но МК были рядом и помех просто не наблюдалось, потому так и не реализовал

Ну а то что 99% времени туда-сюда гонялись нули - так это МК не особо-то нагружало, вошел в прерывание - нуль - самому сказать нечего - нуль - и выход. Пару десятков тактов
__________________
[ жизнь приятна и красива, если выпить литр пива ]

Последний раз редактировалось nml; 12.06.2010 в 13:13.
nml вне форума  
Непрочитано 12.06.2010, 17:41  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: Пакетная синхронизация в SPI

Сообщение от Easyrider83 Посмотреть сообщение
Ну тогда ключевой символ должен обнулять приемный массив, куда данные сваливаются. Я обычно такое на прерывании делаю. Пришел байт, сваливаем его в массив. Если байт начальный, обнуляем массив. Если длинна массива = длинне вашей передачи, ждать CRC, сравнить CRC, если верно, выставить флаг готово. Примерно так.
Так, примерно, я сейчас и делаю... Хотелось просто поавтоматизированей
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Однокристальные трансиверы TRC101 от RFM... Panchiks Автоматика и аппаратура связи 340 15.05.2017 21:10
Простейший программатор SPI EEPROM dimmich Микроконтроллеры, АЦП, память и т.д 6 09.08.2010 23:08
SPI по шлейфу. Gnider Микроконтроллеры, АЦП, память и т.д 14 06.04.2010 06:40
Несколько устройств на SPI spballiance Микроконтроллеры, АЦП, память и т.д 17 17.03.2010 00:51
Помогите с ЦАП AD7708/AD7718 или их аналогами ST_Senya Микроконтроллеры, АЦП, память и т.д 9 30.11.2009 19:03


Часовой пояс GMT +4, время: 14:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot