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

I2C на "длинной линии". Чего-то не работает.

14 minutes ago, =AK= said:

За счет чего? В чем состоит механизм такой компенсации? За счет сопротивления проводников или за счет их индуктивности? И то и другое настолько малы, что влияния 50к заметить будет невозможно.

А хрен его знает. Но практика показывает, что оно работает. UART по кабелю пускал в однопроводном режиме (Rx с Tx закорочены). Условия точно такие-же как и здесь, с обоих сторон открытый коллектор и несколько метров провода. Подтяжки с обоих сторон позволяли поднять скорость в два раза.

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


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

А частота SCL какая? И что служит мастером (модель МК)? М.б. какие-то особенности портов, и есть смысл буфер поставить?

Из собственного опыта - на 100 кГц через 1,5 м кабеля типа USB-шного C8051F350 с ADT7410, помещённой в термокамеру, работал совершенно уверенно - в течение нескольких часов было послано порядка 10000 запросов, и на все были получены ответы. При этом температура в камере менялась от -40 до +90. На 400 кГц уже шли единичные сбои. Резисторы подтяжек - по 10 кОм с обеих сторон.

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


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

3 часа назад, =AK= сказал:

...а если резисторы подтяжки уменьшить, то и до метра.

3 метра, полет нормальный. Да, не по спецификациям, но работает.

Эффект, как у ТС, наблюдал на SD-интерфейсе - щупом тыкаешься - работает, убираешь - перестает. Сменили немного тайминги в ПЛИС, заработало и без щупов. Сделал вывод, что суммарная емкость может заваливать фронты, причем довольно ощутимо. А когда находишься на границе переключения, емкости в пару пФ хватит, чтобы изменить картину.

P.S. В I2C-контроллерах тоже тайминги между установкой/сбросом ноги и ее чтением (в мастере, естественно) настраиваются. И если они в приборе были настроены почти впритык, так чтобы работало, то хоть как изворачивайся с кабелями - работать не будет вовсе или будет с переменным успехом.

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


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

"Чудеса" у меня случались с JTAG на более коротком шлейфе - в итоге порядка 40 см. На осциллографе правда были видны искаженные из-за переотражений фронты. Ситуацию улучшили последовательно запаянные сопротивления порядка 33 Ом. Может быть, помехи какие ловятся на провод - попробуйте применить экранированный кабель.

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


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

20 минут назад, Plain сказал:

Зарезать частоту I2C внешним одновибратором.

ИМХО, может не получиться, если там ситуация с таймингами, которую я обрисовал выше. Там важна задержка между выставлением бита и его чтением самим же мастером согласно логике I2C. От частоты там мало что будет зависеть, скорее от скорости нарастания фронта. Ну а чтобы даже частоту изменить можно было, нужно, чтобы мастер поддерживал так называемый "clock stretching".

P.S. Если уж действительно окажется, что ни в какую не работает, то можно поставить рядом (вместо датчика) мелкий МК с двумя I2C-интерфейсами, на одном эмулировать саму HTU20D, а второй вытащить наружу и подключить к нему реальный HTU20D. Тут хоть можно будет с времянками играться как угодно.

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


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

Конденсатор блокирующий стоит. Я к нему в параллель ещё 0.47мкФ припаял - не помогло. Резисторы подтяжки... Сегодня в мелкоскоп разглядел, что на них "010" написано. Тестер показал 96к.

h-sensor.thumb.jpg.4e76cd4a1d141eee2aaf9d29459ae697.jpg

 

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


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

4 minutes ago, Rodriges said:

Тестер показал 96к.

96 кОм раз в двадцать больше, чем нужно. Если это действительно подтяжка. Поставьте от 2 до 5 кОм.

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


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

22 минуты назад, haker_fox сказал:

от 2 до 5 кОм

3.6к не помогает. Попробую 1-1.5к поставить.

3 минуты назад, Arlleex сказал:

Тестер на запаянных резисторах может показать погоду на Марсе.

На выпаянных показал 100,08к

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


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

Идиотский способ маркировки SMD-резисторов всегда меня озадачивал. Да, там код не 010, а 01D, что есть 100кОм. Все-таки еще раз проверьте (прямо мультиметром), что GND, VCC и SCL/SDA доходят до платы управления... Осциллограф может создать какой-нибудь неявный путь для GND, например. Мистика:wink:

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


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

3 часа назад, vitzap сказал:

"Чудеса" у меня случались с JTAG на более коротком шлейфе - в итоге порядка 40 см. 

На высокоскоростных (относительно) линиях - запросто. Даже и на 20 см может звенеть так, что до полной неработоспособности (имел такое "удовольствие", вывесив цепочку HC595 на 20-сантиметровом плоском кабеле, и пренебрег согласованием). И да, последовательное согласование со стороны передатчика радикально выправляет ситуацию. Можно бы попробовать и на i2c то же, но знать бы, что там происходит. А вот "знать" - бывает затруднительно, емкость щупа картину может исказить до неузнаваемости.

4 часа назад, Harbinger сказал:

На 400 кГц уже шли единичные сбои. Резисторы подтяжек - по 10 кОм с обеих сторон.

10 кило на 400 kHz даже и без кабеля многовато. 

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

 

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


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

4 часа назад, Arlleex сказал:

чтобы мастер поддерживал так называемый "clock stretching"

"Проводное ИЛИ" для SCL не так называемое, оно изначально стандартное, поэтому если кто-то его не поддерживает, шильдик I2C попросту не получит.

 

4 часа назад, Arlleex сказал:

важна задержка между выставлением бита и его чтением самим же мастером согласно логике I2C

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

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


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

3 минуты назад, Plain сказал:

Данные выставляются на чтение по спаду SCL

Разве?

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


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

11 минут назад, Plain сказал:

"Проводное ИЛИ" для SCL не так называемое, оно изначально стандартное, поэтому если кто-то его не поддерживает, шильдик I2C попросту не получит.

Clock stretching - это не требуемая, а опциональная возможность slave-ов. Если мы с Вами об одном и том же сейчас говорим.
 

Цитата

Данные выставляются на чтение по спаду SCL, а читаются по его фронту...

Нет. Данные выставляются на SDA до того, как будет передний фронт на SCL. А снимаются после заднего. Это для битов данных, естественно.

Цитата

...поэтому не может быть никаких аппаратных настроек этого процесса...

Еще как может. I2C - топология шины с возможностью мультимастера и контролем битов ACK от ведомых, поэтому (как и в CAN-е) выставляемые мастером биты им же и контролируются. И вот задержка между выставлением и контролем - настраиваемая. Посмотрите, например, тот же I2C-контроллер в STM32.

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


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

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

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

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

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

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

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

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

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

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