Jump to content

    

SPI на 12 МГц через длинные провода

На "трансляторе" производится стробирование принимаемых данных входной тактовой и таким образом вносится гарантированный сдвиг ровно на один бит. Передавать будете в первых восьми битах а принимать в последних восьми.

P.S.

А вообще так SPI c TTL уровнями использовать это махровое радиолюбительство :(.

 

"Транслятор" - это как я понимаю, просто "И"? И ставить его надо в той точке, где сдвиг составляет аккурат пол-фазы? Поправьте плиз, если не так, я что-то механику процесса не понимаю.

 

P.S. дык на профессионализм и не претендую ни разу.

Share this post


Link to post
Share on other sites
"Транслятор" - это как я понимаю, просто "И"? И ставить его надо в той точке, где сдвиг составляет аккурат пол-фазы? Поправьте плиз, если не так, я что-то механику процесса не понимаю.

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

 

/*На "трансляторе" производится стробирование принимаемых данных входной тактовой и таким образом вносится гарантированный сдвиг ровно на один бит. */

 

Транслятор - это регистр сдвига, но с дополнительным битом.

Можно посмотреть на примере LPC2xxx.

Это значит. Выставлен формат не 8 бит, а 9 бит или даже более.

 

/*Передавать будете в первых восьми битах а принимать в последних восьми.*/

Это значит, что мастер полезную информацию передает без смещения, а принятую информацию рассматривает как сдвинутую на 1 бит, т.к. самый первый принятый бит пройдет со смещением на такт из-за задержек. Т.е. формально принятый первый бит для мастера - это еще не информация.

 

P.S. дык на профессионализм и не претендую ни разу.

Не обижайтесь.

 

PS. Надеюсь, не запутал Вас окончательно.

Share this post


Link to post
Share on other sites
Не правильно, попробую перевести слова нашего уважаемого гуру на простой язык.

 

/*На "трансляторе" производится стробирование принимаемых данных входной тактовой и таким образом вносится гарантированный сдвиг ровно на один бит. */

 

Транслятор - это регистр сдвига, но с дополнительным битом.

Можно посмотреть на примере LPC2xxx.

Это значит. Выставлен формат не 8 бит, а 9 бит или даже более.

 

/*Передавать будете в первых восьми битах а принимать в последних восьми.*/

Это значит, что мастер полезную информацию передает без смещения, а принятую информацию рассматривает как сдвинутую на 1 бит, т.к. самый первый принятый бит пройдет со смещением на такт из-за задержек. Т.е. формально принятый первый бит для мастера - это еще не информация.

Не обижайтесь.

 

PS. Надеюсь, не запутал Вас окончательно.

 

Запутал окончательно ;) Да и день тяжелый был, поэтому попробую еще проще, поправьте плиз.

 

Есть длинная цепочка сдвиговых регистров, работающих, допустим на ввод, т.е. от ближайшего к контроллеру регистра идет MISO. Регистры все 8-битрые, параллельный ввод - последовательный вывод. Допустим, регистр выдает данные данные по фронту CLK, мастер забирает их по спаду.

 

Вдоль цепочки растет сдвиг по фазе

Проблема: если цепочка достаточно длинная, да еще и буферы на CLK стоят, то пока фронт "доедет" до последнего регистра, и тот выдаст данные на свой серийный выход, мастер уже давно опустил CLK и ожидает на входе получить бит.

По мере удаления от мастера разбег увеличивается, и получается так, что очередной регистр пропускает бит от соседа. Пока правильно?

 

Как решение - поставить посредине 9-битный регистр? Вот тут я уже нахожусь в клинах....

 

Если на мастере выставить 9 бит, то по вводу вроде особых проблем нет, а вот по выводу? Этот 9-й бит вылезет на первом-же регистре....

 

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

 

P.S. Я и не обижаюсь. Хоть и МИФИ заканчивал, занимаюсь ну совсем не электроникой. Ну то есть, даже рядом не валялось ;) Да и в МИФИ два семестра всего электроники-то было....

Share this post


Link to post
Share on other sites
"Транслятор" - это как я понимаю, просто "И"?

Транслятор это Ваше некое устройство при прохождении сигналов через которое неизбежно образуется задержка. "Ставить" его не надо оно у Вас неизбежно существует.

 

 

 

Как решение - поставить посредине 9-битный регистр?

Разумеется нет.

Если на мастере выставить 9 бит, то по вводу вроде особых проблем нет, а вот по выводу? Этот 9-й бит вылезет на первом-же регистре....

Так рассчитывайте на то, что вылезет.

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

Сссылок нет. Придумано и реализовано было для пропуска 30MHz SPI через коммутатор на FPGA.

Идея простая, вроде описал достаточно.

Share this post


Link to post
Share on other sites
Так рассчитывайте на то, что вылезет.

 

Я, кажется, понял.

Но для реализации идеи нужна "обратная связь", т.е. контроллер должен прочитать назад то, что послал. Это не мой случай, у меня ветки передачи и приема не связаны....

Можно, конечно, эмпирическим путем найти регистр, на котором этот 9-й бит на самом деле станет 8-м, но такая куча битовой арифметики, да на 2 килобайтах посылки...

Share this post


Link to post
Share on other sites
Но для реализации идеи нужна "обратная связь", т.е. контроллер должен прочитать назад то, что послал.

Нееет!

Можно, конечно, эмпирическим путем ...

Какая 'эмпирика'? Все абсолютно предопределено при тактировании MISO

следующим (противоположным) фронтом CLK. Сдвиг будет на один бит на каждом из "трансляторов" (если угодно - "регенераторов" ) включеных в цепочку.

Share this post


Link to post
Share on other sites
Запутал окончательно ;)

Да уж.

Попробую еще раз и еще проще и от печки. :)

SPI - синхронный интерфейс, т.е. синхронизация ведется по CLK мастера.

Мастер и слэйв обмениваются информацией фиксированной длины.

Для слэйва задержки неактуальны, т.к. входные данные (от мастера) и тактовая частота CLK (от мастера) имеют одинаковые задержки.

Для мастера задержка актуальна, т.к. входные данные (от слэйва) и тактовая частота (мастера) имеют значительную задержку.

Т.к. передающий механизм (и принимающий) регистры сдвига, то для мастера новая информация появится позже на 1 такт CLK (точнее раньше, но будет стоять). Т.е. мастер принимает информацию со сдвигом на 1 такт CLK.

А решение этой проблемы приведено выше.

PS. Проще уже никак.

Share this post


Link to post
Share on other sites

В синхронных системах приема-передачи кроме выравнивания длин проводов и согласования волновых сопротивлений делается еще финт с возвратным сигналом синхронизации. Т.е. приемники на том и этом конце провода тактируются каждый своим CLK, который имеет такую же задержку как и данные.

Приемник на удаленном ведомом (slave) устройстве тактируется сигналом CLK и принимает данные от MOSI, а приемник на ведущем (master) принимает от MISO, но тактируется сигналом CLK_RET, который является тем же самым CLK, который генерирует сам ведущий, но прошедшим двойной путь "туда" (до slave) и "обратно" (до master).

Графически можно изобразить так

SPI master --- SPI slave
-----------------------
CLK ----------> CLK
                |
CLK_RET <-------|
MOSI --------> MOSI
MISO <-------- MISO
CS(OUT) -----> CS(IN)

В микроконтроллерах со встроенным контроллером SPI такая реализация чаще всего невозможна. На ПЛИС же - как два байта переслать.

Share this post


Link to post
Share on other sites

Чувствую себя тупым хвойным деревом "Дуб".

Простите меня, пожалуйста, что я так трудно дохожу.

Беру таймаут на подумать и порисовать.

 

На всякий случай, предпосылки такие:

1. Заранее не известна длина кабелей между модулями.

2. Заранее не известно количество каскадированных регистров. Есть максимальное количество, которое обусловлено размерами буферов в приложении в контроллере.

 

Похоже, самым простым способом понять будет попробовать 9-битную посылку.

Share this post


Link to post
Share on other sites
Для мастера задержка актуальна, т.к. входные данные (от слэйва) и тактовая частота (мастера) имеют значительную задержку.

Т.к. передающий механизм (и принимающий) регистры сдвига, то для мастера новая информация появится позже на 1 такт CLK (точнее раньше, но будет стоять). Т.е. мастер принимает информацию со сдвигом на 1 такт CLK.

А решение этой проблемы приведено выше.

PS. Проще уже никак.

 

Смотрите, у меня сейчас стоит цепочка из 8 регистров ('165) - слейвов. CLK инвертирован относительно того, который идет на '595, все работает, т.е. мастер получает ожидаемую информацию в ожидаемое время (не помню уже точно, по-моему, спада CLK).

 

Проблема возникнет когда цепочка будет настолько длинная, что задержка распространения CLK до регистра + время на переключение регистра превысит пол-периода CLK. Вот в этом случае - да, бит потеряется. Правильно я понимаю?

Share this post


Link to post
Share on other sites
Смотрите, у меня сейчас стоит цепочка из 8 регистров ('165) - слейвов. CLK инвертирован относительно того, который идет на '595, все работает, т.е. мастер получает ожидаемую информацию в ожидаемое время (не помню уже точно, по-моему, спада CLK).

Т.е. у Вас есть запас пол периода. Слэйв сдвинется раньше, чем требуется мастеру.

 

Проблема возникнет когда цепочка будет настолько длинная, что задержка распространения CLK до регистра + время на переключение регистра превысит пол-периода CLK. Вот в этом случае - да, бит потеряется. Правильно я понимаю?

Почти.

Проблема возникнет когда цепочка будет настолько длинная, что задержка распространения CLK до регистра + время на переключение регистра + время распространения данных от слэйва до мастера превысит Ваш запас. Вот в этом случае - да, бит потеряется.

Share this post


Link to post
Share on other sites
Проблема возникнет когда цепочка будет настолько длинная, что задержка распространения CLK до регистра + время на переключение регистра + время распространения данных от слэйва до мастера превысит Ваш запас. Вот в этом случае - да, бит потеряется.

 

Ну вот это я понимаю вроде ;)

 

Так вот вопрос - а как поможет 9-битная посылка? Да, будет запас у нас в период, и бит не потеряется, а "сдвинется". Но без обратной связи ведь не определить, на каком именно регистре произошла потеря?

Share this post


Link to post
Share on other sites
Ну вот это я понимаю вроде ;)

Замечательно.

Лед тронулся, господа ...(И. и П.)

 

Так вот вопрос - а как поможет 9-битная посылка? Да, будет запас у нас в период, и бит не потеряется, а "сдвинется".

Это значит, что это надо учесть.

 

Но без обратной связи ведь не определить, на каком именно регистре произошла потеря?

Если Вы хотите анализировать (кто виноват и что делать (Чернышевский)), то посылайте заранее известную выдачу от слэйва.

Share this post


Link to post
Share on other sites
Это значит, что это надо учесть.

Для того, чтобы это учесть, нужно знать какой бит в каком 9-битном слове является не номером N, а номером N+1, а этого без обратной связи, не узнать.

Если Вы хотите анализировать (кто виноват и что делать (Чернышевский)), то посылайте заранее известную выдачу от слэйва.

 

Слейв - это просто регистры, к которым подключены кнопки, тумблеры и энкодеры. MOSI, исходящее от мастера, никогда не попадает никаким образом на MISO :)

 

Цепочки регистров на ввод и на вывод не связаны никак. Вот поэтому я и не могу понять, как поможет 9-битная посылка.

Share this post


Link to post
Share on other sites

Да уж...

Для того, чтобы это учесть, нужно знать какой бит в каком 9-битном слове является не номером N, а номером N+1, а этого без обратной связи, не узнать.

Биты или сдвинуты все или не сдвинуты не один. Это фиксированная величина для конкретного слейва.

Что за обратная связь я не понимаю.

 

Слейв - это просто регистры, к которым подключены кнопки, тумблеры и энкодеры.

Понял Вас. Слейву информация от мастера не нужна.

 

MOSI, исходящее от мастера, никогда не попадает никаким образом на MISO :)

А кто Вам такое мог сказать ?

 

Цепочки регистров на ввод и на вывод не связаны никак. Вот поэтому я и не могу понять, как поможет 9-битная посылка.

 

Объясняю, на Вашем примере.

1. По сигналу выбора слейв устройства, Вы пишете состояние кнопкок, тумблеров и энкодеров в регистр сдвига слейва (я так думаю). :)

2. По сигналу CLK передаваемая от мастера информация игнорируется слейвом. Это мы выяснили.

3. По сигналу CLK информация в регистре сдвига сдвигается, и поступает в мастер.

4. По своему же CLK мастер сдвигает принятую информацию.

 

А теперь контрольные вопросы Вам, чтобы понять, где мы находимся.

А. Что будет:

- если информация от слейва на момент сдвига мастером еще не дошла

- а если уже дошла.

Б. Меняется ли задержка прихода информации для конкретного слейв устройства.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this