Сергей Борщ 140 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Слейв - это просто регистры, к которым подключены кнопки, тумблеры и энкодеры. MOSI, исходящее от мастера, никогда не попадает никаким образом на MISO :)Привесьте в хвост цепочки еще один регистр, на входе которого выставьте заранее известное значение (0xA5). В принимаемом сигнале ищите эту комбинацию как маркер конца. Можно взять не A5 а какую-либо из последовательностей Баркера или Уилларда(?). Или еще лучше - формировать биты такой последовательности с прямого и инвесного выходов делителя на 2 сигнала загрузки входов регистра. Тогда на каждом цикле считывания будете иметь инвертированный маркер, существенно ниже вероятность спутать его с такой же комбинацией входных сигналов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Биты или сдвинуты все или не сдвинуты не один. Это фиксированная величина для конкретного слейва. Что за обратная связь я не понимаю. ;) Вот тут я не понимаю. Получается, что если у меня сейчас работает с восемью 74HC165, то будет работать и с 8000? Сомневаюсь. Понял Вас. Слейву информация от мастера не нужна. А кто Вам такое мог сказать ? Это медицинский факт ;) Объясняю, на Вашем примере. 1. По сигналу выбора слейв устройства, Вы пишете состояние кнопкок, тумблеров и энкодеров в регистр сдвига слейва (я так думаю). :) 2. По сигналу CLK передаваемая от мастера информация игнорируется слейвом. Это мы выяснили. Совершенно верны оба два утверждения 3. По сигналу CLK информация в регистре сдвига сдвигается, и поступает в мастер. 4. По своему же CLK мастер сдвигает принятую информацию. По тому-же CLK, только инвертированному. Или задержку при прохождении через инвертор тоже имеет смысл здесь учесть? А теперь контрольные вопросы Вам, чтобы понять, где мы находимся. А. Что будет: - если информация от слейва на момент сдвига мастером еще не дошла Бит потеряется где-то между двух регистров(n и n+1) посредине цепочки. В том месте, где на n задержка прохождения CLK еще меньше полупериода, а на n+1 - уже больше. Ключевой момент. Если Вам удастся мне объяснить, прав я или нет, то буду признателен чрезвычайно ;) - а если уже дошла. То не потеряется ;) Б. Меняется ли задержка прихода информации для конкретного слейв устройства. Я этот вопрос не понимаю, у меня одно слейв устройство, состоящее из длинного каскада сдвиговых регистров. Мне так кажется, что в цепочки из N-регистров по 8 бит каждый, и если считать бит номер 0 "ближайшим" к мастеру, то время прихода k-того бита зависит от длины проводов и от N. Привесьте в хвост цепочки еще один регистр, на входе которого выставьте заранее известное значение (0xA5). В принимаемом сигнале ищите эту комбинацию как маркер конца. Можно взять не A5 а какую-либо из последовательностей Баркера или Уилларда(?). Или еще лучше - формировать биты такой последовательности с прямого и инвесного выходов делителя на 2 сигнала загрузки входов регистра. Тогда на каждом цикле считывания будете иметь инвертированный маркер, существенно ниже вероятность спутать его с такой же комбинацией входных сигналов. А не поможет. Конец я найду, т.е. узнаю количество подключенных регистров. Но мне нужно выцепить конкретный теряющийся бит, поэтому нужно загнать в крайний регистр тестовую последовательность двойной максимально возможной длины и анализировать ее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Но мне нужно выцепить конкретный теряющийся битКуда ему теряться? Проблема в том, что в зависимости от длины вашей цепочки вы можете получить на вход последовательность, задержанную на n бит, где n прямо пропорционально длине цепочки и может принимать значения от 0 до забора. Вам просто нужно принимать на байт больше и по положению маркера вычислять сдвиг принятых данных. Если я правильно понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Бит потеряется где-то между двух регистров(n и n+1) посредине цепочки. В том месте, где на n задержка прохождения CLK еще меньше полупериода, а на n+1 - уже больше. Ключевой момент. Если Вам удастся мне объяснить, прав я или нет, то буду признателен чрезвычайно ;) Т.е. Вы хотите сказать, что у Вас SPI не 8 битный, а 8*n битный. Ответьте на этот вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Т.е. Вы хотите сказать, что у Вас SPI не 8 битный, а 8*n битный. Ответьте на этот вопрос. Эээхм... Да. Объяснюсь. CS поднимается один раз перед передачей 4 кб (и, соответственно, приема 1 кб). На протяжении всех этих 4 кб мастер генерит CLK без сдвигов и задержек. Куда ему теряться? Проблема в том, что в зависимости от длины вашей цепочки вы можете получить на вход последовательность, задержанную на n бит, где n прямо пропорционально длине цепочки и может принимать значения от 0 до забора. Вам просто нужно принимать на байт больше и по положению маркера вычислять сдвиг принятых данных. Если я правильно понял. Вот и я не знаю. Здравый смысл подсказывает, что при небесконечной скорости света и наличии задержек при переключениях в микросхемах, цепочка не может работать при бесконечной длине. Но логика не подсказывает, где именно и какой произойдет сбой. Образно я вижу так - фронт сигнала (по которому должен происходить сдвиг в регистре) доезжает до некого k-того регистра с задержкой (относительно мастера) в полпериода. Т.е. когда тот k-тый регистр только выдвинул бит, мастер уже ожидает... стоп. Мастер далеко. Дыра что-ли получается в битовой последовательности? Ну не получается представить... ;( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Т.е. Вы хотите сказать, что у Вас SPI не 8 битный, а 8*n битный. Ответьте на этот вопрос. Кажется я понял, с чем Вы мучаетесь. Если у Вас 8*n битный SPI. Решение такое. От мастера CLK должен подходить сначала к самому дальнему слейву (самый дальний дает перенос тому, который поближе), затем ближе ... и наконец к самому ближнему, с которого данные и идут в мастер. Произвольное подключение CLK приведет к анархии. Волна данных по переносам должна идти вместе CLK ( иначе будет полный бардак). Я догадался правильно. PS. Замечу только, что такая распределенная организация сдвигового регистра не особо надежна в плане передачи данных (хотя может все получится). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Волна данных по переносам должна идти вместе CLK ( иначе будет полный бардак). Я догадался правильно. И ведь была у меня эта мысль после той картинки с кольцеванием CLK, да постеснялся высказать ;) Спасибо за наводку, буду попробовать. PS. Замечу только, что такая распределенная организация сдвигового регистра не особо надежна в плане передачи данных (хотя может все получится). А альтернатива? Хотя это, видимо, не для этой ветки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба И ведь была у меня эта мысль после той картинки с кольцеванием CLK, да постеснялся высказать ;) Спасибо за наводку, буду попробовать. Хочется услышать результат (не зажимайте информацию). Вы меня заинтриговали. :) А альтернатива? Хотя это, видимо, не для этой ветки. Параллелить со своими CS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Т.е. когда тот k-тый регистр только выдвинул бит, мастер уже ожидает... стоп. Мастер далеко. Дыра что-ли получается в битовой последовательности? Ну не получается представить... ;( Я вам еще в посте #22 объяснил как решается эта проблема. Каждый приемник (и мастера и слейва) тактируется своим собственным CLK. CLK приемника мастера этот тот же CLK, сгенерированный его собственным передатчиком, но прошедший путь до конца цепочки (с которого берется MISO) и обратно - CLK_RET. Такой способ используется во всех скоростных эмуляторах , которые работают с JTAG на десятках-сотнях МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Я вам еще в посте #22 объяснил как решается эта проблема. Каждый приемник (и мастера и слейва) тактируется своим собственным CLK. CLK приемника мастера этот тот же CLK, сгенерированный его собственным передатчиком, но прошедший путь до конца цепочки (с которого берется MISO) и обратно - CLK_RET. Такой способ используется во всех скоростных эмуляторах , которые работают с JTAG на десятках-сотнях МГц. Мне бы хотелось для начала осознать в деталях проблему ;) О Вашем решении я помню. Только не очень представляю, как это реализовать с тем контроллером, который есть у меня (AT91SAM7S256). Программный SPI делать? Ну вот на это я точно не готов... Хочется услышать результат (не зажимайте информацию). Вы меня заинтриговали. :) Всепренепременнейше ;) Параллелить со своими CS. Т.е. грубо хотя бы 1000 регистров - 1000 CS? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба О Вашем решении я помню. Только не очень представляю, как это реализовать с тем контроллером, который есть у меня (AT91SAM7S256). Программный SPI делать? Ну вот на это я точно не готов... Например, для передачи используйте SPI, а для приема другой модуль синхронного приемопередатчика. Он вроде SSC у Atmel называется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба Т.е. грубо хотя бы 1000 регистров - 1000 CS? :) Можно не 1000, а 1000/2=500 :) Можно делать с использованием ПЛИС, тогда количество CS будет таким каким Вы пожелаете. Плюсы такого подхода: - с гонками фронтов нет проблем - локальные задачи решаются здесь же и их не надо передавать в uC - возможно сжатие информации перед передачей мастеру - многобитный SPI. Минус один: - длины проводов от опрашиваемых девайсов возрастают. Вариантов море, но что Вам требуется знаете только Вы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба Например, для передачи используйте SPI, а для приема другой модуль синхронного приемопередатчика. Он вроде SSC у Atmel называется? Это мысль, попробую. Теперь чуть-чуть теоретических расчетов. Частота 12МГц, полпериода - 41.5 нс. Скорость света в проводе примерно 0.7C, 4.7 нс на метр. Делим одно на другое (и учитывая что мы можем позволить себе, скажем, 90% от половины периода), получаем чуть меньше 8 метров допустимой длины кабеля. Так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба Это мысль, попробую. Теперь чуть-чуть теоретических расчетов. Частота 12МГц, полпериода - 41.5 нс. Скорость света в проводе примерно 0.7C, 4.7 нс на метр. Делим одно на другое (и учитывая что мы можем позволить себе, скажем, 90% от половины периода), получаем чуть меньше 8 метров допустимой длины кабеля. Так? Так. Если у Вас безиндуктивные цепи и логика переключается мгновенно. И длину кабеля поделите пополам. Сигнал уходит и приходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kitsok 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба Так. Если у Вас безиндуктивные цепи и логика переключается мгновенно. И длину кабеля поделите пополам. Сигнал уходит и приходит. Вот я не могу понять, почему сигнал приходит и уходит? Когда до n-го бита доходит переключение CLK, он вдвигается в соседний триггер, а не в Master. А Master тактируется локально, а не отраженным от конца линии (????? а если там терминатор?) сигналом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться