Jump to content

    
Rodriges

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

Recommended Posts

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

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

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

 

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

Share this post


Link to post
Share on other sites
5 минут назад, jcxz сказал:

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
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.

 

Share this post


Link to post
Share on other sites
16 hours ago, Rodriges said:

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

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

Share this post


Link to post
Share on other sites
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 и выше - запретить растягивание и программно мониторить занятость конкретного слэйва.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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:

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

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

Edited by Leka

Share this post


Link to post
Share on other sites
6 часов назад, Plain сказал:

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

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

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

Share this post


Link to post
Share on other sites
31 minutes ago, Leka said:

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

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

Share this post


Link to post
Share on other sites
4 часа назад, Arlleex сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.