Kitsok 0 22 ноября, 2007 Опубликовано 22 ноября, 2007 · Жалоба На "трансляторе" производится стробирование принимаемых данных входной тактовой и таким образом вносится гарантированный сдвиг ровно на один бит. Передавать будете в первых восьми битах а принимать в последних восьми. P.S. А вообще так SPI c TTL уровнями использовать это махровое радиолюбительство :(. "Транслятор" - это как я понимаю, просто "И"? И ставить его надо в той точке, где сдвиг составляет аккурат пол-фазы? Поправьте плиз, если не так, я что-то механику процесса не понимаю. P.S. дык на профессионализм и не претендую ни разу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 22 ноября, 2007 Опубликовано 22 ноября, 2007 · Жалоба "Транслятор" - это как я понимаю, просто "И"? И ставить его надо в той точке, где сдвиг составляет аккурат пол-фазы? Поправьте плиз, если не так, я что-то механику процесса не понимаю. Не правильно, попробую перевести слова нашего уважаемого гуру на простой язык. /*На "трансляторе" производится стробирование принимаемых данных входной тактовой и таким образом вносится гарантированный сдвиг ровно на один бит. */ Транслятор - это регистр сдвига, но с дополнительным битом. Можно посмотреть на примере LPC2xxx. Это значит. Выставлен формат не 8 бит, а 9 бит или даже более. /*Передавать будете в первых восьми битах а принимать в последних восьми.*/ Это значит, что мастер полезную информацию передает без смещения, а принятую информацию рассматривает как сдвинутую на 1 бит, т.к. самый первый принятый бит пройдет со смещением на такт из-за задержек. Т.е. формально принятый первый бит для мастера - это еще не информация. P.S. дык на профессионализм и не претендую ни разу. Не обижайтесь. PS. Надеюсь, не запутал Вас окончательно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 22 ноября, 2007 Опубликовано 22 ноября, 2007 · Жалоба Не правильно, попробую перевести слова нашего уважаемого гуру на простой язык. /*На "трансляторе" производится стробирование принимаемых данных входной тактовой и таким образом вносится гарантированный сдвиг ровно на один бит. */ Транслятор - это регистр сдвига, но с дополнительным битом. Можно посмотреть на примере LPC2xxx. Это значит. Выставлен формат не 8 бит, а 9 бит или даже более. /*Передавать будете в первых восьми битах а принимать в последних восьми.*/ Это значит, что мастер полезную информацию передает без смещения, а принятую информацию рассматривает как сдвинутую на 1 бит, т.к. самый первый принятый бит пройдет со смещением на такт из-за задержек. Т.е. формально принятый первый бит для мастера - это еще не информация. Не обижайтесь. PS. Надеюсь, не запутал Вас окончательно. Запутал окончательно ;) Да и день тяжелый был, поэтому попробую еще проще, поправьте плиз. Есть длинная цепочка сдвиговых регистров, работающих, допустим на ввод, т.е. от ближайшего к контроллеру регистра идет MISO. Регистры все 8-битрые, параллельный ввод - последовательный вывод. Допустим, регистр выдает данные данные по фронту CLK, мастер забирает их по спаду. Вдоль цепочки растет сдвиг по фазе Проблема: если цепочка достаточно длинная, да еще и буферы на CLK стоят, то пока фронт "доедет" до последнего регистра, и тот выдаст данные на свой серийный выход, мастер уже давно опустил CLK и ожидает на входе получить бит. По мере удаления от мастера разбег увеличивается, и получается так, что очередной регистр пропускает бит от соседа. Пока правильно? Как решение - поставить посредине 9-битный регистр? Вот тут я уже нахожусь в клинах.... Если на мастере выставить 9 бит, то по вводу вроде особых проблем нет, а вот по выводу? Этот 9-й бит вылезет на первом-же регистре.... Ткните, пожалуйста, носом в ссылку, где эта проблема разбирается, если такие ссылке в природе есть... P.S. Я и не обижаюсь. Хоть и МИФИ заканчивал, занимаюсь ну совсем не электроникой. Ну то есть, даже рядом не валялось ;) Да и в МИФИ два семестра всего электроники-то было.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 22 ноября, 2007 Опубликовано 22 ноября, 2007 · Жалоба "Транслятор" - это как я понимаю, просто "И"? Транслятор это Ваше некое устройство при прохождении сигналов через которое неизбежно образуется задержка. "Ставить" его не надо оно у Вас неизбежно существует. Как решение - поставить посредине 9-битный регистр? Разумеется нет. Если на мастере выставить 9 бит, то по вводу вроде особых проблем нет, а вот по выводу? Этот 9-й бит вылезет на первом-же регистре.... Так рассчитывайте на то, что вылезет. Ткните, пожалуйста, носом в ссылку, где эта проблема разбирается, если такие ссылке в природе есть... Сссылок нет. Придумано и реализовано было для пропуска 30MHz SPI через коммутатор на FPGA. Идея простая, вроде описал достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 22 ноября, 2007 Опубликовано 22 ноября, 2007 · Жалоба Так рассчитывайте на то, что вылезет. Я, кажется, понял. Но для реализации идеи нужна "обратная связь", т.е. контроллер должен прочитать назад то, что послал. Это не мой случай, у меня ветки передачи и приема не связаны.... Можно, конечно, эмпирическим путем найти регистр, на котором этот 9-й бит на самом деле станет 8-м, но такая куча битовой арифметики, да на 2 килобайтах посылки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 22 ноября, 2007 Опубликовано 22 ноября, 2007 · Жалоба Но для реализации идеи нужна "обратная связь", т.е. контроллер должен прочитать назад то, что послал. Нееет! Можно, конечно, эмпирическим путем ... Какая 'эмпирика'? Все абсолютно предопределено при тактировании MISO следующим (противоположным) фронтом CLK. Сдвиг будет на один бит на каждом из "трансляторов" (если угодно - "регенераторов" ) включеных в цепочку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба Запутал окончательно ;) Да уж. Попробую еще раз и еще проще и от печки. :) SPI - синхронный интерфейс, т.е. синхронизация ведется по CLK мастера. Мастер и слэйв обмениваются информацией фиксированной длины. Для слэйва задержки неактуальны, т.к. входные данные (от мастера) и тактовая частота CLK (от мастера) имеют одинаковые задержки. Для мастера задержка актуальна, т.к. входные данные (от слэйва) и тактовая частота (мастера) имеют значительную задержку. Т.к. передающий механизм (и принимающий) регистры сдвига, то для мастера новая информация появится позже на 1 такт CLK (точнее раньше, но будет стоять). Т.е. мастер принимает информацию со сдвигом на 1 такт CLK. А решение этой проблемы приведено выше. PS. Проще уже никак. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба В синхронных системах приема-передачи кроме выравнивания длин проводов и согласования волновых сопротивлений делается еще финт с возвратным сигналом синхронизации. Т.е. приемники на том и этом конце провода тактируются каждый своим 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 такая реализация чаще всего невозможна. На ПЛИС же - как два байта переслать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба Чувствую себя тупым хвойным деревом "Дуб". Простите меня, пожалуйста, что я так трудно дохожу. Беру таймаут на подумать и порисовать. На всякий случай, предпосылки такие: 1. Заранее не известна длина кабелей между модулями. 2. Заранее не известно количество каскадированных регистров. Есть максимальное количество, которое обусловлено размерами буферов в приложении в контроллере. Похоже, самым простым способом понять будет попробовать 9-битную посылку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 28 ноября, 2007 Опубликовано 28 ноября, 2007 · Жалоба Для мастера задержка актуальна, т.к. входные данные (от слэйва) и тактовая частота (мастера) имеют значительную задержку. Т.к. передающий механизм (и принимающий) регистры сдвига, то для мастера новая информация появится позже на 1 такт CLK (точнее раньше, но будет стоять). Т.е. мастер принимает информацию со сдвигом на 1 такт CLK. А решение этой проблемы приведено выше. PS. Проще уже никак. Смотрите, у меня сейчас стоит цепочка из 8 регистров ('165) - слейвов. CLK инвертирован относительно того, который идет на '595, все работает, т.е. мастер получает ожидаемую информацию в ожидаемое время (не помню уже точно, по-моему, спада CLK). Проблема возникнет когда цепочка будет настолько длинная, что задержка распространения CLK до регистра + время на переключение регистра превысит пол-периода CLK. Вот в этом случае - да, бит потеряется. Правильно я понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 28 ноября, 2007 Опубликовано 28 ноября, 2007 · Жалоба Смотрите, у меня сейчас стоит цепочка из 8 регистров ('165) - слейвов. CLK инвертирован относительно того, который идет на '595, все работает, т.е. мастер получает ожидаемую информацию в ожидаемое время (не помню уже точно, по-моему, спада CLK). Т.е. у Вас есть запас пол периода. Слэйв сдвинется раньше, чем требуется мастеру. Проблема возникнет когда цепочка будет настолько длинная, что задержка распространения CLK до регистра + время на переключение регистра превысит пол-периода CLK. Вот в этом случае - да, бит потеряется. Правильно я понимаю? Почти. Проблема возникнет когда цепочка будет настолько длинная, что задержка распространения CLK до регистра + время на переключение регистра + время распространения данных от слэйва до мастера превысит Ваш запас. Вот в этом случае - да, бит потеряется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Проблема возникнет когда цепочка будет настолько длинная, что задержка распространения CLK до регистра + время на переключение регистра + время распространения данных от слэйва до мастера превысит Ваш запас. Вот в этом случае - да, бит потеряется. Ну вот это я понимаю вроде ;) Так вот вопрос - а как поможет 9-битная посылка? Да, будет запас у нас в период, и бит не потеряется, а "сдвинется". Но без обратной связи ведь не определить, на каком именно регистре произошла потеря? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Ну вот это я понимаю вроде ;) Замечательно. Лед тронулся, господа ...(И. и П.) Так вот вопрос - а как поможет 9-битная посылка? Да, будет запас у нас в период, и бит не потеряется, а "сдвинется". Это значит, что это надо учесть. Но без обратной связи ведь не определить, на каком именно регистре произошла потеря? Если Вы хотите анализировать (кто виноват и что делать (Чернышевский)), то посылайте заранее известную выдачу от слэйва. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Это значит, что это надо учесть. Для того, чтобы это учесть, нужно знать какой бит в каком 9-битном слове является не номером N, а номером N+1, а этого без обратной связи, не узнать. Если Вы хотите анализировать (кто виноват и что делать (Чернышевский)), то посылайте заранее известную выдачу от слэйва. Слейв - это просто регистры, к которым подключены кнопки, тумблеры и энкодеры. MOSI, исходящее от мастера, никогда не попадает никаким образом на MISO :) Цепочки регистров на ввод и на вывод не связаны никак. Вот поэтому я и не могу понять, как поможет 9-битная посылка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Да уж... Для того, чтобы это учесть, нужно знать какой бит в каком 9-битном слове является не номером N, а номером N+1, а этого без обратной связи, не узнать. Биты или сдвинуты все или не сдвинуты не один. Это фиксированная величина для конкретного слейва. Что за обратная связь я не понимаю. Слейв - это просто регистры, к которым подключены кнопки, тумблеры и энкодеры. Понял Вас. Слейву информация от мастера не нужна. MOSI, исходящее от мастера, никогда не попадает никаким образом на MISO :) А кто Вам такое мог сказать ? Цепочки регистров на ввод и на вывод не связаны никак. Вот поэтому я и не могу понять, как поможет 9-битная посылка. Объясняю, на Вашем примере. 1. По сигналу выбора слейв устройства, Вы пишете состояние кнопкок, тумблеров и энкодеров в регистр сдвига слейва (я так думаю). :) 2. По сигналу CLK передаваемая от мастера информация игнорируется слейвом. Это мы выяснили. 3. По сигналу CLK информация в регистре сдвига сдвигается, и поступает в мастер. 4. По своему же CLK мастер сдвигает принятую информацию. А теперь контрольные вопросы Вам, чтобы понять, где мы находимся. А. Что будет: - если информация от слейва на момент сдвига мастером еще не дошла - а если уже дошла. Б. Меняется ли задержка прихода информации для конкретного слейв устройства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться