Шина i2c длина линии

У кого есть готовый, рабочий, проект с i2c датчиками — какая у вас длина линий от меги до железок?
И чем трассу кидали?

Думал раскидать по комнатам Bosch BME280, но появился такой вопрос. Где-то пишут 1,5м. где-то 6м

Re: I2C дальность/длина линии

Сообщение Andrey_B » 04 янв 2018, 02:39

Re: I2C дальность/длина линии

Сообщение Alex_Jet » 04 янв 2018, 20:01

10м, за указанное время сбоев не выявлено — главное обеспечить хороший контакт!

Re: I2C дальность/длина линии

Сообщение xsash » 05 янв 2018, 00:15

А как расключали? По каким цветовым парам данные, питание. Питание от меги не проседало?
Опять же, спрашиваю исходя из теоретических «знаниях» с англоязычного сегмента.

Нашел момент, где человек использовал один цвет (например бело-оранж + оранж) для SCL + SDA — там его «били по рукам», типа будет наводка и предлагали такую схему (аттач, и там чет дополнительно с 5-ю вольтами мутили), где была пара «SCL + земля» и отдельно пара «SDA + земля»

Re: I2C дальность/длина линии

Сообщение Alex_Jet » 05 янв 2018, 10:28

8м UTP полностью (дисплей, HTU21D, DS18B20 и кнопка) следующим образом: питание — бордовый и бело-бордовый, 1-wire — синий и бело-синий, кнопка — оранжевый и бело-оранжевый, I2C — зеленый и бело-зеленый. То и для вывода наружу я использовал такую же схему с тем предположением, что если что-то будет сбоить, то в запасе есть одна витая пара для нормальной защиты SCL и SDA от помех.
По поводу просадки питания — она ничтожна поскольку датчики потребляют миллиамперы! Даже не заморачивался с этим зная исход. Сами посчитайте сопротивление линии и прикиньте на сколько милливольт просядет напряжение.

Я думаю, что если линия растянется хотя бы на 15-20 метров то возможно придется нормально подключать I2C. С питанием скорее всего ничего не надо будет делать если ток потребления будет менее 50мА (падение будет около 0,19В из расчета сопротивления одного проводника UTP 5Cat 9,38Ом на 100м).
Вот если на UTP будете садить 3G/4G модем, тогда питание на него через UTP нужно подавать от 12В БП со step-down преобразователем (12В->5В) около самого модема.

Видео:Введение в шину I2CСкачать

Введение в шину I2C

I²C — Inter-Integrated Circuit, краткое руководсто

Видео:Лекция 308. Шина I2CСкачать

Лекция 308.  Шина I2C

Общие сведения:

I²C (и-квадрат-це, ай-ту-си, ай-сквэрд-си), Inter-Integrated Circuit — последовательная шина обмена данными между интегральными схемами. Изобретена и в начале 80-х компанией Philips Semiconductor (теперь NXP), передача данных осуществляется по двум проводам в обе стороны. Ведущий и ведомый могут выполнять как роль приёмника, так и передатчика. Для возможности соединения более двух устройств используются адресация. Опрашивать адреса шины может только ведущий. Адрес последовательно выводится на линию SDA сразу после сигнала Start. В этой статье речь пойдёт только о 7-ми битной адресации, так же не будет затронута тема нескольких ведущих. На каждом устройстве, поддерживающем I²C обычно обозначены два вывода: SDA и SCL. SDA (serial data) — означает последовательные данные, SCL (serial clock) — последовательное тактирование. Эти выводы являются выводами открытого коллектора или открытого стока, это означает что ведущий и ведомый могут только притягивать электрический потенциал к земле, поэтому на каждой линии должны быть подтягивающие резисторы. Сопротивление резисторов рассчитывается в зависимости от паразитной ёмкости линии.

Видео:Шина I2C.Скачать

Шина I2C.

Подключение:

Шина поддерживает подключение до 112 устройств (при 7-ми битной адресации) по двум проводам (плюс GND и Vcc), может иметь несколько ведущих и ведомых. При использовании нескольких ведущих, каждый из них должен поддерживать этот режим и уметь определять состояние занятой шины.

I²C на Arduino

Arduino UNO R3/Piranha UNO

На Arduino UNO R3/Piranha UNO шина I2C находится на выводах A4, A5. Также в эти выводы продублированы на колодке с цифровыми выводами рядом с кнопкой Reset.

Читайте также: Рейтинг грязевых шин для нивы шевроле

Шина i2c длина линии

Piranha ULTRA

На Piranha ULTRA шина I²C не занимает аналоговые выводы A4, A5 и находится на цифровой колодке рядом с кнопкой Reset, выводы обозначены SDA и SCL

Шина i2c длина линии

Arduino MEGA R3

На Arduino MEGA R3 шина I²C находится на цифровой колодке на крайних выводах, близких к разъёму USB и на выводах 20, 21. Выводы объединены.

Шина i2c длина линии

Примеры для Arduino

Работа с шиной с использованием встроенной библиотеки Wire Arduino IDE на примере Trema-модуля LED Матрицы 8×8 — i2c

В этом примере на матрицу выводится изображение стрелки. Стоит заметить, ко всем нашим модулям написаны библиотеки с высокоуровневым интерфейсом и вовсе не обязательно работать с матрицей на низком уровне. Подробнее о работе с библиотекой матрицы можно узнать по этой ссылке.

I²C на Raspberry Pi

На Raspberry Pi I²C выводы это 3-й и 5-й выводы колодки, GPIO2 и GPIO3 по номенклатуре BCM и выводы 8, 9 по номенклатуре WiringPi.

Шина i2c длина линии

Примеры для Raspberry

Работа с шиной с использованием модуля smbus для Python на примере Trema-модуля Матрицы 8×8 — i2c. Для работы с шиной её необходимо включить в настройках Raspberry при помощи утилиты raspi-config . Ссылка на подробное описание как это сделать.

Так же как и в примере с Arduino, в этом примере на матрицу выводится изображение стрелки. Стоит заметить, к Trema-модулю LED Матрица 8×8 — i2c написана библиотека с высокоуровневым интерфейсом и вовсе не обязательно работать с матрицей на низком уровне. Подробнее о работе с библиотекой матрицы можно узнать по этой ссылке

Видео:25 Шина I2CСкачать

25 Шина I2C

Подробнее о шине I²C:

Резисторы, ёмкость и длина линий шины

В официальном описании от NXP ничего не сказано о максимальной длине шины, но не стоит этим злоупотреблять. Шина была придумана для обмена информации между интегральными схемами в пределах одной платы одного устройства. В расчёт бралась только паразитная ёмкость линии, которая сказывается на скорости нарастания фронта волны. От этой ёмкости зависит номинал подтягивающих резисторов. Можно подобрать резисторы так, чтобы фронт волны нарастал согласно спецификации и при 100-метровой длине проводов, но это не избавляет от помех, которые влечёт за собой несимметричная электрическая реализация. Опять же, при слишком маленьком сопротивлении качество сигнала улучшается, но при этом растёт ток который необходимо пропускать устройствам через выводы для притяжки линий.

При использовании шины на модулях не существует принятого стандарта установки подтягивающих резисторов на ведущем или ведомом. У Arduino подтягивающие резисторы отсутствуют и для работы с шиной нужен хотя бы один модуль с ними. У Raspberry Pi на плате установлены подтягивающие резисторы номиналом 1,7 килоОм и для неё нет необходимости в подтяжке на модулях.

Сигналы и специальные биты шины

В состоянии покоя линии шины находятся на верхнем потенциале (обычно 3,3 В или 5 В, но могут быть и другие напряжения). Бездействие устройства, по умолчанию, воспринимается как логическая 1. Для простоты понимания можно рассмотреть аналогию: Вообразим верхний потенциал как уровень воды, а нижний как дно. Представьте, что Вы на рыбалке — попловок в состоянии покоя остаётся на поверхности, когда клюёт — идёт ко дну. Так же и в здесь, при обмене данными линии прижимаются в нулевому потециалу. Далее рассмотрим поочереди сингалы и специальные биты.

Устанавливаемые только ведущим

  • Start — сигнал начала обмена данными. Линия тактирования SCL отпущена (логическая 1), ведущий пижимает линию данных SDA (переход из логической 1 в логический 0). После этого обмен данными происходит побайтово. Первый байт — семь бит адреса ведомого и бит направления (запись или чтение). Последующие байты — данные. после этого сигнала шина считается занятой.

Читайте также: Высота протектора шин continental premium contact 5

Краткое обозначание сигнала S — заглавная буква S латинского алфавита.

  • Бит Read — Если ведущий желает получить данные, он устанавливает логическую 1 сразу после адреса, информируя ведомого о том, что данные будут считываться (управление линией данных передаётся ведомому).

Краткое обозначание R — заглавная буква R латинского алфавита.

  • Бит Write — Если ведущий желает записать данные, он устанавливает логический 0 сразу после адреса для информирования ведомого о том что данные будут записываться (управление линией данных остаётся у ведущего).

Краткое обозначение — заглавная буква W латинского алфавита с чертой сверху.

  • Stop — сигнал окончания обмена данными. Ведущий прекращат тактирование, линия тактирования SCL отпущена (логическая 1), линия данных SDA переведена ведущим из логического 0 в логическую 1. После этого сигнала шина считается свободной.

Краткое обозначение P — заглавная буква P латинского алфавита.

  • Restart — сигнал продолжения обмена данными (используется взамен сигналу Stop с последующим Start для продолжения опрашивания шины ). Используется в основном при наличии нескольких ведущих на шине, чтобы управление не перешло другому ведущему после сигнала Stop. Линия тактирования SCL отпущена ведущим, линия данных SDA переведена ведущим из логической 1 в логический 0.

Обозначается Sr — заглавная буква S и строчная буква r латинского алфавита.

Устанавливаемые ведущим и ведомым

Данные биты может устанавливат как ведущий, так и ведомый. В такой ситуации устанавливающее устройство или модуль (ведущий или ведомый) называют передатчиком, а считывающее устройство — приёмником.

  • Бит ACK — (сокращ. англ. acknowledged — подтверждено) каждый девятый импульс тактирования передатчик (ведущий или ведомый) отпускает линию данных. Если линия была прижата приёмником (логический 0) — принятые данные верны, передача может быть продолжена или закончена.

Обозначается A — заглавная буква A латинского алфавита

  • Бит NACK — (сокращ. англ. not acknowledged — не подтверждено) каждый девятый импульс тактирования передатчик (ведущий или ведомый) отпускает линию данных. Если линия была отпущена принимающим или принимающего нет на шине (логическая 1) — принятые данные неверны, произошла ошибка, передача не может быть продолжена. Обозначается A̅ — заглавная буква A латинского алфавита с чертой сверху.

Видео:Шина данных i2c - декодируем/синхронизируем с помощью осциллографа Lecroy!Скачать

Шина данных i2c - декодируем/синхронизируем   с помощью осциллографа Lecroy!

Обмен данными

При обмене данными тактированием занимается только ведущий, а ведомый может удерживать линию тактирования только если не успевает за ведущим, так называемое растягивание тактирования (clock-stretching). Не все модули поддерживают удержание. Установка бита на линии данных может происходит в момент, когда линия тактирования прижата, а считывания, когда линия отпущена (подтянута к Vcc), но в большинстве случаев это происходит по фронту волны на линии тактирования.

Рассмотрим пример простого обмена данными:

Запись в регистры ведомого. Данные взяты из примеров, приведённых выше.

После сигнала Start и указания адреса ведущий записывает адрес регистра с которого будет производиться дальнейшая запись. Стоит заметить, что у ведомого есть внутренний счётчик и каждый последующий байт после подтверждения будет записан в следующий регистр. Таким образом байт со значением 0x00 будет записан в регистр 0x11, байт со значением 0x18 будет записан в регистр 0x12, байт со значением 0x3C будет записан в регистр 0x13 и т. д. В этом примере биты ACK устанавливает ведомый.

Вот так сигналы этого примера выглядят на осциллографе:

Шина i2c длина линии

  • Канал 1 — тактирование (SCL)
  • Канал 3 — данные (SDA)
  • Линия B1 — декодирование данных осциллографом

Чтение из регистров ведомого. Предположим, мы хотим прочитать байт из регистра 0x13.

После сигнала Start и указания адреса ведущий записывает адрес регистра, который необходимо прочитать. Далее следует сигнал Restart (или Stop, затем Start). Ведущий снова выводит адрес ведомого, но уже с битом Read (чтения). Ведомый устанавливает бит ACK и во время следующих 8-ти импульсов тактирования выводит данные на линию SDA. На девятом импульсе уже ведущий устанавливает бит ACK (или NACK, если данные не удалось прочитать) и завершает обмен сигналом Stop.

Видео:Логический анализатор шины i2cСкачать

Логический анализатор шины i2c

Скорость

Первоначальный стандарт I²C был реализован на скорости 100 кГц. С тех пор появились и другие реализации шины, но большинство устройств работают на этой скорости. Так же известны случаи когда скорость шины специально снижена, чтобы увеличить расстояние передачи и уменьшить чувствительность к помехам. Не все модули могут работать на сниженной скорости.

Читайте также: Рекомендуемое давление в шинах грузовых автомобилей

Видео:Логический LIN пробник, цифровой тестер лин, к лайн шины автомобиля. На Ардуино, OLED I2C, TJA 1020Скачать

Логический LIN пробник, цифровой тестер лин, к лайн шины автомобиля. На Ардуино, OLED  I2C, TJA 1020

Максимальная длина шины I2C?

Какова максимальная длина кабеля, который можно использовать для подключения двух устройств I2C (I2C master-> I2C slave)?

Да, я знаю, что I2C действительно предназначен для внутриплатной связи. Передо мной была поставлена ​​«цель разработки» — использовать общую шину I2C для нескольких подчиненных I2C для поддержки демонстрации.

Для ясности предположим, что стандартная частота шины I2C составляет 100 кГц.

Для быстрого режима и подтягивания резистора емкость должна быть меньше 200 пФ, в соответствии с этим документом NXP, спецификацией шины I2C и руководством пользователя .

С подтягиванием источника тока вы можете перейти на 400 пФ, но не с резисторами.

Если ваш провод 20 пФ / 30 см и у вас есть еще 50 пФ рассеянной и входной емкости, длина кабеля ограничена 2,25 м. Различные предположения приведут к различным числам.

Безумные длины звучания, такие как 10, 25 и 100 м, вполне возможны, и я часто использую этот метод (с UART, а не с I2C, но метод стоит), когда мне нужно быстро собрать вещи. Хотя это не совсем лучший способ.

Ключ должен знать ваш порог входного напряжения. Убедитесь, что падение напряжения в заземляющем проводе намного ниже этого, иначе передатчик с высоким потенциалом земли не сможет снизить напряжение достаточно низко. Отсутствие допустимого отклонения для наземных смещений ИМХО является основной причиной использования RS485 или приемопередатчиков (возможно, I2C через CAN упоминается в нескольких заметках по применению).

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

Но, давайте возьмем CAT5 для примера. CAT5 не может быть выше 52pf / m, или это не CAT5.

100-метровый кабель 52pf имеет емкость 5200pf или 5.2nf.

5,2n раз 20 кОм (подтягивание) дает постоянную времени около 104 микросекунд. Это ограничивает скорость до 10 кГц или около того.

Используя подтягивания 2,2 кОм, вы, вероятно, сможете достичь 100 кГц.

Я слышал, что устройства должны иметь резистор на SDL и SCK из-за большой емкостной нагрузки, которую они приводят, около 180 или 200 Ом.

Но, честно говоря, I2C вовсе не способ идти на большие расстояния. Приемопередатчики CAN или RS485, используемые с обычным UART, представляют собой надежное решение с очень хорошей защитой от сбоев, устойчивостью к электростатическим разрядам, скоростью, расстоянием и т. Д., Стоимостью около доллара за чип или около того, смещения заземления не так важны, так что вы свободно носить власть вместе с данными.

Единственным недостатком является то, что приемопередатчик может достигать 70 мА при передаче и 1 или 2 мА при простом прослушивании, поэтому I2C или прямой TTL UART могут быть полезны в экстремальных ситуациях с низким энергопотреблением, но подумайте, сколько времени вы на самом деле тратите на отправку.

Я работаю в компании, производящей USB-датчики. Большинство из них основаны на сенсорных микросхемах I2C, эти устройства могут быть разделены на две части, поэтому вы можете установить часть процессора в одном месте, а часть датчика — в другом. Мы провели довольно много тестов на соединение I2C между процессором устройства и датчиками I2C. На частоте 100 кГц с хорошим протоколом восстановления после ошибок можно легко добраться до 25 м с помощью основных проводов. Мы даже смогли достичь 100 метров один раз с кабелем CAT5.

  • Свежие записи
    • Нужно ли менять пружины при замене амортизаторов
    • Скрипят амортизаторы на машине что делать
    • Из чего состоит стойка амортизатора передняя
    • Чем стянуть пружину амортизатора без стяжек
    • Для чего нужны амортизаторы в автомобиле


    🔍 Видео

    Урок 24. Узнаём адреса устройств на шине I2CСкачать

    Урок 24. Узнаём адреса устройств на шине I2C

    Что такое I2C ??? Подключаем GY-521 и Oled 96*16 к STM 32Скачать

    Что такое I2C ??? Подключаем GY-521 и Oled 96*16 к STM 32

    Лекция "Интерфейсы (часть II). I2C. 1-Wire"Скачать

    Лекция "Интерфейсы (часть II). I2C. 1-Wire"

    Как дебажить i2c (чиним вайтбоксы своими руками) - Антон КортуновСкачать

    Как дебажить i2c (чиним вайтбоксы своими руками) - Антон Кортунов

    Arduino I2C связь между контроллерамиСкачать

    Arduino I2C связь между контроллерами

    Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать

    Подключение нескольких устройств, датчиков по I2C (АйТуСи) шине

    I2c шина в iPhone, способы диагностики, причины циклического перезапуска.Скачать

    I2c шина в iPhone, способы диагностики, причины циклического перезапуска.

    I2C. Краткая теория с примером. STM32 CubeIDE.Скачать

    I2C. Краткая теория с примером. STM32 CubeIDE.

    I2C интерфейсСкачать

    I2C интерфейс

    Видеоуроки по Arduino. I2C и processing (7-я серия, ч1)Скачать

    Видеоуроки по Arduino. I2C и processing (7-я серия, ч1)

    Подключение нескольких устройств по шине i2cСкачать

    Подключение нескольких устройств по шине i2c

    Как подключить несколько I²C с одинаковыми адресами. Железки АмперкиСкачать

    Как подключить несколько I²C с одинаковыми адресами. Железки Амперки

    Урок 9. Адреса модулей на шине I2C. Arduino (что такое I2C, адресация, как изменить адрес модуля)Скачать

    Урок 9. Адреса модулей на шине I2C. Arduino (что такое I2C, адресация, как изменить адрес модуля)
Поделиться или сохранить к себе:
Технарь знаток