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

Помехи на линии I2C при подключении оборудования

Всем доброго времени суток.

 

Суть проблемы следующая - есть плата с ARM-овым процессором (от NXP) и тремя линиями I2C, подтянутыми 4.7К резисторами к питанию 1.8В. Частота I2C 100КГц.

 

На плате крутится линукс, пробую по i2cdetect/i2cget получить данные с подключенных к линии микросхем - ID возвращается нормально.

Подключаю преобразователь уровня с камерой - сообщения не приходят (подтягивающие резисторы только на борде). Иногда SCL "залипает" в нуле до сброса.

 

На одной линии I2C без подключенных устройств подсоединился осциллографом к SCL/SDA. Пока нет подключения к SCL - сообщение нормально уходит, как только подключаю щуп, происходит следующая картина:

post-50207-1475048870_thumb.jpg

post-50207-1475048889_thumb.jpg

 

Грешу на избыточную емкость на линии, но может быть еще какие-то варианты? Перепаивать резисторы такого типоразмера сложновато..

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


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

Грешу на избыточную емкость на линии, но может быть еще какие-то варианты? Перепаивать резисторы такого типоразмера сложновато..

У меня похожее но только по причине использования переходника между доменами питания 3.3В - 5В и мотни из проводов длинной. процессор ВМ10Я. тоже делает такие шила вместо нормального клокового импульса. шила амплитудой примерно 2В - уровня лог1 на домене 3.3В. абонент на домене 5В их не замечает, и пропускает клоки.

 

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

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


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

Суть проблемы следующая - есть плата с ARM-овым процессором (от NXP) и тремя линиями I2C, подтянутыми 4.7К резисторами к питанию 1.8В. Частота I2C 100КГц.

я бы уменьшил с 4к7 до 3к3 (а то и 2к) при 1V8..

Подключаю преобразователь уровня с камерой - сообщения не приходят (подтягивающие резисторы только на борде). Иногда SCL "залипает" в нуле до сброса.

придется внимательно смотреть в исходниках ядра логику работы драйвера i2c для вашего АРМа.. найдите место где АРМ отлавливает таймауты на шине и попробуйте увеличить интервал ожидания, число попыток и после неуспеха полную реиниализацию этой подсистемы в АРМе.. ну и быть готовым к правкам в софте пользователя из-за "неожиданных" прерванных транзакций по i2c

На одной линии I2C без подключенных устройств подсоединился осциллографом к SCL/SDA. Пока нет подключения к SCL - сообщение нормально уходит, как только подключаю щуп, происходит следующая картина:

похоже на наводки на шуп или от DC/DC на желтой линии - ищите источник помех..

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


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

похоже на наводки на шуп или от DC/DC на желтой линии - ищите источник помех..

на наводки не похоже: узкие пики - это мастер выставляет на клоке 1, и тут же его в 0 опускает. при этом положительное время клока считается уже прошедшим. почему так делается - спасибо тому кто раскажет.

может уменьшение до подтяжек реально поможет? яб 470ом попробовал.

Изменено пользователем AlexRayne

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


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

У меня похожее но только по причине использования переходника между доменами питания 3.3В - 5В и мотни из проводов длинной.
У меня так же на проводах преобразователь, я сделал плату, дабы устранить эту проблему, т.к. в тот момент не было под рукой осциллографа и все проблемы списывал на провода. Но все оказалось куда интереснее.

 

Jury093

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

 

AlexRayne

на наводки не похоже: узкие пики - это мастер выставляет на клоке 1, и тут же его в 0 опускает. при этом положительное время клока считается уже прошедшим. почему так делается - спасибо тому кто раскажет.

может уменьшение до подтяжек реально поможет? яб 470ом попробовал.

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

 

Еще возникла мысль, может быть это clock stretching.. Например, время нарастания фронта недостаточно быстрое и мастер считает, что слейв держит SCL, пробует через полпериода или период выставить новый высокий уровень, но передача в итоге сбивается и слейв не возвращает ack.

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


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

А какие у вас преобразователи лог. уровней стоят?

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


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

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

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


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

А какие у вас преобразователи лог. уровней стоят?
На мосфетах, по такой схеме

post-50207-1475128893_thumb.jpg

С I2C, конечно, убраны pull-up резисторы со стороны борды.

 

Похоже на помехи при соединении шлейфом, данные и синхросигнал проходят в двух проводах, расположенных рядом в шлейфе. Синхросигнал через емкость линии наводится на данные в виде пиков на фронтах. Обычно сигнальные провода в шлейфе разделяют земляным проводом между ними.
Похоже Вы правы. У меня не шлейф, а отдельные провода, но все же - сейчас попробовал прицепиться к земле поближе (тестировал осциллографом) и передача прошла без сбоев.

С преобразователем та же проблема, вероятно.. буду тестировать на новой отдельной плате.

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


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

AlexRayneДа, больше пока нечего придумать. Буду ждать ответа от NXP и подумаю, как снять резисторы без последствий.

Зачем снимать? накиньте паралельно где получиться

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


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

Зачем снимать? накиньте паралельно где получиться
Спасибо, что-то я затупил, попробую воткнуть 4.7К на преобразователе.

 

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

Если к пинам подключиться еще и осциллографом, то при загрузке линуха (видимо в этот момент CPU пытается записать данные в трансивер HDMI) SDA падает в ноль намертво, до следующего ресета.

 

Не думаю, что дело в разводке, хотя она и не идеальна (2 слоя, отдельной земли нет), попробую подпаять резистор сегодня.

 

upd. на линии I2C без других микросхем, при запросе i2cdetect процентов 60% сообщений проходят нормально (нет мусора), при подключении щупов - процентов 15%.

Изменено пользователем A-10

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


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

upd. на линии I2C без других микросхем, при запросе i2cdetect процентов 60% сообщений проходят нормально (нет мусора), при подключении щупов - процентов 15%.

1. попробуйте отвязать щупы через транзисторные буфера или подходящую низковольтовую логику

2. шина i2c "не любит" большую емкость физических линий (мы с этим столкнулись поставив в левелшифтер полевики с большой собственной емкостью), но это вроде не ваш случай - фронты вполне валидные

3. вместо камеры для тестов подключите что-то типа 24c02/04 или подобную i2c eeprom - этим отсекаете возмущения по питанию и можно тестировать работоспособность шины, варируя длиной проводков..

 

на наводки не похоже: узкие пики - это мастер выставляет на клоке 1, и тут же его в 0 опускает

согласен, посчитал импульсы, действительно это похоже на клоки с очень странным поведением - если бы давил слейв, то была бы ступенька.. с другой стороны мне неизвестны АРМы с таким поведением корки мастера i2c - всегда считал, что клок атомарен и импульс должен быть полный при отсуствие внешних воздействий.. в общем это вопрос к NXP

 

(вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?)

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


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

согласен, посчитал импульсы, действительно это похоже на клоки с очень странным поведением - если бы давил слейв, то была бы ступенька.. с другой стороны мне неизвестны АРМы с таким поведением корки мастера i2c - всегда считал, что клок атомарен и импульс должен быть полный при отсуствие внешних воздействий.. в общем это вопрос к NXP

 

(вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?)

и2ц мастер должен както отлавливать удерживание клока, или захват его - так что атомарность у него с оговорками.

к нашему элвису (ВМ10Я) тот же самый вопрос. имхо они могли взять готовую глючную корку и2ц, может на какихто опенкорес....

полагаю у данного проца всегда есть выход - захватить пины и програмно реализовать интерфейс. гораздо поганее если такой возможности нету.

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


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

upd. на линии I2C без других микросхем, при запросе i2cdetect процентов 60% сообщений проходят нормально (нет мусора), при подключении щупов - процентов 15%.

У вас какие то ужасы.

Проверьте уровень логического нуля, сравните с ДШ всех чипов на шине. Бывает VIL = 0.2*VCC = 0.35V

Видел в ДШ даже 0,3V.

ноль 0,3v обеспечить и без преобразователя уровня не всегда получается.

 

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


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

(вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?)
Скорее Freescale, проц - s32v234, во многих моментах пересекается с imx6.

 

Так или иначе, добавил в параллель 4.7К (получилось 2.35К) со стороны борды, и заменил на 2.2К со стороны преобразователя - I2C работает, даже на линии с микросхемами!

 

До самого девайса (камера) не удалось пока достучаться. Утром еще заметил, что сигнал тактовой 27МГц после преобразователя получается со смещением. Заменил резисторы на 2.2К так же (думал из-за емкости не успевает разряжаться), но результат такой же практически:

post-50207-1475158674_thumb.jpg

Сверху 1.8В сигнал от борды, снизу - соот-но от преобразователя. Частота не верно показана, она 27МГц.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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