ทำไมI²Cมีตัวต้านทานแบบดึง (คำถามสัมภาษณ์) เท่านั้น?


15

ผู้สัมภาษณ์ต้องการทราบว่าเหตุใดจึงใช้ตัวต้านทานแบบดึงขึ้นในSDA และ SCLเมื่อสามารถใช้ตรรกะตรงกันข้ามได้ มีคำอธิบายว่าทำไมการใช้ตัวต้านทานแบบดึงขึ้นคือการออกแบบที่เลือก?


ดูคำตอบก่อนหน้า: electronics.stackexchange.com/questions/113009/...
บุญชู

เช่นเดียวกับคอมเมนต์ Ultra Fast-mode I2C-bus protocol ทำงานเป็นแบบ push-pull ดูที่nxp.com/documents/user_manual/UM10204.pdf , ส่วน 3.2 โปรโตคอล I2C บัสแบบ Ultra-mode ที่รวดเร็ว
Kvegaoro

ฉันสงสัยว่าทำไม NXP ไม่ได้ระบุโพรโตคอล I2C ที่เร็วที่สุดซึ่งใช้ SDA สองทิศทางและ SCK แบบทิศทางเดียวมีไดรฟ์หลัก SDA อย่างหนักเมื่อต้องการผลผลิตสูงและมีต้นแบบรอนานพอที่จะดึงสายได้สูง ในกรณีที่มันจะสนใจว่าทาสต้องพูดอะไร?
supercat

ผู้สัมภาษณ์ให้คำตอบกับรุ่นของพวกเขาหรือไม่?
ทองแดง

คำตอบ:


14

หากต้องการขยายคำตอบของ Jon เล็กน้อย:

ใช่มันเป็นเรื่องเกี่ยวกับ MOSFET ที่คุณต้องการใช้

MOSFET แบบ N-channel นั้นดีกว่าสำหรับการสลับลอจิกมากกว่า P-channel เพราะ:

  • โดยทั่วไปจะมีความต้านทานต่ำกว่ามาก ( )RDSON
  • พวกเขาเปิดและปิดได้เร็วขึ้น

ดังนั้นสำหรับการกำหนดค่าแบบ open-drain (ซึ่งเป็นสิ่งที่ I2C เป็น) มันถูกกว่าและง่ายกว่ามากในการสร้างโดยใช้การจัดเรียง "high idle" กับ N-channel MOSFETs แทน "idle low" ด้วย MOSFET แบบ P-channel

ตัวเลือกที่สามคือ "ไม่ได้ใช้งานต่ำ" โดยใช้ N-channel MOSFETs แต่คุณต้องการไดร์เวอร์เกตแรงดันสูงเพื่อเพิ่มแรงดันเกทให้สูงกว่าแรงดันแหล่งที่มามากพอที่มอสเฟตจะเปิด ไม่เหมาะสำหรับรถบัสสื่อสารขนาดเล็ก แต่การใช้งานแบบนี้มักใช้กับสะพาน H สำหรับการขับขี่ยานยนต์ซึ่งคุณต้องการการตอบสนองที่เหมือนกัน (หรือคล้ายกัน) ระหว่างด้านสูงและด้านล่างของสะพาน H การใช้คู่ P-channel และ N-channel ใน H-bridge หมายความว่าคุณต้องรวมโซน Dead ระหว่างการปิด P-channel และการเปลี่ยน N-channel เนื่องจากมันใช้เวลานานกว่ามากและช่วยลดประสิทธิภาพการใช้พลังงานของคุณ .

แต่สำหรับรถบัสสื่อสารขนาดเล็กเช่น I2C ที่คุณต้องการความเร็วสูงต้นทุนต่ำและการใช้งานที่เรียบง่าย "idle high" ด้วย MOSFET N-channel และตัวต้านทานแบบดึงขึ้นนั้นคุ้มค่ามากที่สุด


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

1
อย่าสับสนการสลับความเร็วสูงขึ้นด้วยแบนด์วิดท์ที่สูงขึ้น การสลับความเร็วสูงช่วยให้คุณได้มุมที่คมชัดกว่าซึ่งหมายถึงการสื่อสารที่เชื่อถือได้มากขึ้น
Majenko

1
pull-ups ตัวต้านทานไม่ได้เป็นวิธีที่จะบรรลุความเร็วการสลับที่สูงขึ้น
โฟตอน

ซึ่งเป็นเหตุผลว่าทำไมการเลือกค่าตัวต้านทานที่เหมาะสมสำหรับ I2C จึงมีความสำคัญ 'และสาเหตุที่ Arduino เป็นสิ่งที่ไม่ดีสำหรับการใช้ pullups ภายในตามค่าเริ่มต้น
Majenko

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

12

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


ฉันเกือบ 100% นี่คือคำตอบที่พวกเขากำลังมองหาฉันมีเพื่อนคนหนึ่งที่ถูกถามว่าในการสัมภาษณ์กับ บริษัท ผู้ผลิตซีพียูขนาดใหญ่ (เดาว่าอันไหน) และนั่นคือคำตอบที่พวกเขากำลังมองหา
user34920

6

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

แต่มีข้อดีอย่างหนึ่งของ NMOS open drain outputs มากกว่า PMOS open drain ที่ไม่ได้ใช้กับ I2C โดยตรง: เมื่อ VCC เป็นบวก NMOS open drain จะอนุญาตให้ชิปที่มีระดับ VCC ต่างกันเชื่อมต่อกันได้ นี่คือสาเหตุส่วนหนึ่งของเหตุผลที่ว่าทำไม NMOS แบบลอจิกวงจรแยกแบบลอจิคัลที่มีอยู่มากมาย

ในทางกลับกันฉันไม่ทราบว่ามีชิป PMOS แบบ open-drain ใด ๆ ในตลาด ในความเป็นจริงฉันไม่เชื่อว่าฉันเคยพบ PMOS open-drain output บนชิปใด ๆ (ฉันใช้ ECL หลายครั้งซึ่งมีเอาต์พุต NPN open-emitter ที่มีพฤติกรรมคล้ายกับ PMOS open drain)

ความพร้อมใช้งานของชิปตรรกะแบบแยกท่อระบายน้ำ open open NMOS ทำให้ NMOS open drain มากคุ้นเคยกับนักออกแบบอิเล็กทรอนิกส์มากกว่า PMOS open drain

ทั้งความคุ้นเคยและความพร้อมใช้งานของชิปแยก (ตัวอย่างเช่นต้นแบบ) อาจส่งผลต่อผู้ออกแบบ I2C ในการเลือกการกำหนดค่า open-drain ของ NMOS


6

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

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

แน่นอนว่าบัส I2C นั้นมีความเร็วสูงแทบจะไม่มีเหตุผลที่ไม่สามารถใช้งานได้โดยใช้ตัวต้านทานแบบดึงลง แต่ก็ไม่มีประโยชน์ ดังนั้นเราจึงยึดตามแบบแผนและใช้ pull-ups


2

นี่คือการเก็งกำไรบางส่วน

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

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

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

ด้วย CMOS เรื่องราวจะเปลี่ยนไป - ตอนนี้ระดับไกปืนอยู่ตรงกลางรถไฟ แต่ EE สามารถเป็นพวงดั้งเดิมได้ แน่นอนว่ามาจากวันแรก ๆ ของทรานซิสเตอร์ฉันไม่เคยถามแม้แต่การเลือก pull-ups ด้วยเหตุผลข้างต้น

อย่างที่ฉันบอกไปนี่เป็นเพียงการเก็งกำไร


1

นี่อาจเป็นสิ่งทางประวัติศาสตร์

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

ตอนนี้คุณเห็นสิ่งต่าง ๆ มากมายเช่นนี้ - ที่ว่างเป็น 5 V - เพียงเพราะมาตรฐานไม่เคยเปลี่ยน


ยังคงเป็นความจริงที่ IC ส่วนใหญ่สามารถใช้พลังงานได้มากกว่าแหล่งที่มาดังนั้นจึงยังใช้งานได้
Joel B

1

เป็นเวลาหลายปีแล้วที่ฉันอ่านข้อมูลจำเพาะของ I2C แต่ฉันจำได้ว่าครั้งแรกที่มีคนใช้บ่อยครั้งที่เรียกมันว่าบัส 2 สายเปิด มันทำให้การเชื่อมต่อและการตรวจจับการชนนั้นง่ายมากแม้กระทั่งการกระแทกบิต แม้ 20 ปีที่แล้วมันไม่ได้เป็นรถบัสประสิทธิภาพสูงราคาถูกและใช้งานง่าย


1

ฉันจะบอกว่ามันเป็นเพราะ I2C ถูกกำหนดเป็นรถบัสที่ทุกหน่วยที่เชื่อมต่อควรเป็น open-drain หรือ open-collector ซึ่งหมายความว่ามันสามารถขับรถบัสต่ำไม่สูง (เมื่อทรานซิสเตอร์ไดรฟ์เอาต์พุตถูกปิดพินจะอยู่ในสถานะอิมพีแดนซ์สูง)

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

เห็นได้ชัดว่ามาตรฐานนั้นสามารถกำหนดได้ด้วยวิธีอื่นเช่นการกำหนดค่าที่ไม่ได้ใช้งาน / การใช้งานสูงและคำตอบอื่น ๆ ที่สัมผัสกับองค์ประกอบนั้นก็ค่อนข้างดี

แหล่งที่มา: LabWorX 1 การควบคุมบัส I2C โดย Vincent Himpe หนังสือที่ดีจริง ๆ เกี่ยวกับ I2C เป็นประวัติความเป็นมาวิธีใช้งานในฮาร์ดแวร์และวิธีใช้ในซอฟต์แวร์และการใช้งานการดีบัก


1

คำตอบที่แท้จริงที่ยังไม่มีใครแตะต้องอย่างเพียงพอก็คือมันช่วยให้คุณสามารถเชื่อมต่ออุปกรณ์ที่ขับเคลื่อนด้วยแรงดันไฟฟ้าที่แตกต่างกัน (ตราบเท่าที่หมุด I / O นั้นทนได้) ตัวอย่างเช่นอุปกรณ์ 3.3V สามารถสื่อสารกับอุปกรณ์ที่ปิด 1.8V ตราบใดที่อุปกรณ์ 1.8V ของ IO ทนต่อแรงดันไฟฟ้าได้ถึง 3.3 แน่นอนว่าอุปกรณ์ทุกตัวสามารถขับ 0V ได้ แต่อุปกรณ์บางอย่างอาจไม่สามารถเพิ่มแรงดันให้กับตัวต้านทานแบบดึงขึ้นได้

นอกจากนี้ IC ส่วนใหญ่สามารถจมกระแสมากกว่าพวกเขาสามารถแหล่ง นี่เป็นเพราะการกระจายความร้อน ดังนั้นการจมกระแส (พื้นการขับขี่) จากการดึงจึงเป็นเรื่องง่ายสำหรับชิ้นส่วนมากกว่าการหากระแส (การขับด้วยแรงดันสูง) ลงสู่ส่วนที่ดึงลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.