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

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

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

P.S.

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

 

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

 

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

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


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

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

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

 

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

 

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

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

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

 

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

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

 

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

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

 

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

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


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

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

 

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

 

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

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

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

 

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

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

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

 

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

 

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

 

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

 

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

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

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

 

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

 

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

 

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

 

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

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


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

"Транслятор" - это как я понимаю, просто "И"?

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

 

 

 

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

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

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

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

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

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

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

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


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

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

 

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

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

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

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


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

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

Нееет!

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

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

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

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


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

Запутал окончательно ;)

Да уж.

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

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

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

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

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

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

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

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

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


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

В синхронных системах приема-передачи кроме выравнивания длин проводов и согласования волновых сопротивлений делается еще финт с возвратным сигналом синхронизации. Т.е. приемники на том и этом конце провода тактируются каждый своим 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 такая реализация чаще всего невозможна. На ПЛИС же - как два байта переслать.

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


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

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

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

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

 

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

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

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

 

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

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


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

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

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

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

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

 

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

 

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

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


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

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

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

 

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

Почти.

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

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


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

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

 

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

 

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

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


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

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

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

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

 

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

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

 

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

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

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


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

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

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

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

 

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

 

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

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


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

Да уж...

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

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

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

 

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

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

 

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

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

 

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

 

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

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

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

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

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

 

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

А. Что будет:

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

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

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

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


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

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

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

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

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

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

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

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

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

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