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

Дребезг на GPIO LPC-2106

В моем проекте на шине между LPC-2106 и Xilinx Spartan-2 контакты LPC сконфигурированы как простые GPIO контакты и используются для формирования в том числе стробов чтения и записи данных по шине. Все бы хорошо, но выяснилась одна проблема: в ПЛИСе есть схема, которая ловит нарастающий фронт строба чтения и по нему производит некоторые действия. При этом в процессе тестирования проекта выяснилось, что иногда (не всегда) происходит нечто, эквивалентное приходу двух фронтов строба чтения. Изыскания с помощью логического анализатора показали, что на выходе LPC при переключении выходного контакта из 1 в 0 иногда проскакивает небольшая помеха длительностью до 8 нс. Т.е. получается следующая последовательность смены состояний сигнала: 11110100000000. Проскочила лишняя единица. Такая же проблема наблюдалась несколько раз и при переключении из 0 в 1.

 

Вопрос: кто-нибудь сталкивался с подобным дребезгом? И как с ним можно бороться?

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


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

Изыскания с помощью логического анализатора показали, что на выходе LPC

 

А это не банальный звон линии из-за отражений сигнала?

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


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

Изыскания с помощью логического анализатора показали, что на выходе LPC

 

А это не банальный звон линии из-за отражений сигнала?

 

Нет, не похоже.

 

Непонятно, как с этим правильно бороться... Пока борюсь с этим явлением в ПЛИС - ловлю фронт с помощью сдвигового регистра. Но мне это кажется не лучшим выходом из положения.

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


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

Я сталкивался с такой проблемой при работе с SDRAM на 100МГц. Иногда, помоему как раз на заднем фронте, проскакивал как бы мини импульс окурат в середине фронта. Вылечилось это увеличением номинала согласующего резистора, благо я его туды до этого поставил. Сам этот импульс не исчез, но он сдвинулся вверх по фронту и оказался в зоне лог. "1".

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


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

Если согласование не помогает, возможно возвратные токи по земле дают о себе знать. Можно попробовать полечит небольшим увеличением напряжения питания (мне помогло изменение с 3.1 на 3.3В).

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


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

А кто-нибудь может подсказать, как правильно выбрать номинал согласующего резистора? От чего нужно оттолкнуться в этом?

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


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

В HyperLynx есть визард считающий согласующую резистор.

А вообще, надо знать выходное сопротивление буфера и дополнять его до импеданса линии.

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


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

По всей видимости у Вас приличные скорости, тогда тоже склонен считать, что проблема в согласовании. Только боюсь посчитать будет трудно, многое зависит и от того как разведена плата, как подведено питание. Какие у Вас скорости? Сколько и каких слоев у Вас на плате? Какова длина линий связи?

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


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

to one_man_show

 

Скорости совсем небольшие: длина импульса (активный уровень 0) около 500 нс. Два слоя, причем никаких высокочастотных линий рядом нет. Линия, на которой возникают помехи притянута к 3.3В. Длина линии не более 4 см.

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


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

Значит не там ищем. А направление порта не переключаете? И вообще, может без чудес, а просто какая-то ошибка в софте?

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


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

Значит не там ищем. А направление порта не переключаете? И вообще, может без чудес, а просто какая-то ошибка в софте?

 

Направление этого порта не переключается, т.к. это строб записи. А насчет ошибки - тот слишком уж интересная получается ошибка, т.к. длина этого паразитного импульса не более 8 нс, а процессор работает на частоте 60 МГц. Т.е. следуя элементарным соображениям, он не может сгенерировать программно импульс на этом выходе такой малой длительности. И где еще искать - непонятно.

 

Еще одна странность: этот эффект проявляется не каждый раз, т.к. не регулярно. Может пройти сто раз нормально, а потом пять раз подряд проявиться. Потом еще раз пятьдесят нормально и еще разочек сбойнуть... Так что характер нерегулярный.

 

Ладно. Т.к. причина не ясна, то придется списать на случайный сбой и бороться с ним орг. мерами. :D

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


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

Жаль конечно, что нерегулярная ошибка, тогда найти трудно, согласен.

 

Если не секрет, чем замерили 8нс?

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


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

Жаль конечно, что нерегулярная ошибка, тогда найти трудно, согласен.

 

Если не секрет, чем замерили 8нс?

 

Если бы ошибка была регулярной, то вопросов бы не было... ;)

 

Насчет 8 нс - замер производился с помощью HPшного логического анализатора. Но и он не всегда ловил эти импульсы, хотя условие для него было четкое - ловить все, что меньше 20 нс по длительности.

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


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

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

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

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

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

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

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

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

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

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