Інтерв'юер хотів дізнатися, чому застосовуються підтягуючі резистори на SDA і SCL, коли також може бути реалізована протилежна логіка. Чи є пояснення, чому саме використання підтягуючого резистора є обраною конструкцією?
Інтерв'юер хотів дізнатися, чому застосовуються підтягуючі резистори на SDA і SCL, коли також може бути реалізована протилежна логіка. Чи є пояснення, чому саме використання підтягуючого резистора є обраною конструкцією?
Відповіді:
Щоб трохи розширити відповідь Йона:
Так, це все, з якими MOSFET ви хочете використовувати.
N-канальні MOSFET набагато краще для перемикання логіки, ніж P-канал, оскільки:
Отже, для конфігурації з відкритим стоком (що таке I2C) набагато дешевше і простіше створити її за допомогою розташування "в режимі холостого ходу" з N-канальними MOSFET, а не "в режимі холостого ходу" з P-канальним MOSFET.
Третім варіантом буде "низький час холостого ходу" з використанням N-канальних MOSFET, але для цього вам потрібен драйвер затвору високої напруги, щоб підняти напругу на затворі досить далеко, ніж напруга джерела, щоб включити MOSFET. Не практично для малих автобусів зв'язку, але ця схема фактично використовується досить часто в Н-мостах для руху автомобілів, коли ви хочете мати однаковий (або подібний) відгук між високою стороною та низькою стороною Н-мосту. Використання пар P-каналів та N-каналів у мості H, як правило, означає, що вам потрібно включити мертву зону між вимкненням P-каналу та увімкненням N-каналу, оскільки це займає набагато більше часу, а це знижує вашу енергоефективність .
Але для невеликих комунікаційних шин, таких як I2C, де вам потрібна висока швидкість, низька вартість і простота використання, "простоювати високо" з N-канальними MOSFET і підтягуючими резисторами є найвигіднішою економією.
Ще одна перевага пасивного підтягування / активної тяги вниз - це те, що він може працювати з діапазоном напруг живлення. Зауважте, що цифровий високий і низький рівні прямо вказані за допомогою IIC. Ці рівні досить низькі, щоб працювати з підтягувачами 3,3 В. Тому можуть бути побудовані пристрої, які працюють як з напругою 5 В, так і з 3,3 В. Насправді шини IIC можна підтягувати до 3,3 В, і це буде працювати з сумішшю пристроїв на шині, які окремо живляться при різній напрузі.
Хоча NMOS має перевагу перед PMOS щодо швидкості / площі, ця різниця є справді хвилиною, коли ви говорите про драйвера на одному або двох штирях. Зрештою, більшість вихідних драйверів - це фактично тотем-полюсні типи, для яких потрібні і NMOS, і PMOS, так що якби вони обрали конфігурацію, що випадає, або підтягувальну конфігурацію, вони отримали б драйвер виводу, менший ніж тотем- полюсний водій.
Але є одна перевага виходів з відкритого стоку NMOS над відкритим зливом PMOS, який не застосовується безпосередньо до I2C: коли VCC позитивний, відкритий злив NMOS дозволяє підключати між собою чіпи з різним рівнем VCC. Це (частина), чому доступні численні дискретні логічні ІС з відкритим стоком NMOS.
З іншого боку, мені невідомо про будь-які доступні на ринку мікросхеми PMOS з відкритим стоком. Насправді я не вірю, що я коли-небудь стикався з відкритим зливом PMOS на будь-якому мікросхемі. (Я багато разів використовував ECL, який має вихідний випромінювач NPN з подібною поведінкою, ніж PMOS з відкритим стоком)
Наявність дискретних логічних мікросхем відкритого стоку NMOS робить відкритий злив NMOS набагато звичнішим електронним дизайнерам, ніж відкритий злив PMOS.
Як ознайомлення, так і наявність дискретних мікросхем (наприклад, для прототипування), ймовірно, вплинули дизайнери I2C на вибір конфігурації відкритого зливу NMOS.
Я здогадуюсь, відповідь повертається до того, чому ми використовуємо в першу чергу негативну основну умову (і це, звичайно, не було всюдисущим перед епохою напівпровідників). Причиною цього є те, що пристрої N-каналу мають кращу продуктивність, ніж пристрої P-каналу, завдяки фізиці типів більшості носіїв, які використовуються в них.
У перші дні інтегральних мікросхем це було досить серйозним обмеженням, тому існувала перевага використовувати транзистори N-Channel (або NPN) для досягнення максимально можливої продуктивності. З цього ми отримали негативну заземлену систему та відкриті колекторні виходи, які потребували використання підтягуючих резисторів, а не тягнення.
Звичайно, шина I2C навряд чи має високу швидкість, тому немає причин її неможливо реалізувати за допомогою висувних резисторів, але також немає переваги. Тож ми дотримуємось умовності, і вона використовує підтягування.
Ось деякі (історично обґрунтовані) спекуляції ...
Коли у вас є підтягування (а не натискання), ви, очевидно, можете мати декілька пристроїв у суперечці для шини без надлишкового струму (Хороша річ - але ви могли б досягти того ж із відхиленням).
У "старі часи" біполярних транзисторів найпростіша логіка TTL використовувала відкриті колектори з транзисторами NPN - все посилається на землю, завдяки чому рівні тригера просто визначаються незалежно від напруги шини. Також NPN був швидшим за PNP.
Якщо у мене є декілька пристроїв, що працюють з власною напругою живлення, і напруга живлення не є постійною, то необхідність підтягування, а не збивання стає необхідною . Якщо кілька пристроїв намагалися підтягнути шину до відповідних рейок живлення, поточний струм був би необмеженим і щось може обсмажитися. Принаймні всі вони погоджуються щодо вартості землі, тому цього питання не виникає.
З CMOS історія змінюється - тепер рівень тригера знаходиться на середині рейки. Але СВ можуть бути традиційними. Звичайно, приїжджаючи з ранніх транзисторних днів, я навіть ніколи не ставив під сумнів вибір підтягувачів з вищезазначених причин.
Як я вже казав, це лише спекуляція.
Це може бути історична річ.
Старі транзистори та інтегральні мікросхеми фактично споживали менше енергії, коли вони були на 5 В, ніж при 0 В. Оскільки між двома рівнями існувала значна різниця, дизайнери вирішили перетворити стан "в режим очікування" на 5 В. Потім, з часом, транзистори та ІС покращувалися, завдяки чому обидві держави споживають приблизно однакову кількість енергії, але реальної причини для зміни стандартів не було.
Тепер ви бачите багато подібних речей - там, коли на холостому холостому ході 5 В - тільки тому, що стандарти ніколи не змінювалися.
Минуло багато років, як я прочитав специфікацію I2C, але пам’ятаю, коли її вперше використовували, люди часто називали її 2-провідною відкритою колекторною шиною. Це зробило з'єднання та виявлення зіткнень дуже простим навіть для бітових ударів. Ще 20 років тому він не вважався автобусом високої продуктивності, просто дешевим і легким.
Я б сказав, що це тому, що I2C визначається як шина, де всі підключені блоки повинні бути відкритим зливом або відкритим колектором. Це означає, що він може вести автобус лише низько, а не високо. (Коли вихідний транзистор вимкнений, штифт знаходиться в стані високого опору.)
Ця схема забезпечує деякі приємні переваги, наприклад, що ви можете підключати пристрої з різною напругою сигналізації, і що шина самолікується від помилок зв'язку.
Очевидно, стандарт міг бути визначений навпаки, як конфігурація в режимі холостого / активного-високого рівня, а інші відповіді тут доволі добре стосуються цього елемента.
Джерело: LabWorX 1, Освоєння шини I2C, Вінсент Гімпе. Дійсно хороша книга про I2C, її історичну основу, як її реалізувати в апараті та як її використовувати в програмному забезпеченні та налагодженнях.
Справжня відповідь, яку ніхто ще не торкнувся належним чином, полягає в тому, що вона дозволяє підключати пристрої, що живляться різною напругою (доки шпильки вводу / виводу не мають толерантності). Наприклад, пристрій 3,3 В може спілкуватися з пристроєм, який відключається від напруги 1,8 В до тих пір, поки IO пристрою 1,8 В має толерантність до напруг до 3,3. Звичайно, кожен пристрій може приводити в дію 0 В, але не кожен пристрій може підключитися до напруги на ваших підтягуючих резисторах.
Крім того, більшість ІС можуть пропускати більше струму, ніж можуть джерела. Це відбувається через відведення тепла. Тож занурюючий струм (рушійний майданчик) від підтягуючих частин легше для частини, ніж джерело струму (введення високої напруги) у спади.