Скільки i2c рабів може підтримувати i2c?


17

Чи існує максимальна кількість рабів i2c, якими може керувати майстер i2c? Які фізичні обмежуючі фактори?


1
У вас 7-бітна адреса. Це означає, що ви можете звернутися до 127 рабів.
Ботнік

Спасибі. Чи існують такі фізичні обмежувальні фактори, як привід струму, ємність або щось подібне, що перешкоджає кількості рабів досягати до 127?
user768421

1
@Botnic повністю ігнорує комутатори, концентратори, буфери, ретранслятори та будь-який пристрій i2c, який дозволяє розширити шину.
Перехожий

Відповіді:


22

Програмним обмежуючим фактором є розмір адреси, що використовується для підлеглих: 7-розрядна або 10-бітна, яка підтримує 127 і 1023 пристрої відповідно. Фізично існує два обмеження. По-перше, фізичний розмір шини, тому що шина призначена лише для коротких пробігів (внутрішня частина IC). Якщо шина занадто велика, є ємнісні ефекти затримки завантаження та поширення, з якими потрібно вирішити. По-друге, деякі пристрої не можуть підтримувати весь спектр адрес I2C. Як приклад, гіроскоп MPU6050 підтримує лише дві адреси, а деякі пристрої резервують конкретні адреси для спеціальних цілей.


2
У вас помилка по одному 7-бітова адресація підтримує 128 адрес (від 0 до 127). 10-бітова адресація підтримує 1024 адреси (від 0 до 1023).
CurtisHx

3
Це не виключено однією помилкою. Це "помилка на 6", оскільки є 7 зарезервованих адрес, а не одна.
круємі

Схема адресації диктується пристроями в шині, ведучому або підлеглому. Деякі пристрої мають задані діапазони адрес та зарезервовані адреси. Інші пристрої, наприклад, багато мікроконтролерів, не мають зарезервованих адрес і можуть використовувати будь-яку адресу в заданій бітовій схемі.
vini_i

Ці цифри є дещо правильними, проте потрібен застереження. Є кілька зарезервованих адрес, таких як 1111 XXX та 0000 XXX. Це означає, що 7-бітний = 2 ^ 7 - 16 = 112 корисних адрес, 10-бітний - це повний 2 ^ 10 1024. 8-бітний не є (не повинно бути річчю), це, як правило, включає біт R / W на 7-бітному. nxp.com/docs/en/user-guide/UM10204.pdf
busfault

@busfault Я визнаю, що 8-бітові адреси - це фактично не річ. Я видалив їх зі своєї відповіді. Більшість мікроконтролерів можуть ігнорувати деякі або всі зарезервовані адреси та використовувати повний діапазон адрес. Зазначу у своїй відповіді, що це конкретний пристрій.
vini_i

10

Максимальна кількість вузлів обмежена адресним простором, а також загальною ємністю шини 400 пФ, що обмежує практичні відстані зв'язку до кількох метрів.

Детальніше читайте на I²C


9

Адресація обмежує кількість пристроїв - деякі можуть використовувати 10-бітну адресацію (досить рідко використовується), що обмежує кількість адрес до 1024. Є декілька "зарезервованих" адрес.

I2C (на відміну від "двох провідних шин" або будь-яких інших, які хочуть викликати подібні шини), повинен відповідати стандарту NXP (née Philips), специфікації UM10204 I2C-шини та керівництву користувача . Це повинен бути вашим основним довідковим документом, а не різними тлумаченнями та підмножинами, які існують в інших місцях.

На максимальну кількість пристроїв впливатимуть можливості приводу найслабшого виходу (що, в свою чергу, визначає мінімальний резистор витягування), провідникова та вхідна ємність, а також режим / частота роботи. Див. Розділ 7.2 Робота над максимально допустимою ємністю шини, якщо максимальна ємність повинна бути перевищена:

введіть тут опис зображення


7

Шина i2c обмежена в основному ємністю шини (а отже, швидкістю) та доступними адресами пристроїв. І фізичний простір на дошці.

Але немає реальної верхньої межі, коли ви враховуєте буфери шини, розширювачі, ретранслятори, концентратори, мультиплексори, комутатори (або будь-яку іншу назву пристрою, який може перемикатися між декількома шинами). Вони додають деякі накладні витрати на i2c, оскільки вони можуть бути доступні через ту ж шину i2c. Наприклад, PCA9548A - це 8-розрядний комутатор шини.

Цей єдиний чіп теоретично може вчетверо збільшити кількість i2c рабів (127 * 8), які є в іншому випадку. І PCA9548A може бути налаштований на до 8 адрес на одній шині, тобто 8 * 8 * 127 пристроїв. (математика може бути вимкнена). І це тільки з цим пристроєм і не більше.

Відверто кажучи, немає теоретичного обмеження, якщо налаштувати ємність.


5

I2C вказує 2 адреси довжини, 7 та 10 біт , що дає теоретичний максимум 128 та 1024 розрізнених адреси відповідно.

Однак є кілька зарезервованих адрес, наприклад 0x00 (загальний дзвінок). Це ще більше обмежує адресний простір.

Якщо ви будуєте систему, де ви маєте безпосередній контроль над пристроями I2C, ви можете використовувати зарезервовані адреси для власного використання, але система більше не відповідатиме стандарту I2C.

Окрім адреси, є обмеження фізичної шини. Кожен пристрій в шині повинен мати можливість низько витягувати шину за певний проміжок часу (залежно від швидкості шини). Якщо шина має велику ємність, пристрої можуть не в змозі витягнути ПДД досить низько, а підйоми можуть не принести ПДД досить швидко.

Тепер апаратні проблеми можна подолати за допомогою трохи апаратних засобів. Зараз я працюю над проектом, який використовує I2C для спілкування з пристроями на відстані декількох 10 метрів. Основна шина використовує 24 В, а на кожній платі є драйвер, який знижує її до 3,3 В.

У горіховій оболонці фізичне обмеження I2C може бути подолане. Адресацію можна подолати, але лише за умови безпосереднього контролю над пристроєм.


Минуло майже три роки, як ви працювали на дуже довгих автобусах i2c. Вони добре працювали?
wallyk

1
@wallyk Я покинув цю компанію незабаром після публікації відповіді. Я скажу, що, маючи правильне обладнання, ви можете змусити I2C спілкуватися на більші відстані. Однак є й інші протоколи зв'язку, які розроблені на великі відстані і, ймовірно, будуть кращим вибором, ніж I2C.
CurtisHx

5

Основне обмеження кількості рабовласників, якими може керувати ведучий, як правило, випливає з електричних факторів, таких як ємність шини, витоку, міцності приводу тощо. Якщо можна було побудувати рабів з нульовою паразитарною ємністю і нульовим витоком, і якщо можна було б їх з'єднати з слідами плати нульової ємності, то ємність шини не була б фактором, але на практиці жодне припущення не дотримується.

Адресування пристроїв, які "знають" один про одного, насправді не є проблемою. Було б тривіально розробити периферійну мережу, яка б дозволила підключати мільярди чіпів за допомогою однієї адреси читання та однієї записи. Просто вкажіть, що кожен пристрій повинен мати унікальний чотирьохбайтовий ідентифікатор, і він повинен постійно слухати адресу запису, але повинен виходити з кожної транзакції, перші чотири чотири байти переданих даних не відповідають їх ідентифікатору. Далі уточнюйте, що пристрої можуть відповідати на адресу зчитування лише у тому випадку, коли останній запис запису, який вони почули, відповідав їх адресі.

Якби хотілося додати можливість, щоб ведучий визначав ідентифікатори всіх підключених підлеглих, можна було б резервувати деякі спеціальні діапазони ідентифікаторів для таких цілей. Наприклад, можна сказати, що якщо перший байт ідентифікатора FF, то наступні чотири байти будуть маскою, а чотири після цього ідентифікатором; пристрій повинен залишатися на зв’язку (і акетувати останній байт ідентифікатора), якщо частина його ідентифікатора, визначена маскою, відповідає тій, що вказана в команді. Це дозволить майстру ідентифікувати принаймні один пристрій, використовуючи 64 транзакції, і додаткові пристрої, що використовують 62 або менше транзакцій кожен. Мабуть, не найшвидший спосіб ідентифікації пристрою, але непогано, враховуючи простір пошуку мільярдів ідентифікаторів пристрою.


2

Коротка відповідь: Це залежить

Якщо у вас є (звичайні) пристрої з 7-бітовою адресою до 104 пристроїв (128 адрес - зарезервовані адреси (0x00-0x07 та 0xF0-0xFF зарезервовано)) (застосовуються певні обмеження) Якщо у вас є (рідше поширені) пристрої, які підтримують 10 біт адресація до 1024 пристроїв (ви можете змішати 7-бітні та 10-бітові пристрої та охопити до 1136 пристроїв таким чином)

Тепер до обмежень. Більшість простих пристроїв можна налаштувати лише на два-8 різних адрес. Ви можете подолати це, замовляючи пристрої з різними базовими адресами (але це зазвичай означає, що ви замовляєте мінімальну кількість пристроїв) Існують також обмеження на обладнання (в основному ємність шини), але це можна вирішити за допомогою спеціальних драйверів i2c.

Якщо ви хочете підключити багато пристроїв на більші відстані, я б запропонував використовувати полеву шину все одно! I2C призначений для зв'язку всередині пристрою (наприклад, телевізора). Я використовую сам I2C з RaspberyPi із зовнішніми кабелями до 50 см (навіть із T-секціями, які ви ніколи не повинні мати в системі шин). Це працює напрочуд добре.


0

Кількість пристроїв, підключених до шини, обмежена лише загальною дозволеною ємністю шини 400 пФ. Оскільки більшість ІМ-інтерфейсів з інтерфейсом I²C використовують технологію CMOS з низькою потужністю, з високим опором, багато ІМС можуть бути підключені до шини I²C до досягнення максимальної ємності


1
Це не відповідає на питання ОП у цілій садибі. Спробуйте відповісти на всі аспекти питання, навіть якщо використовуєте приблизні значення. Вкажіть та / або залиште посилання на ваше джерело інформації.
Sparky256

0

За допомогою доданих мультиплексорних мікросхем (наприклад, TCA9544A) або буферів (наприклад, PCA9515B) ви можете подолати всі межі - і ємності шини, і адреси.

Ви можете розмістити 3 пристрої з однаковими адресами за мультиплексором і вибрати лише один з них, зв’язатися з ним і пізніше вибрати інший. Звичайно, програмне забезпечення стає складнішим.

Якщо у вас довго проводка, ви можете розмістити буфер посередині і подолати межу ємності.


Ні, ви все одно будете обмежені: 4 канали / мультиплексор, на канал ви маєте 4 субканали, тоді у вас є підканали, підсубканали тощо. У вас є 3 адреси рядків на переглядач каналів: це 4 ^ (2 ^ 3) = 65536 каналів. На канал ви маєте 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 пристроїв / каналів (коли ви також використовуєте буфери) (-7 призначені для зарезервованих адрес і -8 для мультиплексних адрес). 1265 * 65536 = 82903040 Максимальні пристрої.
12431234123412341234123

Редагувати: На жаль, виникла помилка: це 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 Пристрої / Канал => 1137 * 65536 = 74514432 Пристрої. Але може бути більше можливо, коли ви використовуєте IO-Expander, щоб увімкнути та вимкнути деякі буфери (що далеко не практичне використання, а теоретична можливість).
12431234123412341234123
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.