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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Помехи на линии I2C при подключении оборудования
A-10
сообщение Sep 28 2016, 07:54
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 11-06-09
Из: Санкт-Петербург
Пользователь №: 50 207



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

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

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

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

Прикрепленное изображение


Грешу на избыточную емкость на линии, но может быть еще какие-то варианты? Перепаивать резисторы такого типоразмера сложновато..
Go to the top of the page
 
+Quote Post
AlexRayne
сообщение Sep 28 2016, 10:37
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877



Цитата(A-10 @ Sep 28 2016, 10:54) *
Грешу на избыточную емкость на линии, но может быть еще какие-то варианты? Перепаивать резисторы такого типоразмера сложновато..

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

тоже грешу на емкость, еще не испытывались на нормально разведенной плате. работа в едином домене питания идет без проблем и осцилографа не замечает.
Go to the top of the page
 
+Quote Post
Jury093
сообщение Sep 28 2016, 10:44
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(A-10 @ Sep 28 2016, 10:54) *
Суть проблемы следующая - есть плата с ARM-овым процессором (от NXP) и тремя линиями I2C, подтянутыми 4.7К резисторами к питанию 1.8В. Частота I2C 100КГц.

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

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

похоже на наводки на шуп или от DC/DC на желтой линии - ищите источник помех..
Go to the top of the page
 
+Quote Post
AlexRayne
сообщение Sep 28 2016, 14:02
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877



Цитата(Jury093 @ Sep 28 2016, 13:44) *
похоже на наводки на шуп или от DC/DC на желтой линии - ищите источник помех..

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

Сообщение отредактировал AlexRayne - Sep 28 2016, 14:03
Go to the top of the page
 
+Quote Post
A-10
сообщение Sep 28 2016, 19:05
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 11-06-09
Из: Санкт-Петербург
Пользователь №: 50 207



Цитата(AlexRayne @ Sep 28 2016, 13:37) *
У меня похожее но только по причине использования переходника между доменами питания 3.3В - 5В и мотни из проводов длинной.
У меня так же на проводах преобразователь, я сделал плату, дабы устранить эту проблему, т.к. в тот момент не было под рукой осциллографа и все проблемы списывал на провода. Но все оказалось куда интереснее.

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

AlexRayne
Цитата
на наводки не похоже: узкие пики - это мастер выставляет на клоке 1, и тут же его в 0 опускает. при этом положительное время клока считается уже прошедшим. почему так делается - спасибо тому кто раскажет.
может уменьшение до подтяжек реально поможет? яб 470ом попробовал.
Да, больше пока нечего придумать. Буду ждать ответа от NXP и подумаю, как снять резисторы без последствий.

Еще возникла мысль, может быть это clock stretching.. Например, время нарастания фронта недостаточно быстрое и мастер считает, что слейв держит SCL, пробует через полпериода или период выставить новый высокий уровень, но передача в итоге сбивается и слейв не возвращает ack.
Go to the top of the page
 
+Quote Post
Raven
сообщение Sep 28 2016, 19:35
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 491
Регистрация: 16-01-05
Из: Санкт-Петербург
Пользователь №: 1 987



А какие у вас преобразователи лог. уровней стоят?
Go to the top of the page
 
+Quote Post
AnatolyT
сообщение Sep 28 2016, 19:36
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 176
Регистрация: 29-03-10
Пользователь №: 56 269



Похоже на помехи при соединении шлейфом, данные и синхросигнал проходят в двух проводах, расположенных рядом в шлейфе. Синхросигнал через емкость линии наводится на данные в виде пиков на фронтах. Обычно сигнальные провода в шлейфе разделяют земляным проводом между ними.
Go to the top of the page
 
+Quote Post
A-10
сообщение Sep 29 2016, 06:06
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 11-06-09
Из: Санкт-Петербург
Пользователь №: 50 207



Цитата(Raven @ Sep 28 2016, 22:35) *
А какие у вас преобразователи лог. уровней стоят?
На мосфетах, по такой схеме
Прикрепленное изображение

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

Цитата(AnatolyT @ Sep 28 2016, 22:36) *
Похоже на помехи при соединении шлейфом, данные и синхросигнал проходят в двух проводах, расположенных рядом в шлейфе. Синхросигнал через емкость линии наводится на данные в виде пиков на фронтах. Обычно сигнальные провода в шлейфе разделяют земляным проводом между ними.
Похоже Вы правы. У меня не шлейф, а отдельные провода, но все же - сейчас попробовал прицепиться к земле поближе (тестировал осциллографом) и передача прошла без сбоев.
С преобразователем та же проблема, вероятно.. буду тестировать на новой отдельной плате.
Go to the top of the page
 
+Quote Post
AlexRayne
сообщение Sep 29 2016, 06:35
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877



Цитата(A-10 @ Sep 28 2016, 22:05) *
AlexRayneДа, больше пока нечего придумать. Буду ждать ответа от NXP и подумаю, как снять резисторы без последствий.

Зачем снимать? накиньте паралельно где получиться
Go to the top of the page
 
+Quote Post
A-10
сообщение Sep 29 2016, 07:37
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 11-06-09
Из: Санкт-Петербург
Пользователь №: 50 207



Цитата(AlexRayne @ Sep 29 2016, 09:35) *
Зачем снимать? накиньте паралельно где получиться
Спасибо, что-то я затупил, попробую воткнуть 4.7К на преобразователе.

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

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

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

Сообщение отредактировал A-10 - Sep 29 2016, 08:04
Go to the top of the page
 
+Quote Post
Jury093
сообщение Sep 29 2016, 10:22
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(A-10 @ Sep 29 2016, 10:37) *
upd. на линии I2C без других микросхем, при запросе i2cdetect процентов 60% сообщений проходят нормально (нет мусора), при подключении щупов - процентов 15%.

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

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

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

(вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?)
Go to the top of the page
 
+Quote Post
AlexRayne
сообщение Sep 29 2016, 12:13
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877



Цитата(Jury093 @ Sep 29 2016, 13:22) *
согласен, посчитал импульсы, действительно это похоже на клоки с очень странным поведением - если бы давил слейв, то была бы ступенька.. с другой стороны мне неизвестны АРМы с таким поведением корки мастера i2c - всегда считал, что клок атомарен и импульс должен быть полный при отсуствие внешних воздействий.. в общем это вопрос к NXP

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

и2ц мастер должен както отлавливать удерживание клока, или захват его - так что атомарность у него с оговорками.
к нашему элвису (ВМ10Я) тот же самый вопрос. имхо они могли взять готовую глючную корку и2ц, может на какихто опенкорес....
полагаю у данного проца всегда есть выход - захватить пины и програмно реализовать интерфейс. гораздо поганее если такой возможности нету.
Go to the top of the page
 
+Quote Post
_3m
сообщение Sep 29 2016, 12:47
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(A-10 @ Sep 29 2016, 10:37) *
upd. на линии I2C без других микросхем, при запросе i2cdetect процентов 60% сообщений проходят нормально (нет мусора), при подключении щупов - процентов 15%.

У вас какие то ужасы.
Проверьте уровень логического нуля, сравните с ДШ всех чипов на шине. Бывает VIL = 0.2*VCC = 0.35V
Видел в ДШ даже 0,3V.
ноль 0,3v обеспечить и без преобразователя уровня не всегда получается.
Go to the top of the page
 
+Quote Post
A-10
сообщение Sep 29 2016, 14:40
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 11-06-09
Из: Санкт-Петербург
Пользователь №: 50 207



Цитата(Jury093 @ Sep 29 2016, 13:22) *
(вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?)
Скорее Freescale, проц - s32v234, во многих моментах пересекается с imx6.

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

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

Сверху 1.8В сигнал от борды, снизу - соот-но от преобразователя. Частота не верно показана, она 27МГц.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 29 2016, 14:53
Сообщение #15


Гуру
******

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



Вот из ит "борда"?


--------------------
На любой вопрос даю любой ответ
"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

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

 


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


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