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

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

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

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

Это надо прошивку писать на этот МК. Возможно проще будет использовать какие-то готовые чипы, с проходящей "насквозь" через них I2C. Вроде есть гальванические изоляторы I2C - можно поробовать.

 

PS: Всю тему читать лень - вопрос к ТС: а резисторы подтяжки на какой стороне находятся - у мастера или у слэйва? Перемещать их пробовали?

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


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

5 минут назад, jcxz сказал:

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

Можно и так. Видел где-то у NXP, вроде, некие I2C-буферы, в том числе и развязанные. Но тут 100% успех не гарантировать...

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


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

Ещё можно поставить на SCL повторитель (от мастера), переводящий её из режима OK в push-pull. Конечно это нарушение стандарта, но если ведомый не использует "clock stretching", то будет нормально работать.

В некоторых случаях иначе не получалось добиться работоспособности I2C....  :sad:

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


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

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

Clock stretching - это не требуемая, а опциональная возможность

Предлагаю таки ознакомиться со стандартом: iic.pdf

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


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

2 часа назад, jcxz сказал:

если ведомый не использует "clock stretching", то будет нормально работать

В данном случае не исключено, что использует.

Цитата

There are two different operation modes to communicate with the HTU20D(F) sensor: Hold Master mode and No Hold Master mode. In the first case, the SCK line is blocked (controlled by HTU20D(F) sensor) during measurement process while in the second case the SCK line remain open for other communication while the sensor is processing the measurement.

 

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


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

16 hours ago, Rodriges said:

Т.е. я щупом встаю на DATA или SCK, вижу красивые импульсы и в это же время на экранчике прибора отображаются температура и влажность близкие к реальным. Убираю щуп и тут же показания пропадают.

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

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


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

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

Предлагаю таки ознакомиться со стандартом...

Что я в нем должен увидеть о растягивании SCL?

Вот тоже документ, из него видно, что stretching таки опционален для slave-ов

image.png.c1c594fc8b6e9e7f06ec51d3da19b689.png

Цитата

3.1.9 Clock stretching

Clock stretching pauses a transaction by holding the SCL line LOW. The transaction cannot continue until the line is released HIGH again. Clock stretching is optional and in fact, most slave devices do not include an SCL driver so they are unable to stretch the clock.
On the byte level, a device may be able to receive bytes of data at a fast rate, but needs more time to store a received byte or prepare another byte to be transmitted. Slaves can then hold the SCL line LOW after reception and acknowledgment of a byte to force the master into a wait state until the slave is ready for the next byte transfer in a type of handshake procedure (see Figure 7).
On the bit level, a device such as a microcontroller with or without limited hardware for the I 2C-bus, can slow down the bus clock by extending each clock LOW period. The speed of any master is adapted to the internal operating rate of this device.
In Hs-mode, this handshake feature can only be used on byte level (see Section 5.3.2).

Это во-первых. Во-вторых, лично я считаю, что у подчиненных устройств эта фишка должна быть программно-/аппаратно-конфигурируемой, а не жестко заданной внутри микросхемы. А связано это с тем, что на время "длительных" операций, время которых, на самом деле, может быть весьма существенным, слэйв может посадить на кукан всю шину целиком, не давая мастеру обратиться к другим девайсам. А ведь на шине могут быть и память, и другие датчики, критичные ко времени доступа. Поэтому, ИМХО, правильнее было бы при включении раздавать девайсам на шине режимы работы: если он один, то пусть умеет растягивать SCL (драйвер I2C-устройства от этого будет проще), когда это ему нужно; если девайсов от 2 и выше - запретить растягивание и программно мониторить занятость конкретного слэйва.

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


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

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

Что я в нем должен увидеть о растягивании SCL?

Что оно всегда в наличии.

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


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

В даташите на на сам датчик есть упоминание об опции ШИМ-выхода вместо I2C, так мож TCу "свезло" и 3ю стр запускаем несуществующий I2C?

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


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

22 minutes ago, Obam said:

есть упоминание об опции ШИМ-выхода вместо I2C

Это не увидел (но смотрел по диагонали), увидел другое (на стр.7):

"Wiring Considerations and Signal Integrity

Carrying the SCK and DATA signal parallel and in close proximity (e.g. in wires) for more than 10 cm may result in cross talk and loss of communication.   

This may be resolved by routing VDD and/or GND between the two data signals and/or using shielded cables. 
Furthermore, slowing down SCK frequency will possibly improve signal integrity."

Ну и максимальная емкость линии приводится: 500пФ (а это почти 10м для шлейфа). И SCK - однонаправленный сигнал для данного чипа. Так надо посмотреть частоту, и делать правильный шлейф.

7 hours ago, DisplayName said:

Повесил по индуктивности на обе линии - просадки ушли и всё заработало на длинных линиях.

Любопытно, сходу одно объяснение приходит: добавление индуктивности увеличивает "волновое" сопротивление получившегося резонансного контура, приближая его к сопротивлению подтяжки. Это легко прикинуть/просимулировать.

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

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


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

6 часов назад, Plain сказал:

Что оно всегда в наличии.

Растягивание SCL еще поискать надо: далеко не в каждом подчиненном оно есть.
Первый пришедший на ум пациент. Где тут хоть одно упоминание о растягивании?
Во всех знакомых мне МК в режиме I2C-ведомого есть бит разрешения stretching-а.

Мне кажется, мы о разных вещах говорим. Вы о монтажном ИЛИ в целом, я об implementation-defined clock stretching-е.

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


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

31 minutes ago, Leka said:

Любопытно, сходу одно объяснение приходит: добавление индуктивности увеличивает "волновое" сопротивление получившегося резонансного контура, приближая его к сопротивлению подтяжки. Это легко прикинуть/просимулировать.

Может, при добавлении индуктивности получился low-pass filter, который поддержал в нужную минуту (наноминуту) уровень в линии? То есть отфильтровал все высокочастотные помехи.

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


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

for more than 10 cm may result in cross talk and loss of communication.

Ну в общем, как обычно... можно и расходиться ;-)

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


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

15 minutes ago, Obam said:

можно и расходиться

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

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


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

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

о разных вещах говорим

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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