ผู้สัมภาษณ์ต้องการทราบว่าเหตุใดจึงใช้ตัวต้านทานแบบดึงขึ้นในSDA และ SCLเมื่อสามารถใช้ตรรกะตรงกันข้ามได้ มีคำอธิบายว่าทำไมการใช้ตัวต้านทานแบบดึงขึ้นคือการออกแบบที่เลือก?
ผู้สัมภาษณ์ต้องการทราบว่าเหตุใดจึงใช้ตัวต้านทานแบบดึงขึ้นในSDA และ SCLเมื่อสามารถใช้ตรรกะตรงกันข้ามได้ มีคำอธิบายว่าทำไมการใช้ตัวต้านทานแบบดึงขึ้นคือการออกแบบที่เลือก?
คำตอบ:
หากต้องการขยายคำตอบของ Jon เล็กน้อย:
ใช่มันเป็นเรื่องเกี่ยวกับ MOSFET ที่คุณต้องการใช้
MOSFET แบบ N-channel นั้นดีกว่าสำหรับการสลับลอจิกมากกว่า P-channel เพราะ:
ดังนั้นสำหรับการกำหนดค่าแบบ 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 และตัวต้านทานแบบดึงขึ้นนั้นคุ้มค่ามากที่สุด
ข้อดีอีกอย่างของการดึงขึ้น / ลงแบบพาสซีฟแบบพาสซีฟก็คือมันสามารถทำงานกับแรงดันไฟฟ้าได้หลายแบบ โปรดทราบว่ามีการระบุระดับสูงและต่ำแบบดิจิทัลอย่างชัดเจนด้วย IIC ระดับเหล่านั้นต่ำพอที่จะทำงานกับ pullups 3.3 V สามารถสร้างอุปกรณ์ที่ทำงานได้กับทั้ง 5 V และ 3.3 V ในความเป็นจริงสามารถลากสาย IIC บัสได้สูงถึง 3.3 V และจะทำงานร่วมกับอุปกรณ์ต่าง ๆ บนบัสที่แยกการขับเคลื่อนด้วยแรงดันไฟฟ้าที่แตกต่างกัน
ในขณะที่ 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
ฉันเดาว่าคำตอบกลับไปทำไมเราใช้การประชุมภาคพื้นดินเชิงลบในสถานที่แรก (และนี่คือแน่นอนไม่แพร่หลายก่อนยุคสารกึ่งตัวนำ) เหตุผลนี้เป็นเพราะอุปกรณ์ N-Channel มีประสิทธิภาพที่ดีกว่าอุปกรณ์ P-Channel เนื่องจากฟิสิกส์ของประเภทของผู้ให้บริการส่วนใหญ่ที่ใช้ในพวกเขา
ในช่วงแรกของวงจรรวมนี่เป็นข้อ จำกัด ที่ค่อนข้างร้ายแรงดังนั้นจึงมีความต้องการใช้ทรานซิสเตอร์ N-Channel (หรือ NPN) เพื่อให้ได้ประสิทธิภาพสูงสุด จากนี้เรามีระบบกราวด์เชิงลบและเอาท์พุทตัวสะสมแบบเปิดซึ่งจำเป็นต้องใช้ตัวต้านทานแบบดึงขึ้นแทนที่จะดึงลง
แน่นอนว่าบัส I2C นั้นมีความเร็วสูงแทบจะไม่มีเหตุผลที่ไม่สามารถใช้งานได้โดยใช้ตัวต้านทานแบบดึงลง แต่ก็ไม่มีประโยชน์ ดังนั้นเราจึงยึดตามแบบแผนและใช้ pull-ups
นี่คือการเก็งกำไรบางส่วน
เมื่อคุณดึง (แทนที่จะกดดึง) คุณจะเห็นได้ชัดว่าสามารถมีอุปกรณ์หลายอย่างในการแข่งขันสำหรับรถบัสโดยไม่มีกระแสมากเกินไป (สิ่งที่ดี - แต่คุณสามารถบรรลุสิ่งเดียวกันได้ด้วยการดึงลง)
ใน "วันเก่า ๆ " ของทรานซิสเตอร์แบบไบโพลาร์ TTL แบบลอจิกที่ง่ายที่สุดใช้ตัวสะสมแบบเปิดที่มีทรานซิสเตอร์ NPN ทุกอย่างถูกอ้างถึงบนพื้นดินซึ่งทำให้ระดับไกนั้นง่ายต่อการกำหนดโดยไม่คำนึงถึงแรงดันบัส นอกจากนี้ NPN ยังเร็วกว่า PNP
หากฉันมีอุปกรณ์หลายตัวที่ทำงานกับแรงดันไฟฟ้าของตนเองและแรงดันไฟฟ้านั้นไม่คงที่ดังนั้นการดึงขึ้นแทนที่จะดึงลงกลายเป็นสิ่งจำเป็นความจำเป็นหากอุปกรณ์หลายชิ้นพยายามดึงรถบัสไปยังรางจ่ายของตนการไหลของกระแสจะไม่ถูก จำกัด และบางสิ่งอาจทอด อย่างน้อยพวกเขาก็เห็นด้วยกับเรื่องของมูลค่าดังนั้นปัญหานี้จึงไม่เกิดขึ้น
ด้วย CMOS เรื่องราวจะเปลี่ยนไป - ตอนนี้ระดับไกปืนอยู่ตรงกลางรถไฟ แต่ EE สามารถเป็นพวงดั้งเดิมได้ แน่นอนว่ามาจากวันแรก ๆ ของทรานซิสเตอร์ฉันไม่เคยถามแม้แต่การเลือก pull-ups ด้วยเหตุผลข้างต้น
อย่างที่ฉันบอกไปนี่เป็นเพียงการเก็งกำไร
นี่อาจเป็นสิ่งทางประวัติศาสตร์
ทรานซิสเตอร์เก่าและวงจรรวมใช้พลังงานน้อยลงจริง ๆ เมื่อพวกเขาอยู่ที่ 5 V มากกว่าที่ 0 V เนื่องจากมีความแตกต่างอย่างมีนัยสำคัญระหว่างสองระดับนักออกแบบเลือกที่จะทำให้สถานะ 'ว่าง' เป็น 5 V จากนั้นเมื่อเวลาผ่านไปทรานซิสเตอร์และไอซีเพิ่มขึ้นทำให้ทั้งสองรัฐกินไฟในปริมาณเท่าเดิม แต่ไม่มีเหตุผลที่แท้จริงในการเปลี่ยนมาตรฐาน
ตอนนี้คุณเห็นสิ่งต่าง ๆ มากมายเช่นนี้ - ที่ว่างเป็น 5 V - เพียงเพราะมาตรฐานไม่เคยเปลี่ยน
เป็นเวลาหลายปีแล้วที่ฉันอ่านข้อมูลจำเพาะของ I2C แต่ฉันจำได้ว่าครั้งแรกที่มีคนใช้บ่อยครั้งที่เรียกมันว่าบัส 2 สายเปิด มันทำให้การเชื่อมต่อและการตรวจจับการชนนั้นง่ายมากแม้กระทั่งการกระแทกบิต แม้ 20 ปีที่แล้วมันไม่ได้เป็นรถบัสประสิทธิภาพสูงราคาถูกและใช้งานง่าย
ฉันจะบอกว่ามันเป็นเพราะ I2C ถูกกำหนดเป็นรถบัสที่ทุกหน่วยที่เชื่อมต่อควรเป็น open-drain หรือ open-collector ซึ่งหมายความว่ามันสามารถขับรถบัสต่ำไม่สูง (เมื่อทรานซิสเตอร์ไดรฟ์เอาต์พุตถูกปิดพินจะอยู่ในสถานะอิมพีแดนซ์สูง)
รูปแบบนี้ให้ประโยชน์ที่ดีเช่นคุณสามารถเชื่อมต่ออุปกรณ์ที่มีแรงดันไฟฟ้าการส่งสัญญาณที่แตกต่างกันและบัสนั้นสามารถรักษาตัวเองจากข้อผิดพลาดในการสื่อสาร
เห็นได้ชัดว่ามาตรฐานนั้นสามารถกำหนดได้ด้วยวิธีอื่นเช่นการกำหนดค่าที่ไม่ได้ใช้งาน / การใช้งานสูงและคำตอบอื่น ๆ ที่สัมผัสกับองค์ประกอบนั้นก็ค่อนข้างดี
แหล่งที่มา: LabWorX 1 การควบคุมบัส I2C โดย Vincent Himpe หนังสือที่ดีจริง ๆ เกี่ยวกับ I2C เป็นประวัติความเป็นมาวิธีใช้งานในฮาร์ดแวร์และวิธีใช้ในซอฟต์แวร์และการใช้งานการดีบัก
คำตอบที่แท้จริงที่ยังไม่มีใครแตะต้องอย่างเพียงพอก็คือมันช่วยให้คุณสามารถเชื่อมต่ออุปกรณ์ที่ขับเคลื่อนด้วยแรงดันไฟฟ้าที่แตกต่างกัน (ตราบเท่าที่หมุด I / O นั้นทนได้) ตัวอย่างเช่นอุปกรณ์ 3.3V สามารถสื่อสารกับอุปกรณ์ที่ปิด 1.8V ตราบใดที่อุปกรณ์ 1.8V ของ IO ทนต่อแรงดันไฟฟ้าได้ถึง 3.3 แน่นอนว่าอุปกรณ์ทุกตัวสามารถขับ 0V ได้ แต่อุปกรณ์บางอย่างอาจไม่สามารถเพิ่มแรงดันให้กับตัวต้านทานแบบดึงขึ้นได้
นอกจากนี้ IC ส่วนใหญ่สามารถจมกระแสมากกว่าพวกเขาสามารถแหล่ง นี่เป็นเพราะการกระจายความร้อน ดังนั้นการจมกระแส (พื้นการขับขี่) จากการดึงจึงเป็นเรื่องง่ายสำหรับชิ้นส่วนมากกว่าการหากระแส (การขับด้วยแรงดันสูง) ลงสู่ส่วนที่ดึงลง