Чи є правильне значення опору для підтягуючих резисторів I2C?


72

Технічний опис в 24LC256 EEPROM йдеться , що:

Шина SDA вимагає підтягуючого резистора до VCC (типово 10 кОм для 100 кГц, 2 кОм для 400 кГц і 1 МГц).

Я думав, що будь-який резистор зі значенням kΩ зробить цю роботу (і, здається, мій EEPROM справно працює на різних частотах з резистором 10 кОм).

Мої запитання:

  • чи є правильне значення для підтягуючих резисторів?
  • чи існує закон / правило для визначення цієї величини?
  • як різні значення опору впливають на шину даних I²C?

Дещо пов’язане: electronics.stackexchange.com/q/76376/2028
JYelton

Відповіді:


66

Правильний опір тяги для шини I 2 C залежить від загальної ємності на шині та частоти, на якій потрібно працювати шиною.

Формула з листа даних ATmega168 (яка, на мою думку, походить з офіційної специфікації I 2 C), -

Freq<100kHzRmin=Vcc0.4V3mA,Rmax=1000nsCbus

Freq>100kHzRmin=Vcc0.4V3mA,Rmax=300nsCbus

Microchip 24LC256 визначає максимальну ємність штифта 10pF (що досить типово). Підрахуйте кількість пристроїв, які у вас є паралельно на шині, і використовуйте формулу вище, щоб обчислити діапазон значень, який буде працювати.

Якщо ви вимикаєте батареї, я б використовував значення, які знаходяться у високому кінці діапазону. Якщо немає обмежень на потужність джерела живлення або розсіювання потужності в ІМС, я б використовував значення в нижньому кінці діапазону.

Я продаю кілька комплектів з I 2 C RTC (DS1337). Я включаю резистори 4K7 в комплект, що здається розумним компромісом для більшості користувачів.


Як правило, я вважаю, що шина простоює (скасовується) переважну частину часу, тому для застосування акумулятора є важливіші проблеми, ніж намагатися оптимізувати підключення I2C просто так: P
Nick T

5
Єдине, що я хотів би додати, це буфер вище підсумкової ємності пристроїв на шині. Сам слід, а також з'єднання пайки від колодок до штифтів також матимуть певний опір. На більш тривалих шинах ємність сліду / дроту може бути більшою, ніж ємність контактів пристроїв. При розробці виробничих дощок я зазвичай не визначаю остаточну величину підтягування, поки у мене не буде прототипу в руці, і я можу охопити шину різними значеннями.
Марк

14

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

Тому специфікація I2C дає максимальні значення для підтягуючих резисторів як функції ємності шини для трьох класів швидкості:

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

Мінімальні значення визначаються у функції напруги шини і повинні обмежувати струм через драйвери.


3
Через 3 роки Texas Instruments написав заяву, яка є досить близькою за змістом до цієї відповіді.
Нік Алексєєв

Стаття EDN: Проектні розрахунки для надійних комунікацій I2C . [Тільки збираємо довідковий матеріал.]
Нік Алексєєв

11

Існує правильний діапазон значень, однак важко точно описати, що таке діапазон. Взагалі працює 10 к.

Цифрові виходи мають задану здатність джерела або потоку струму. Якщо ваш вихід може затопити 5 мА, а вихід підключений через підтягувач до 5 В, а потім встановлений на 0, вам знадобиться мінімум 1 к опір. Якщо ви використовуєте менше 1 к, вихід не зможе занурити достатньо струму, щоб витягнути штифт аж до 0В. Якщо ви використовуєте більшу величину, наприклад 10 к, тоді штифт повинен затонути лише 0,5 мА, що набагато менше, ніж його номінальний показник.

Цифрові входи мають заданий струм витоку. Це якось, як кількість струму, необхідного для "підтримки" 0 або 1 на вході. Якщо ваш підтягуючий резистор занадто великий, він не зможе подолати струм витоку. Якщо він ледве долає струм витоку, то будь-якого шуму в ланцюзі може бути достатньо для зміни входу.

Використовуючи цифрові виходи, які можуть потопати і джерело струму ("драйвер тотемного полюса", "драйвер поштовху"), ви можете спокуситись не використовувати резистори, що піднімаються. Однак дуже важливо, щоб входи CMOS не дозволяли плавати, інакше вони можуть тягнути надмірний струм ... і дуже просто забути, що двосторонні штифти MCU зазвичай виходять в якості входів!


I2C та інші подібні протоколи використовують виходи "відкритого стоку" (або "відкритого колектора"). Замість того, щоб мати виходи, які можуть тягнути вгору і вниз, а відкриті зливні виходи можуть лише тягнути вниз. Ось чому потрібен зовнішній висувний резистор. Зараз існують додаткові обмеження щодо діапазону підтягуючих резисторів; значення підтягування утворюватиме RC ланцюг з ємністю шини. Занадто мале значення ще раз не дозволить вихідним драйверам занурити достатній струм, щоб тягнути штифт аж до 0. Однак занадто велике значення займе занадто довго, щоб зарядити ємність шини.

Якщо є час налаштування / утримування, яке не дозволяється порушувати, вони допоможуть вам визначити постійну частоту RC. Ємність шини в значній мірі визначається компонуванням друкованої плати, тому ви можете вибрати значення R, яке поєднується з C, щоб забезпечити значення, зручне протягом часу установки / утримування цифрового входу.


7

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

Я б хотів із найвищим опором підтягування, який дає вам надійні комунікації.


5

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


2

Про проблему, яку я ще не бачив, це споживання електроенергії. Якщо використовується джерело живлення 3,3 вольт, 3,3 К резистор на землю буде витрачати 1 мА струму (3,3 мВт потужності), коли вихід низький. Використання 10K резистора зменшило б струм і потужність втричі. Якщо на шині I2C буде багато комунікацій, то споживання електроенергії може виявитися значною частиною загального виходу енергії, особливо якщо шина може сидіти низько протягом тривалого періоду часу. Наприклад, якщо один зчитує 100 байт / секунду, але після зчитування кожного байта шині залишається пристрій, що виводить перший біт наступного байту, і більшість цих байтів мають чіткий MSB, шина може витратити 90% час із низьким рівнем SCL та SDA. Залежно від того, що ще робить система, це може значно збільшити споживання енергії.

Для економії енергії може бути корисно підключити резистор "підтягування" до штифта вводу / виводу, а не до VDD. Поки я не бачив апаратних реалізацій I2C, що пропонують підтримку, маючи вихідні вихідні дані на окремому штифті вводу / виводу, який підключений до шини через резистор, а не використовувати драйвер відкритого колектора та фіксований резистор, що піднімається витрачаючи струм, коли ведучий хоче вивести "0". Крім того, якщо майстер на деякий час залишатиме SCK низьким, не піклуючись про те, що на SDA, майстер може відключити підтягування, поки не буде готовий до ще деякого спілкування. Якщо жодному з пристроїв не потрібно використовувати розтягування годин, майстер може просто використовувати прямий вихід для SCK і не турбуватися жодним підтягуванням на цьому дроті.

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


1

Мінімальне значення резистора залежить від можливостей руху двох сторін шини. Наприклад, вони працюють 10 мА, тому значення вашого резистора повинно бути більше . Це не точне значення резистора, це залежить від вашої ємності шини. Ви можете перевірити значення резистора, правильно чи ні, вимірюючи час зростання і час падіння шинних імпульсів. Ви можете знайти ці значення часу за посиланням нижче:Vbus10 mA

http://www.cypress.com/knowledge-base-article/rise-and-fall-time-specifications-scl-and-sda-lines-i2c


-1

Ось форми хвиль для 400кілобіт / секунду (формату хвилі 200 кГц 101010). RC - 4,7 К Ом і 212pF. Значення RC дозволяє 2 відстоювання TAU.

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


Ця відповідь просто неправильна. Тактова частота 200 кГц дає 200 кбіт / с, а не 400. На опір підтягування впливають лише піднімаючі краї. Сюжети виглядають заплутано, майже як відбувається якась модуляція. Фізичні величини та їх одиниці записуються з пробілом (або тонким пробілом) між ними. Тау - символ, а не абревіатура.
venny

@venny Це типові форми хвиль для шини, яка працює занадто швидко за час поселення. Маючи лише 2 відстоювання TAU, немає рівних вершин до форм хвиль, отже, "якась модуляція"; якби це була псевдовипадкова закономірність, мінливість врегулювання була б дуже очевидною; читати на "даних очі". Нарешті, тактова частота 200 КГц має високу для 2,5 мкЗ, а потім низька - 2,5 уЗ; період 2,5uS - це саме 400KHz дані, які я згадав.
analogsystemsrf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.