реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> SPI на 12 МГц через длинные провода
Сергей Борщ
сообщение Nov 29 2007, 11:25
Сообщение #31


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Kitsok @ Nov 29 2007, 11:20) *
Слейв - это просто регистры, к которым подключены кнопки, тумблеры и энкодеры. MOSI, исходящее от мастера, никогда не попадает никаким образом на MISO smile.gif
Привесьте в хвост цепочки еще один регистр, на входе которого выставьте заранее известное значение (0xA5). В принимаемом сигнале ищите эту комбинацию как маркер конца. Можно взять не A5 а какую-либо из последовательностей Баркера или Уилларда(?). Или еще лучше - формировать биты такой последовательности с прямого и инвесного выходов делителя на 2 сигнала загрузки входов регистра. Тогда на каждом цикле считывания будете иметь инвертированный маркер, существенно ниже вероятность спутать его с такой же комбинацией входных сигналов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 29 2007, 11:54
Сообщение #32


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(alexander55 @ Nov 29 2007, 13:31) *
Биты или сдвинуты все или не сдвинуты не один. Это фиксированная величина для конкретного слейва.
Что за обратная связь я не понимаю.

wink.gif Вот тут я не понимаю. Получается, что если у меня сейчас работает с восемью 74HC165, то будет работать и с 8000? Сомневаюсь.

Цитата
Понял Вас. Слейву информация от мастера не нужна.
А кто Вам такое мог сказать ?

Это медицинский факт wink.gif
Цитата
Объясняю, на Вашем примере.
1. По сигналу выбора слейв устройства, Вы пишете состояние кнопкок, тумблеров и энкодеров в регистр сдвига слейва (я так думаю). smile.gif
2. По сигналу CLK передаваемая от мастера информация игнорируется слейвом. Это мы выяснили.

Совершенно верны оба два утверждения

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

По тому-же CLK, только инвертированному. Или задержку при прохождении через инвертор тоже имеет смысл здесь учесть?

Цитата
А теперь контрольные вопросы Вам, чтобы понять, где мы находимся.
А. Что будет:
- если информация от слейва на момент сдвига мастером еще не дошла

Бит потеряется где-то между двух регистров(n и n+1) посредине цепочки. В том месте, где на n задержка прохождения CLK еще меньше полупериода, а на n+1 - уже больше. Ключевой момент. Если Вам удастся мне объяснить, прав я или нет, то буду признателен чрезвычайно wink.gif

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

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


Я этот вопрос не понимаю, у меня одно слейв устройство, состоящее из длинного каскада сдвиговых регистров. Мне так кажется, что в цепочки из N-регистров по 8 бит каждый, и если считать бит номер 0 "ближайшим" к мастеру, то время прихода k-того бита зависит от длины проводов и от N.


Цитата(Сергей Борщ @ Nov 29 2007, 14:25) *
Привесьте в хвост цепочки еще один регистр, на входе которого выставьте заранее известное значение (0xA5). В принимаемом сигнале ищите эту комбинацию как маркер конца. Можно взять не A5 а какую-либо из последовательностей Баркера или Уилларда(?). Или еще лучше - формировать биты такой последовательности с прямого и инвесного выходов делителя на 2 сигнала загрузки входов регистра. Тогда на каждом цикле считывания будете иметь инвертированный маркер, существенно ниже вероятность спутать его с такой же комбинацией входных сигналов.


А не поможет. Конец я найду, т.е. узнаю количество подключенных регистров. Но мне нужно выцепить конкретный теряющийся бит, поэтому нужно загнать в крайний регистр тестовую последовательность двойной максимально возможной длины и анализировать ее.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 29 2007, 12:14
Сообщение #33


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Kitsok @ Nov 29 2007, 13:54) *
Но мне нужно выцепить конкретный теряющийся бит
Куда ему теряться? Проблема в том, что в зависимости от длины вашей цепочки вы можете получить на вход последовательность, задержанную на n бит, где n прямо пропорционально длине цепочки и может принимать значения от 0 до забора. Вам просто нужно принимать на байт больше и по положению маркера вычислять сдвиг принятых данных. Если я правильно понял.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 29 2007, 12:20
Сообщение #34


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Kitsok @ Nov 29 2007, 14:54) *
Бит потеряется где-то между двух регистров(n и n+1) посредине цепочки. В том месте, где на n задержка прохождения CLK еще меньше полупериода, а на n+1 - уже больше. Ключевой момент. Если Вам удастся мне объяснить, прав я или нет, то буду признателен чрезвычайно wink.gif

Т.е. Вы хотите сказать, что у Вас SPI не 8 битный, а 8*n битный.
Ответьте на этот вопрос.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 29 2007, 13:15
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(alexander55 @ Nov 29 2007, 15:20) *
Т.е. Вы хотите сказать, что у Вас SPI не 8 битный, а 8*n битный.
Ответьте на этот вопрос.

Эээхм... Да.
Объяснюсь.
CS поднимается один раз перед передачей 4 кб (и, соответственно, приема 1 кб). На протяжении всех этих 4 кб мастер генерит CLK без сдвигов и задержек.

Цитата(Сергей Борщ @ Nov 29 2007, 15:14) *
Куда ему теряться? Проблема в том, что в зависимости от длины вашей цепочки вы можете получить на вход последовательность, задержанную на n бит, где n прямо пропорционально длине цепочки и может принимать значения от 0 до забора. Вам просто нужно принимать на байт больше и по положению маркера вычислять сдвиг принятых данных. Если я правильно понял.


Вот и я не знаю. Здравый смысл подсказывает, что при небесконечной скорости света и наличии задержек при переключениях в микросхемах, цепочка не может работать при бесконечной длине. Но логика не подсказывает, где именно и какой произойдет сбой.

Образно я вижу так - фронт сигнала (по которому должен происходить сдвиг в регистре) доезжает до некого k-того регистра с задержкой (относительно мастера) в полпериода. Т.е. когда тот k-тый регистр только выдвинул бит, мастер уже ожидает... стоп. Мастер далеко. Дыра что-ли получается в битовой последовательности? Ну не получается представить... ;(
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 29 2007, 13:21
Сообщение #36


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(alexander55 @ Nov 29 2007, 15:20) *
Т.е. Вы хотите сказать, что у Вас SPI не 8 битный, а 8*n битный.
Ответьте на этот вопрос.

Кажется я понял, с чем Вы мучаетесь.
Если у Вас 8*n битный SPI.
Решение такое.
От мастера CLK должен подходить сначала к самому дальнему слейву (самый дальний дает перенос тому, который поближе), затем ближе ... и наконец к самому ближнему, с которого данные и идут в мастер.
Произвольное подключение CLK приведет к анархии.
Волна данных по переносам должна идти вместе CLK ( иначе будет полный бардак).

Цитата(Kitsok @ Nov 29 2007, 16:15) *

Я догадался правильно. biggrin.gif
PS. Замечу только, что такая распределенная организация сдвигового регистра не особо надежна в плане передачи данных (хотя может все получится).
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 29 2007, 13:52
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(alexander55 @ Nov 29 2007, 16:21) *
Волна данных по переносам должна идти вместе CLK ( иначе будет полный бардак).
Я догадался правильно. biggrin.gif


И ведь была у меня эта мысль после той картинки с кольцеванием CLK, да постеснялся высказать wink.gif
Спасибо за наводку, буду попробовать.

Цитата
PS. Замечу только, что такая распределенная организация сдвигового регистра не особо надежна в плане передачи данных (хотя может все получится).


А альтернатива? Хотя это, видимо, не для этой ветки.
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 29 2007, 14:18
Сообщение #38


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Kitsok @ Nov 29 2007, 16:52) *
И ведь была у меня эта мысль после той картинки с кольцеванием CLK, да постеснялся высказать wink.gif
Спасибо за наводку, буду попробовать.

Хочется услышать результат (не зажимайте информацию).
Вы меня заинтриговали. smile.gif

Цитата(Kitsok @ Nov 29 2007, 16:52) *
А альтернатива? Хотя это, видимо, не для этой ветки.

Параллелить со своими CS.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 29 2007, 14:55
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Kitsok @ Nov 29 2007, 18:15) *
Т.е. когда тот k-тый регистр только выдвинул бит, мастер уже ожидает... стоп. Мастер далеко. Дыра что-ли получается в битовой последовательности? Ну не получается представить... ;(

Я вам еще в посте #22 объяснил как решается эта проблема. Каждый приемник (и мастера и слейва) тактируется своим собственным CLK. CLK приемника мастера этот тот же CLK, сгенерированный его собственным передатчиком, но прошедший путь до конца цепочки (с которого берется MISO) и обратно - CLK_RET. Такой способ используется во всех скоростных эмуляторах , которые работают с JTAG на десятках-сотнях МГц.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 29 2007, 15:31
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(rezident @ Nov 29 2007, 17:55) *
Я вам еще в посте #22 объяснил как решается эта проблема. Каждый приемник (и мастера и слейва) тактируется своим собственным CLK. CLK приемника мастера этот тот же CLK, сгенерированный его собственным передатчиком, но прошедший путь до конца цепочки (с которого берется MISO) и обратно - CLK_RET. Такой способ используется во всех скоростных эмуляторах , которые работают с JTAG на десятках-сотнях МГц.


Мне бы хотелось для начала осознать в деталях проблему wink.gif
О Вашем решении я помню. Только не очень представляю, как это реализовать с тем контроллером, который есть у меня (AT91SAM7S256). Программный SPI делать? Ну вот на это я точно не готов...

Цитата(alexander55 @ Nov 29 2007, 17:18) *
Хочется услышать результат (не зажимайте информацию).
Вы меня заинтриговали. smile.gif

Всепренепременнейше wink.gif
Цитата
Параллелить со своими CS.


Т.е. грубо хотя бы 1000 регистров - 1000 CS? smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 29 2007, 15:42
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Kitsok @ Nov 29 2007, 20:31) *
О Вашем решении я помню. Только не очень представляю, как это реализовать с тем контроллером, который есть у меня (AT91SAM7S256). Программный SPI делать? Ну вот на это я точно не готов...

Например, для передачи используйте SPI, а для приема другой модуль синхронного приемопередатчика. Он вроде SSC у Atmel называется?
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 30 2007, 05:52
Сообщение #42


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Kitsok @ Nov 29 2007, 18:31) *
Т.е. грубо хотя бы 1000 регистров - 1000 CS? smile.gif

Можно не 1000, а 1000/2=500 smile.gif
Можно делать с использованием ПЛИС, тогда количество CS будет таким каким Вы пожелаете. biggrin.gif
Плюсы такого подхода:
- с гонками фронтов нет проблем
- локальные задачи решаются здесь же и их не надо передавать в uC
- возможно сжатие информации перед передачей мастеру
- многобитный SPI.
Минус один:
- длины проводов от опрашиваемых девайсов возрастают.
Вариантов море, но что Вам требуется знаете только Вы.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 30 2007, 11:45
Сообщение #43


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(rezident @ Nov 29 2007, 18:42) *
Например, для передачи используйте SPI, а для приема другой модуль синхронного приемопередатчика. Он вроде SSC у Atmel называется?


Это мысль, попробую.
Теперь чуть-чуть теоретических расчетов.

Частота 12МГц, полпериода - 41.5 нс.
Скорость света в проводе примерно 0.7C, 4.7 нс на метр. Делим одно на другое (и учитывая что мы можем позволить себе, скажем, 90% от половины периода), получаем чуть меньше 8 метров допустимой длины кабеля.
Так?
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 30 2007, 12:16
Сообщение #44


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Kitsok @ Nov 30 2007, 14:45) *
Это мысль, попробую.
Теперь чуть-чуть теоретических расчетов.

Частота 12МГц, полпериода - 41.5 нс.
Скорость света в проводе примерно 0.7C, 4.7 нс на метр. Делим одно на другое (и учитывая что мы можем позволить себе, скажем, 90% от половины периода), получаем чуть меньше 8 метров допустимой длины кабеля.
Так?

Так. Если у Вас безиндуктивные цепи и логика переключается мгновенно. biggrin.gif
И длину кабеля поделите пополам. Сигнал уходит и приходит.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 30 2007, 12:26
Сообщение #45


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(alexander55 @ Nov 30 2007, 15:16) *
Так. Если у Вас безиндуктивные цепи и логика переключается мгновенно. biggrin.gif
И длину кабеля поделите пополам. Сигнал уходит и приходит.


Вот я не могу понять, почему сигнал приходит и уходит? Когда до n-го бита доходит переключение CLK, он вдвигается в соседний триггер, а не в Master. А Master тактируется локально, а не отраженным от конца линии (????? а если там терминатор?) сигналом.
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01595 секунд с 7
ELECTRONIX ©2004-2016