|
|
  |
Помехи на линии I2C при подключении оборудования |
|
|
|
Sep 28 2016, 07:54
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 11-06-09
Из: Санкт-Петербург
Пользователь №: 50 207

|
Всем доброго времени суток. Суть проблемы следующая - есть плата с ARM-овым процессором (от NXP) и тремя линиями I2C, подтянутыми 4.7К резисторами к питанию 1.8В. Частота I2C 100КГц. На плате крутится линукс, пробую по i2cdetect/i2cget получить данные с подключенных к линии микросхем - ID возвращается нормально. Подключаю преобразователь уровня с камерой - сообщения не приходят (подтягивающие резисторы только на борде). Иногда SCL "залипает" в нуле до сброса. На одной линии I2C без подключенных устройств подсоединился осциллографом к SCL/SDA. Пока нет подключения к SCL - сообщение нормально уходит, как только подключаю щуп, происходит следующая картина:
Грешу на избыточную емкость на линии, но может быть еще какие-то варианты? Перепаивать резисторы такого типоразмера сложновато..
|
|
|
|
|
Sep 28 2016, 10:37
|
Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877

|
Цитата(A-10 @ Sep 28 2016, 10:54)  Грешу на избыточную емкость на линии, но может быть еще какие-то варианты? Перепаивать резисторы такого типоразмера сложновато.. У меня похожее но только по причине использования переходника между доменами питания 3.3В - 5В и мотни из проводов длинной. процессор ВМ10Я. тоже делает такие шила вместо нормального клокового импульса. шила амплитудой примерно 2В - уровня лог1 на домене 3.3В. абонент на домене 5В их не замечает, и пропускает клоки. тоже грешу на емкость, еще не испытывались на нормально разведенной плате. работа в едином домене питания идет без проблем и осцилографа не замечает.
|
|
|
|
|
Sep 28 2016, 10:44
|
Знающий
   
Группа: Участник
Сообщений: 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 на желтой линии - ищите источник помех..
|
|
|
|
|
Sep 28 2016, 14:02
|
Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877

|
Цитата(Jury093 @ Sep 28 2016, 13:44)  похоже на наводки на шуп или от DC/DC на желтой линии - ищите источник помех.. на наводки не похоже: узкие пики - это мастер выставляет на клоке 1, и тут же его в 0 опускает. при этом положительное время клока считается уже прошедшим. почему так делается - спасибо тому кто раскажет. может уменьшение до подтяжек реально поможет? яб 470ом попробовал.
Сообщение отредактировал AlexRayne - Sep 28 2016, 14:03
|
|
|
|
|
Sep 28 2016, 19:05
|
Частый гость
 
Группа: Участник
Сообщений: 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.
|
|
|
|
|
Sep 29 2016, 06:06
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 11-06-09
Из: Санкт-Петербург
Пользователь №: 50 207

|
Цитата(Raven @ Sep 28 2016, 22:35)  А какие у вас преобразователи лог. уровней стоят? На мосфетах, по такой схеме
С I2C, конечно, убраны pull-up резисторы со стороны борды. Цитата(AnatolyT @ Sep 28 2016, 22:36)  Похоже на помехи при соединении шлейфом, данные и синхросигнал проходят в двух проводах, расположенных рядом в шлейфе. Синхросигнал через емкость линии наводится на данные в виде пиков на фронтах. Обычно сигнальные провода в шлейфе разделяют земляным проводом между ними. Похоже Вы правы. У меня не шлейф, а отдельные провода, но все же - сейчас попробовал прицепиться к земле поближе (тестировал осциллографом) и передача прошла без сбоев. С преобразователем та же проблема, вероятно.. буду тестировать на новой отдельной плате.
|
|
|
|
|
Sep 29 2016, 06:35
|
Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877

|
Цитата(A-10 @ Sep 28 2016, 22:05)  AlexRayneДа, больше пока нечего придумать. Буду ждать ответа от NXP и подумаю, как снять резисторы без последствий. Зачем снимать? накиньте паралельно где получиться
|
|
|
|
|
Sep 29 2016, 07:37
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 29 2016, 10:22
|
Знающий
   
Группа: Участник
Сообщений: 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?)
|
|
|
|
|
Sep 29 2016, 12:13
|
Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877

|
Цитата(Jury093 @ Sep 29 2016, 13:22)  согласен, посчитал импульсы, действительно это похоже на клоки с очень странным поведением - если бы давил слейв, то была бы ступенька.. с другой стороны мне неизвестны АРМы с таким поведением корки мастера i2c - всегда считал, что клок атомарен и импульс должен быть полный при отсуствие внешних воздействий.. в общем это вопрос к NXP
(вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?) и2ц мастер должен както отлавливать удерживание клока, или захват его - так что атомарность у него с оговорками. к нашему элвису (ВМ10Я) тот же самый вопрос. имхо они могли взять готовую глючную корку и2ц, может на какихто опенкорес.... полагаю у данного проца всегда есть выход - захватить пины и програмно реализовать интерфейс. гораздо поганее если такой возможности нету.
|
|
|
|
|
Sep 29 2016, 12:47
|
Знающий
   
Группа: Участник
Сообщений: 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 обеспечить и без преобразователя уровня не всегда получается.
|
|
|
|
|
Sep 29 2016, 14:40
|
Частый гость
 
Группа: Участник
Сообщений: 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МГц.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|