ทำไม I2C ออกแบบมาเพื่อทำงานกับตัวต้านทานแบบดึงขึ้นและไม่ใช่แบบตัวดึงลง


22

ฉันเข้าใจว่าใน I2C, SCL และสาย SDA ใช้ตัวต้านทานแบบดึงขึ้นและไดรเวอร์พินเป็นอุปกรณ์เก็บสะสม NPN แบบเปิดซึ่งสามารถขับหมุดไปที่พื้นได้ สิ่งนี้ทำให้ I2C ได้เปรียบที่ตอนนี้บัสเดียวกันสามารถใช้ร่วมกับทาสหลายคนได้และแม้ว่าทาสสองคนหรือมากกว่านั้นพยายามขับรถบัสโดยไม่ตั้งใจในเวลาเดียวกัน แต่ก็ไม่ทำให้ระบบเสียหาย

แต่สิ่งนี้สามารถทำได้โดยใช้PNP open drain driversและตัวต้านทานแบบดึงลงในสาย SDA และ SCL สิ่งต่าง ๆ เช่นการยืดนาฬิกาและอนุญาโตตุลาการหลายหลักสามารถทำได้ด้วยเช่นกัน

การติดตั้งใช้งานโปรโตคอล I2C ปัจจุบันให้ประโยชน์มากกว่าการใช้ทางเลือกที่แนะนำข้างต้นหรือไม่?


1
ทรานซิสเตอร์สะสมแบบเปิดดูเหมือนจะอยู่ในวงจรรวมส่วนใหญ่ในยุค 80
PlasmaHH

9
@PlasmaHH ฉันคิดว่าเหตุผลคือ NPN (เท่าที่ฉันจำได้ชัดเจน) มีความจุกระแสไฟต่อพื้นที่มากขึ้นเนื่องจากการเคลื่อนที่ของอิเล็กตรอนในพื้นผิวสูงขึ้น
Marcus Müller

7
@ MarcusMüllerแท้จริงแล้วนั่นคือ (และยังคงเป็น) จริง NPNs และ NMOS Fets นั้น "แข็งแกร่ง" เมื่อมีขนาดเท่ากัน ใน CMOS ตัวประกอบ 2 ถึง 3 เป็นเรื่องปกติ สำหรับ PNP กับ NPN นั้นขึ้นอยู่กับกระบวนการผลิต แต่ PNP เกือบทุกครั้งนั้นยากและซับซ้อนกว่า NPN มาก เริ่มต้นด้วยสารตั้งต้นแบบ P-doped (ตามที่กระบวนการส่วนใหญ่ทำ) เน้นสิ่งนี้ (NPN ที่ดีกว่า)
Bimpelrekkie

@Bimpelrekkie ฉันจำตัวประกอบ 2.3 จากคลาสฟิสิกส์สถานะของแข็งของฉันจนถึงวันนี้ :-)
winny

1
หากบัส I2C ที่มีอยู่นั้นลัดวงจรลงโดยไม่ตั้งใจไม่ว่าด้วยเหตุผลใดก็ตามคุณจะวาดกระแสตัวต้านทานแบบดึงขึ้นเท่านั้น ด้วยการจัดเรียงที่สมบูรณ์ของไดรเวอร์ที่ใช้งานสูงและตัวต้านทานแบบเลื่อนลงคุณจะสร้างความเสียหายให้กับไดรเวอร์ง่าย ๆ จาก I2C ในปีที่เริ่มต้น เมื่อพิจารณาระหว่างบอร์ดการพิจารณาถึงการย่อตัวไปยังแชสซี แต่มันก็เป็นเพียงหนึ่งในหลาย ๆ เหตุผลในการขับรถด้วยแรงดึงต่ำส่วนที่เหลืออื่น ๆ ได้ตอบไว้ด้านล่าง
TonyM

คำตอบ:


30

การใช้ไฟฟ้าเป็นเรื่องที่สมเหตุสมผลเพราะกราวด์เป็นการเชื่อมต่อทั่วไปกับอุปกรณ์ทั้งหมดบนบัส IIC นั่นเป็นข้อ จำกัด น้อยกว่าการบังคับให้มีการเชื่อมต่อทั่วไปกับอุปกรณ์ IIC ทั้งหมดตามที่ต้องการหากมีการขับเคลื่อนสายสูงและลอยต่ำผ่าน pulldowns

โปรดทราบว่าอุปกรณ์ IIC ไม่จำเป็นต้องได้รับพลังงานจากเน็ตเดียวกันหรือแรงดันไฟฟ้าเดียวกัน สิ่งนี้จะไม่เป็นจริงหากรถบัสทั้งสองสายต้องถูกขับด้วยแรงดันไฟฟ้าทั่วไป


5
ไม่ใช่ downvote ของฉันและคุณต้องมีประสบการณ์ I2C หลายปีเหมือนกันดังนั้นประเด็นของฉันที่นี่อาจเป็นความเข้าใจผิด แต่: " อุปกรณ์ IIC ไม่จำเป็นต้องได้รับพลังงานจาก [... ] แรงดันไฟฟ้าเดียวกัน " อาจเป็น มองว่าหมายความว่าอุปกรณ์ I2C ขับเคลื่อนด้วยพลังงาน 5V และ 3V (เช่น) สามารถแชร์บัส I2C เดียวกันได้โดยไม่ต้องมีส่วนประกอบหรือข้อควรระวังเพิ่มเติมใด ๆ (เนื่องจากคุณไม่ได้พูดถึงผู้แปลระดับ) และแน่นอนว่าพวกเขาไม่สามารถทำเช่นนั้นได้เนื่องจาก I2C ลอจิกขีด จำกัด ของอุปกรณ์แต่ละตัวจะถูกอ้างอิงถึง Vcc ของตัวเอง บางทีการขาดการเอ่ยถึงอย่างชัดเจนของนักแปลระดับทำให้เกิดการโหวต?
SamGibson

13
การสื่อสารแบบ I2C สามารถใช้งานได้อย่างราบรื่นระหว่างอุปกรณ์ 5V และ 3.3V ทั้งนี้ขึ้นอยู่กับ pull-ups และพิน I / O ที่ใช้ ยกตัวอย่างเช่นการใช้ 10K pull-ups ถึง 5V จะอนุญาตให้อุปกรณ์ 3.3V ใช้งานได้หากมีอินพุตที่ไม่ได้รับการยอมรับ 5V-5V หรือถ้าพวกมันสามารถทน 150uA ในไดโอดป้องกัน และการใช้ pullups ถึง 3.3V จะทำงานได้อย่างน้อยที่ความเร็วช้าลงสำหรับการเชื่อมต่อกับอุปกรณ์ 5V ที่มีค่าสูงถึง 2.5V หรือน้อยกว่า
supercat

7
@Sam: จริง ๆ แล้วอุปกรณ์ 5 V และ 3.3 V IIC สามารถอยู่บนบัส IIC เดียวกันได้ อุปกรณ์ที่มีระดับแรงดันไฟฟ้าคงที่โดยไม่คำนึงถึงแรงดันไฟฟ้าของอุปกรณ์นั้นได้รับการกล่าวถึงเป็นพิเศษและได้รับการรับรองตามข้อกำหนด IIC
Olin Lathrop

5
ในเอกสารเก่า "The I2C-bus และวิธีการใช้งาน" โดย Philips ส่วนที่ 10.0 กล่าวถึงเกณฑ์การป้อนข้อมูลคงที่ของอุปกรณ์ 5V I2C 5V แบบเร็ว (โดยทั่วไปคือ NMOS) จากนั้นจะกล่าวว่า: " อุปกรณ์ I2C บัสที่มีระดับอินพุตที่เกี่ยวข้องกับ VDD จะต้องมีสายการจ่ายทั่วไปหนึ่งสายที่ตัวต้านทานแบบดึงขึ้นเชื่อมต่ออยู่ด้วย " (ตัวหนาของฉัน) @supercat - คุณพูดถึง: " อุปกรณ์ 5V ที่มีเกณฑ์การป้อนข้อมูลสูงซึ่งเป็น 2.5V หรือน้อยกว่า " คุณสามารถช่วยฉันด้วยการยกตัวอย่างของอุปกรณ์ดังกล่าวได้หรือไม่? การอ่านเอกสาร I2C แบบเก่าฉันสามารถค้นหาการกล่าวถึงขั้นต่ำ 3V I2C Vih คงที่สำหรับอุปกรณ์ 5V เก่าเหล่านั้น ขอบคุณ
SamGibson

2
@SamGibson: อุปกรณ์ที่มีระดับอินพุตที่เกี่ยวข้องกับ VDDอาจจำเป็นต้องทำงานจากแรงดันไฟฟ้าซึ่งอยู่ในช่วงที่กำหนดซึ่งกันและกัน ระยะใกล้จะขึ้นอยู่กับว่าแรงดันไฟฟ้าสัมพันธ์กับ VDD อย่างไร แผ่นข้อมูล Microchip สำหรับ PIC16F877 (ชิ้นส่วน 5V ที่เลือกโดยพลการ) แสดงรายการ V (IH) สำหรับหมุดปกติที่ 0.25VDD + 0.8V แม้ว่าอินพุต Schmitt Trigger จะสูงขึ้นมาก ที่ VDD = 5.2V อินพุตปกติจะมีค่า V (IH) ที่ระบุเป็น 2.1 โวลต์ ฉันไม่เห็นข้อมูลจำเพาะของฮาร์ดแวร์ I2C V (IH) แม้ว่ากราฟประสิทธิภาพทั่วไปแสดงให้เห็นว่ามันอยู่ระหว่างอินพุตปกติและ ST
supercat

24

ในสมัยก่อนคนขับ TTL นั้นดีกว่ามากในการดึงสัญญาณลงมามากกว่าดึงขึ้นมา ดังนั้นโปรโตคอลเช่น I2C แต่ยังขัดจังหวะบรรทัดรีเซ็ตและอื่น ๆ ทั้งหมดถูกนำมาใช้โดยใช้การดึงขึ้นกับการกระจายแบบเลื่อนลง


8
ในวันที่ทันสมัยดีกว่าเดิมยังคงเป็นจริงเพราะมันเป็นคุณสมบัติที่แท้จริงของเซมิคอนดักเตอร์ วันนี้มันไม่ได้มีค่าใช้จ่ายมากนักในการรับทรานซิสเตอร์ขนาดใหญ่ขึ้นเพื่อจัดการกับกระแสเดียวกัน
Arsenal

2
ฉันได้รับการบอกว่าด้วย CMOS มันง่ายกว่ามากที่จะเข้าใกล้แรงดันไฟฟ้าของรางไฟฟ้า อีกประเด็น 'ที่ TTL กำลังดิ้นรน (บางทีเราควรนับว่าเราโชคดีเพราะมันอนุญาตให้ 3V3 CMOS เชื่อมต่อกับ TTL)
Oldfart

14

ง่ายต่อการใช้กราวด์เป็นข้อมูลอ้างอิงทั่วไประหว่างระบบย่อยที่อาจมีแรงดันไฟฟ้าที่แตกต่างกัน หากคุณใช้ทรานซิสเตอร์ PNP เพื่อดึงแรงดันไฟฟ้าให้สูงขึ้นระบบย่อยทั้งหมดจะต้องเชื่อมต่อกับแหล่งจ่ายเดียวกัน


8

คำตอบที่ดีมากที่นี่ แต่ก็มีอีกเหตุผล

หากสถานะที่เงียบสงบของรถบัสอยู่ที่พื้นดินไม่มีวิธีใดที่จะบอกได้ว่ารถบัสนั้นเชื่อมต่อหรือแขวนอยู่ในอวกาศหรือไม่

เป็นเรื่องปกติที่การเลื่อนขึ้น - ลงจะอยู่ที่อุปกรณ์หลัก ทาสมักจะไม่มีแรงดึง นี่เป็นเพราะกระแสแบบเลื่อนลงที่จะต้องยืนยันในระดับต่ำจะเพิ่มขึ้นตามจำนวนอุปกรณ์ที่เชื่อมต่อกับบัส

ทาสเมื่อเสียบเข้ากับรถบัสจะสามารถตรวจจับได้ว่าสายถูกดึงสูง (สมมติว่าไม่ได้ใช้งาน) และรู้ว่ารถบัสนั้นมีจริงและเงียบ นั่นไม่ใช่กรณีที่มีรถบัสลำเอียงบนพื้นดิน


เพื่อที่จะตรวจจับบัสที่ถูกดึงสูงทาสจะต้องดึงมันลงมาตั้งแต่แรก ฉันไม่แน่ใจว่าทำไมขั้นตอนที่คล้ายกันไม่สามารถเกิดขึ้นได้กับขั้วตรงข้าม
Dmitry Grigoryev

@DmitryGrigoryev ทำไมมันต้องดึงบางสิ่งบางอย่างที่สูงต่ำไปแล้ว?
Trevor_G

5

หากฉันเข้าใจคำถามอย่างถูกต้องแง่มุมหนึ่งคือ:

  • ทำไมคุณถึงใช้ตัวต้านทานแบบดึงขึ้นและทรานซิสเตอร์ NPN แทนตัวต้านทานแบบดึงลงและทรานซิสเตอร์ PNP

ก่อนอื่นคุณควรทราบว่าคุณไม่ได้ใช้ทรานซิสเตอร์สองขั้ว (NPN, PNP) แต่เป็นมอสเฟต (ซึ่งมีอยู่ในตัวแปรที่แตกต่างกันสี่แบบ)

อุปกรณ์ที่ใช้ตัวแปร" pull-up และ NPN " ใช้การเพิ่มประสิทธิภาพ n-channel MOSFET เนื่องจากแหล่งที่มาของ MOSFET นี้เชื่อมต่อกับกราวด์แรงดันไฟฟ้าเกตแหล่ง (การควบคุมกระแสปัจจุบัน) เท่ากับแรงดันไฟฟ้าระหว่างเกตและกราวด์ ดังนั้น MOSFET สามารถควบคุมได้โดยใช้แรงดันไฟฟ้าระหว่าง 0 ถึง Vdd

จะมีความเป็นไปได้สามทางในการใช้งานตัวแปร" pull-down และ PNP ":

  • การใช้การเพิ่มประสิทธิภาพp-channel MOSFET

    สำหรับ NMOS หรือ CMOS IC MOSFET p-channel ที่มีคุณสมบัติเทียบเท่า (ความต้านทาน ฯลฯ ) ต้องใช้พื้นที่มากกว่า MOSFET n-channel

    ในพื้นที่ไมโครอิเล็คทรอนิคส์คือเงินดังนั้น p-channel MOSFET จะหลีกเลี่ยงถ้าเป็นไปได้

  • การใช้การเพิ่มประสิทธิภาพ n-channel MOSFET

    สิ่งนี้จะต้องการเอาท์พุทของวงจรลอจิกที่ขับทรานซิสเตอร์เพื่อให้มีแรงดัน "LOW" ของแรงดันไฟฟ้า (เช่น + 5V) และแรงดัน "สูง" เหนือแรงดันไฟฟ้า (เช่น + 10V เมื่อส่วนที่เหลือของวงจรจ่าย ด้วย + 5V)

    เหตุผล: แรงดันไฟฟ้ากราวด์แหล่งกำเนิดจะเป็น Vdd เมื่อ MOSFET กำลังดำเนินการ แรงดันเกตแหล่งที่มาจะต้องเป็นบวกดังนั้นแรงดันไฟฟ้าระหว่างเกตและกราวด์จะต้องสูงขึ้น

    คุณจะต้องใช้อุปกรณ์จ่ายแรงดันไฟฟ้าสองตัว - และวงจรขยับเอาต์พุตของวงจรลอจิกจาก 0 ... + 5V ถึง + 5V ... + 10V ...

  • การใช้MOSFET พร่อง n- ช่อง

    น่าเสียดายที่ฉันไม่สามารถบอกคุณได้เกี่ยวกับโซลูชันนี้ อย่างไรก็ตามฉันพบบางหน้าโดยใช้ Google โดยบอกว่า MOSFET พร่องนั้นยากต่อการสร้างมากกว่าการเพิ่มประสิทธิภาพ MOSFET และพวกเขาก็หลีกเลี่ยงด้วยเหตุผลนี้

    ฉันรู้จากอุปกรณ์อิเล็กทรอนิกส์กำลัง (ไม่ใช่ไมโครอิเล็คทรอนิคส์) ว่าตัวแปร "แหล่งจ่ายไฟสองชุด" ที่อธิบายไว้ข้างต้นเป็นที่ต้องการมากกว่า MOSFET ที่พร่อง (แต่ฉันไม่สามารถบอกได้ว่าทำไม)

    แก้ไขโดยใช้ MOSFET พร่อง n- ช่องคุณอาจจะต้องแรงดันลบ (เช่น -5V) ดังนั้นคุณจะต้องมีแรงดันไฟฟ้าสองตัว ...


0

นอกจากนี้ยังมีประโยชน์เพิ่มเติมอีกประการหนึ่งสำหรับการมีสายกราวด์ร่วมและสายดาต้าอัพแบบเลื่อนขึ้น

แม้ว่าความตั้งใจดั้งเดิมคือการเชื่อมต่ออุปกรณ์บน PCB เดียวกันในช่วงไม่กี่นิ้วเท่านั้น แต่ก็ประสบความสำเร็จพอแล้วดังนั้นตอนนี้จึงไม่ใช่เรื่องแปลกที่จะมีคู่สายยาวสองฟุตและเชื่อมต่อ "อุปกรณ์" ซึ่งอาจเป็นคอมพิวเตอร์หรืออะไรบางอย่างที่เท่าเทียมกัน ความซับซ้อนด้วยอุปกรณ์บางอย่างที่มีแหล่งพลังงานของตัวเอง (มีคุณภาพแตกต่างกันบอกว่าคุณเชื่อมต่อบางสิ่งบางอย่างปลั๊กผนังขับเคลื่อนด้วยสิ่งที่ใช้พลังงานแบตเตอรี่) มันจะดีกว่าถ้าการเชื่อมต่อใช้งานได้ "อย่างน้อยก็ดี" แม้ในสภาพที่ไม่เหมาะและไม่อยู่ในสเป็ค

และอุปกรณ์ที่เชื่อมต่ออยู่จำนวนมากอาจเชื่อมต่อด้วยวิธีอื่นดังนั้นจึงมีเพียงการสื่อสาร I2C โดยปกติเมื่อเชื่อมต่ออุปกรณ์เข้าด้วยกันคุณเชื่อมต่อด้วยcommon ground- บางครั้งเป็นส่วนหนึ่งของฟังก์ชั่นอื่น ๆ บางครั้งเพียงเพราะมันติดตั้งอยู่บนเคสโลหะและอุปกรณ์เชื่อมต่อกับเคสด้วยเช่นกัน (หรือกับเครื่องทำความเย็นทั่วไปหรืออะไรทำนองนั้น) หรืออาจ ถูกหุ้มด้วยสายเคเบิลที่มีสายกราวด์หุ้มอยู่ - ซึ่งเชื่อมต่อบริเวณ

หากคุณเชื่อมต่อสายไฟ (VCC) ของอุปกรณ์ดังกล่าวโดยตรงคุณจะพบปัญหาเมื่อสายเหล่านั้นมีแรงดันไฟฟ้าที่แตกต่างกันตามธรรมชาติ (แน่นอนว่ามันอาจบอกว่า 5V ที่นี่และที่นั่น แต่ขึ้นอยู่กับการก่อสร้างและความอดทนของแหล่งพลังงาน อาจเป็น 4.9V หรือ 5.2V หรือแม้กระทั่งการเปลี่ยนแปลงหากใช้พลังงานจากแบตเตอรี่และบางครั้งใช้มอเตอร์บางตัวทำให้พลังงานตกและสูงขึ้นตามเวลา)

ในกรณีดังกล่าวมีการลัดวงจรอย่างมีประสิทธิภาพระหว่างแหล่งพลังงานส่วนโวลต์และขึ้นอยู่กับแหล่งที่มา (และความต้านทานของวิธี) สามารถไหลกระแสค่อนข้างสูงที่เกิดขึ้นไม่เพียง แต่ในการสูญเสียพลังงานและความร้อนที่เพิ่มขึ้น หรือทำให้ชีวิตสั้นลง) แหล่งที่มาบางแห่ง ซึ่งไม่ดี

การมีกราวด์และ pull-ups ร่วมกันหลีกเลี่ยงปัญหาดังกล่าว - กราวด์เป็นกราวด์และตัวต้านทาน pullup จะอนุญาตให้ใช้เฉพาะกระแสไขว้เล็ก ๆ เท่านั้นแม้ว่า VCC จะแตกต่างกันมากในอุปกรณ์


1
นี่เป็นสิ่งเดียวกับคำตอบของเดฟทวีด
Janka

-2

คุณไม่จำเป็นต้องส่งพลังมากผ่านชิปถ้ามันดึงขึ้นมา

เนื่องจากชิปไม่ได้ขับอะไรเลยมันเป็นเพียงการสร้างสั้น ๆ เพื่อนำรถบัสมาที่ 0 และทำการเปิดเพื่อนำมันมาที่ 1

ถ้าดึงลงมาคุณจะต้องส่งพลังผ่านชิปเพื่อขับรถบัสไปที่ 1 หากรถบัสนั้นเกิดอุบัติเหตุสั้น ๆ นั่นอาจเป็นพลังมากมายที่คุณขับผ่านชิปนั้นเพื่อพยายามผลักมัน มากถึง 1

ข้อจำกัดความรับผิดชอบ: ฉันเป็นคนน่ารักในตอนนี้


3
ยินดีต้อนรับสู่ EE.SE " คุณไม่จำเป็นต้องส่งพลังมากผ่านชิปถ้ามันดึงขึ้น " ถ้าตัวต้านทานแบบดึงขึ้นและดึงลงมีขนาดเท่ากันกระแสก็จะเท่าเดิม การดึงขึ้นจะต้องใช้แหล่งจ่ายกระแสจากชิปขับเคลื่อนและจมลงในชิปขับ การดึงลงจะต้องใช้แหล่งจ่ายกระแสจากชิปขับและจมโดยชิปขับเคลื่อน อุบัติเหตุสั้นอาจเป็น V + หรือพื้นดิน
ทรานซิสเตอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.