Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Зачем в SPI синхронизация по разным фронтам
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Схемотехника
Arlleex
Собственно, почему там не обычные сдвиговые регистры, а по отдельным фронтам защелка, по отдельным - выдача на линию...
Ведь, вроде бы, по одному фронту вообще все хорошо выходит...
kovigor
Цитата(Arlleex @ Sep 17 2015, 19:17) *
... по отдельным фронтам защелка, по отдельным - выдача на линию...

Насколько я помню, там по одному и тому же фронту и защелкивание данных от передатчика, и выдача данных приемнику. Просто у Slave - устройства линии разные на прием и на передачу - MOSI и MISO. Или я вопроса не понял ?
Arlleex
SPI - вот, по разным фронтам CLK (синяя и красная линии) происходит так называемая "защелка" и "сдвиг".
Но ведь D-триггер, входящий в состав регистра сдвига (основного рабочего органа SPI-автомата), по одному фронту "защелкивает", одновременно сдвигая данные... А SPI - не по одному, а по двум. Вот вопрос и в том, почему это так, да и наводит на мысль, что там не обычный сдвиговый регистр. Хотелось бы докопаться до истины.
kovigor
Цитата(Arlleex @ Sep 17 2015, 19:48) *
SPI - вот, по разным фронтам CLK (синяя и красная линии) происходит так называемая "защелка" и "сдвиг".

В одном и том же режиме и фронт один и тот же. В разных режимах разные фронты. Но ведь одновременно в разных режимах никто не работает ...
Arlleex
Нет, не один и тот же.
Вот берем любой режим. Пусть CPOL = 0, CPHA = 0.
По переднему фронту CLK - защелка данных, по заднему - установка новых данных.
MiklPolikov
Так сложилось исторически. Не смогли производители договорится об одном единственном стандарте. Поэтому каждый производитель процессора с SPI вынужден делать возможность настраивать фронты по-разному. Не нужно искать логики и смысла абсолютно во всём.
Arlleex
Я ищу в этом логику в поиске какого-то утаенного от меня скрытого смысла. Ну я думал в этом есть какой-то хитрый план, начиная от помехозащищенности и заканчивая универсализацией...
Herz
Там действительно и сдвиговый регистр, и защёлка. По обеим фронтам для того, чтобы убрать задержку распространения.
Arlleex
Herz, конкретика - лучшее, что может быть сейчас =) И зачем убирать задержку распространения? Без нее и сдвиговый регистр работать не будет.
ViKo
Затем... Представим, передаем данные, меняющиеся по фронту, и сами такты. И по дороге такты слегка отстали, емкость там большая или еще чего. Получаем данные на приемной стороне непосредственно перед фронтом тактового сигнала. Нарушение времени предустановки. А так - защелкнули срезом, с гарантией, что достаточно и времени предустановки и времени удержания.
Это только внутри регистра или в ПЛИС данные надежно выскакивают после фронта такта. sm.gif В ПЛИС об этом думает компилятор или укладчик, как-то так.
Arlleex
Кстати, нашел еще кое-что связанное с этим, метастабильностью называется. Подобный изврат с SPI - что-то типа один из методов борьбы с ним...
http://geektimes.ru/post/254934/ - тут подробнее.
Интересно, конечно, как в железе реализуется раздельное управление фронтами. Думаю, я еще вернусь к этому вопросу =)
ViKo
Цитата(Arlleex @ Sep 17 2015, 21:39) *
Кстати, нашел еще кое-что связанное с этим, метастабильностью называется.

Вот именно. Специалисты по ПЛИС в этом разбираются. И мучаются иногда.
dxp
QUOTE (Arlleex @ Sep 17 2015, 23:29) *
Я ищу в этом логику в поиске какого-то утаенного от меня скрытого смысла. Ну я думал в этом есть какой-то хитрый план, начиная от помехозащищенности и заканчивая универсализацией...



QUOTE (Arlleex @ Sep 17 2015, 23:46) *
Herz, конкретика - лучшее, что может быть сейчас =) И зачем убирать задержку распространения? Без нее и сдвиговый регистр работать не будет.

Не очень понятно, что вас смущает. Устроено, как раз, по здравому смыслу: один фронт клока DRIVE EDGE, второй - SAMPLE EDGE, по DRIVE EDGE и мастер, и слейв выставляют свои данные на линии (MOSI и MISO соответственно), по SAMPLE EDGE забирают. Никаких коллизий не возникает, все успевают, всё работает слаженно.

А если один фронт, то представьте себе, что, например, мастер выдаёт и забирает данные по одному и тому же фронту: вот выставил он данные на MOSI, выдал фронт на SCK, но в этот момент - если этот же фронт для мастера является и семплирующим - данные от слейва на MISO уже должны уверенно (т.е. соблюдением tSU и учётом tPD) стоять! Как слейв в этой ситуации узнает, что он должен выдавать данные - он ведь не может телепатировать от мастера, что тот сейчас будет выдавать фронт? В этом случае просто придётся от слейва данные гнать с задержкой на один такт. Это ни разу не упрощение, а наоборот усложнение логики и ухудшение скорости обмена.

Вот как-то так. Если, конечно, я правильно понял ваш вопрос. Если нет, не обессудьте. sm.gif
Plain
По стандарту, т.е. в оригинале Motorola, снаружи интерфейса всё и всеми двигается по единому одному перепаду тактового сигнала, а внутри всех устройств все принятые ими данные переписываются из его сдвиговых регистров в какие-либо их внутренние буферы, стробируются, и т.п., по единому противоположному его перепаду.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.