A-10 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Всем доброго времени суток. Суть проблемы следующая - есть плата с ARM-овым процессором (от NXP) и тремя линиями I2C, подтянутыми 4.7К резисторами к питанию 1.8В. Частота I2C 100КГц. На плате крутится линукс, пробую по i2cdetect/i2cget получить данные с подключенных к линии микросхем - ID возвращается нормально. Подключаю преобразователь уровня с камерой - сообщения не приходят (подтягивающие резисторы только на борде). Иногда SCL "залипает" в нуле до сброса. На одной линии I2C без подключенных устройств подсоединился осциллографом к SCL/SDA. Пока нет подключения к SCL - сообщение нормально уходит, как только подключаю щуп, происходит следующая картина: Грешу на избыточную емкость на линии, но может быть еще какие-то варианты? Перепаивать резисторы такого типоразмера сложновато.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Грешу на избыточную емкость на линии, но может быть еще какие-то варианты? Перепаивать резисторы такого типоразмера сложновато.. У меня похожее но только по причине использования переходника между доменами питания 3.3В - 5В и мотни из проводов длинной. процессор ВМ10Я. тоже делает такие шила вместо нормального клокового импульса. шила амплитудой примерно 2В - уровня лог1 на домене 3.3В. абонент на домене 5В их не замечает, и пропускает клоки. тоже грешу на емкость, еще не испытывались на нормально разведенной плате. работа в едином домене питания идет без проблем и осцилографа не замечает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Суть проблемы следующая - есть плата с ARM-овым процессором (от NXP) и тремя линиями I2C, подтянутыми 4.7К резисторами к питанию 1.8В. Частота I2C 100КГц. я бы уменьшил с 4к7 до 3к3 (а то и 2к) при 1V8.. Подключаю преобразователь уровня с камерой - сообщения не приходят (подтягивающие резисторы только на борде). Иногда SCL "залипает" в нуле до сброса. придется внимательно смотреть в исходниках ядра логику работы драйвера i2c для вашего АРМа.. найдите место где АРМ отлавливает таймауты на шине и попробуйте увеличить интервал ожидания, число попыток и после неуспеха полную реиниализацию этой подсистемы в АРМе.. ну и быть готовым к правкам в софте пользователя из-за "неожиданных" прерванных транзакций по i2c На одной линии I2C без подключенных устройств подсоединился осциллографом к SCL/SDA. Пока нет подключения к SCL - сообщение нормально уходит, как только подключаю щуп, происходит следующая картина: похоже на наводки на шуп или от DC/DC на желтой линии - ищите источник помех.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 28 сентября, 2016 Опубликовано 28 сентября, 2016 (изменено) · Жалоба похоже на наводки на шуп или от DC/DC на желтой линии - ищите источник помех.. на наводки не похоже: узкие пики - это мастер выставляет на клоке 1, и тут же его в 0 опускает. при этом положительное время клока считается уже прошедшим. почему так делается - спасибо тому кто раскажет. может уменьшение до подтяжек реально поможет? яб 470ом попробовал. Изменено 28 сентября, 2016 пользователем AlexRayne Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A-10 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба У меня похожее но только по причине использования переходника между доменами питания 3.3В - 5В и мотни из проводов длинной.У меня так же на проводах преобразователь, я сделал плату, дабы устранить эту проблему, т.к. в тот момент не было под рукой осциллографа и все проблемы списывал на провода. Но все оказалось куда интереснее. Jury093 Похоже, заменить резисторы будет проще всего, т.к. для нормальной работы i2c придется ковырять все драйверы подключенных устройств. AlexRayne на наводки не похоже: узкие пики - это мастер выставляет на клоке 1, и тут же его в 0 опускает. при этом положительное время клока считается уже прошедшим. почему так делается - спасибо тому кто раскажет. может уменьшение до подтяжек реально поможет? яб 470ом попробовал. Да, больше пока нечего придумать. Буду ждать ответа от NXP и подумаю, как снять резисторы без последствий. Еще возникла мысль, может быть это clock stretching.. Например, время нарастания фронта недостаточно быстрое и мастер считает, что слейв держит SCL, пробует через полпериода или период выставить новый высокий уровень, но передача в итоге сбивается и слейв не возвращает ack. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба А какие у вас преобразователи лог. уровней стоят? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AnatolyT 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Похоже на помехи при соединении шлейфом, данные и синхросигнал проходят в двух проводах, расположенных рядом в шлейфе. Синхросигнал через емкость линии наводится на данные в виде пиков на фронтах. Обычно сигнальные провода в шлейфе разделяют земляным проводом между ними. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A-10 0 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба А какие у вас преобразователи лог. уровней стоят?На мосфетах, по такой схеме С I2C, конечно, убраны pull-up резисторы со стороны борды. Похоже на помехи при соединении шлейфом, данные и синхросигнал проходят в двух проводах, расположенных рядом в шлейфе. Синхросигнал через емкость линии наводится на данные в виде пиков на фронтах. Обычно сигнальные провода в шлейфе разделяют земляным проводом между ними.Похоже Вы правы. У меня не шлейф, а отдельные провода, но все же - сейчас попробовал прицепиться к земле поближе (тестировал осциллографом) и передача прошла без сбоев. С преобразователем та же проблема, вероятно.. буду тестировать на новой отдельной плате. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба AlexRayneДа, больше пока нечего придумать. Буду ждать ответа от NXP и подумаю, как снять резисторы без последствий. Зачем снимать? накиньте паралельно где получиться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A-10 0 29 сентября, 2016 Опубликовано 29 сентября, 2016 (изменено) · Жалоба Зачем снимать? накиньте паралельно где получитьсяСпасибо, что-то я затупил, попробую воткнуть 4.7К на преобразователе. Сейчас подключил свежезапаяную плату преобразователя уровня, i2cdetect выдает мусор, трансивер на шине перестает работать. Если к пинам подключиться еще и осциллографом, то при загрузке линуха (видимо в этот момент CPU пытается записать данные в трансивер HDMI) SDA падает в ноль намертво, до следующего ресета. Не думаю, что дело в разводке, хотя она и не идеальна (2 слоя, отдельной земли нет), попробую подпаять резистор сегодня. upd. на линии I2C без других микросхем, при запросе i2cdetect процентов 60% сообщений проходят нормально (нет мусора), при подключении щупов - процентов 15%. Изменено 29 сентября, 2016 пользователем A-10 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба upd. на линии I2C без других микросхем, при запросе i2cdetect процентов 60% сообщений проходят нормально (нет мусора), при подключении щупов - процентов 15%. 1. попробуйте отвязать щупы через транзисторные буфера или подходящую низковольтовую логику 2. шина i2c "не любит" большую емкость физических линий (мы с этим столкнулись поставив в левелшифтер полевики с большой собственной емкостью), но это вроде не ваш случай - фронты вполне валидные 3. вместо камеры для тестов подключите что-то типа 24c02/04 или подобную i2c eeprom - этим отсекаете возмущения по питанию и можно тестировать работоспособность шины, варируя длиной проводков.. на наводки не похоже: узкие пики - это мастер выставляет на клоке 1, и тут же его в 0 опускает согласен, посчитал импульсы, действительно это похоже на клоки с очень странным поведением - если бы давил слейв, то была бы ступенька.. с другой стороны мне неизвестны АРМы с таким поведением корки мастера i2c - всегда считал, что клок атомарен и импульс должен быть полный при отсуствие внешних воздействий.. в общем это вопрос к NXP (вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба согласен, посчитал импульсы, действительно это похоже на клоки с очень странным поведением - если бы давил слейв, то была бы ступенька.. с другой стороны мне неизвестны АРМы с таким поведением корки мастера i2c - всегда считал, что клок атомарен и импульс должен быть полный при отсуствие внешних воздействий.. в общем это вопрос к NXP (вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?) и2ц мастер должен както отлавливать удерживание клока, или захват его - так что атомарность у него с оговорками. к нашему элвису (ВМ10Я) тот же самый вопрос. имхо они могли взять готовую глючную корку и2ц, может на какихто опенкорес.... полагаю у данного проца всегда есть выход - захватить пины и програмно реализовать интерфейс. гораздо поганее если такой возможности нету. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 9 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба upd. на линии I2C без других микросхем, при запросе i2cdetect процентов 60% сообщений проходят нормально (нет мусора), при подключении щупов - процентов 15%. У вас какие то ужасы. Проверьте уровень логического нуля, сравните с ДШ всех чипов на шине. Бывает VIL = 0.2*VCC = 0.35V Видел в ДШ даже 0,3V. ноль 0,3v обеспечить и без преобразователя уровня не всегда получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A-10 0 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба (вопрос к ТС - а что, собственно, за АРМ? NXP который freescale или нативный NXP типа LPC?)Скорее Freescale, проц - s32v234, во многих моментах пересекается с imx6. Так или иначе, добавил в параллель 4.7К (получилось 2.35К) со стороны борды, и заменил на 2.2К со стороны преобразователя - I2C работает, даже на линии с микросхемами! До самого девайса (камера) не удалось пока достучаться. Утром еще заметил, что сигнал тактовой 27МГц после преобразователя получается со смещением. Заменил резисторы на 2.2К так же (думал из-за емкости не успевает разряжаться), но результат такой же практически: Сверху 1.8В сигнал от борды, снизу - соот-но от преобразователя. Частота не верно показана, она 27МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба Вот из ит "борда"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться