I2C: อุปกรณ์ 3.3V และ 5V ที่ไม่มีการเปลี่ยนระดับบนบัส 3.3V?


12

ฉันจะต้องเปลี่ยนระดับถ้าฉันใช้อุปกรณ์ที่ขับเคลื่อนด้วย 5V บนบัส I2C ที่มีการดึงไปยัง 3.3V หรือไม่ ในความเข้าใจของฉันอุปกรณ์จะดึงเส้น (SDA, SCL) ต่ำ (ลงกราวด์) และไม่ขับแรงดันไฟฟ้าของอุปทานไปยังบัส ดังนั้นฉันจึงไม่เห็นเหตุผลที่ตัวเปลี่ยนระดับตราบใดที่อุปกรณ์ทั้งหมดตรวจจับแรงดันไฟฟ้าจาก pull-ups (3.3V) ว่ามีค่าตรรกะสูง ควรเป็นกรณีที่อุปกรณ์ใช้ 5V เป็นแหล่งจ่าย

ในกรณีของฉันฉันมีไอซีที่อินพุตไม่เป็นตัวต้านทานแรงดันไฟฟ้า5V เป็นหลักและฉันสามารถใช้พลังงานจากทาสของฉันด้วย 3.3V แต่การใช้ 5V นั้นง่ายกว่าในวงจรของฉันและอนุญาตให้อัตรานาฬิกาภายใน


2
ดังนั้นเพื่อสรุปสิ่งต่าง ๆ : - ไม่มีชิปใดตกอยู่ในอันตรายเมื่อใช้อุปกรณ์ที่มี 5V เป็น Vdd บน I2C บัสโดยใช้พูลอัพเป็น 3.3V - อาจทำงานได้หรือไม่ขึ้นอยู่กับความคลาดเคลื่อนการออกแบบชิปภายใน ...
Jannis

2
ถูกต้อง - ไม่มีอันตรายจากความเสียหายเพียงแค่ไม่รับประกันการใช้งานที่ถูกต้อง
อดัมลอเรนซ์

คำตอบ:


15

ตามรุ่นที่ 4 ของสเป็คI2C ,

"เนื่องจากอุปกรณ์เทคโนโลยีที่หลากหลาย (CMOS, NMOS, ไบโพลาร์) ที่สามารถเชื่อมต่อกับ I2C บัสได้ระดับของตรรกะ '0' (ต่ำ) และ '1' (สูง) จะไม่คงที่และขึ้นอยู่กับ ระดับที่เกี่ยวข้องของ VDD ระดับการอ้างอิงอินพุตถูกตั้งค่าเป็น 30% และ 70% ของ VDD; VIL คือ 0.3VDD และ VIH คือ 0.7VDD ดูที่รูปที่ 38 แผนภาพเวลาอุปกรณ์อินพุตดั้งเดิมบางตัวได้รับการแก้ไขที่ VIL = 1.5 V และ VIH = 3.0 V แต่อุปกรณ์ใหม่ทั้งหมดต้องการข้อมูลจำเพาะ 30% / 70% นี้ดูส่วนที่ 6 สำหรับข้อมูลจำเพาะทางไฟฟ้า " (หน้า 9)

ลึกลงไปในสเป็คคุณจะเห็นว่านี้เป็นตรรกะแรงดันสูงขั้นต่ำ :0.7×VDD

ตัดตอนมาจากข้อกำหนดเฉพาะของ NXP I2C rev  4

สำหรับระบบ 5V ของคุณ:

0.7×5V=3.5V

0.3×5V=1.5V

สำหรับฉัน 3.3-V pull-up ดูเล็กน้อยโดยเฉพาะอย่างยิ่งหากอุปกรณ์ 5V ใด ๆ ของคุณใช้มาตรฐาน 'ใหม่' ที่สำหรับตรรกะ HIGH0.7×VDD

ระยะทางของคุณอาจแตกต่างกันไป แต่สิ่งที่ดีที่สุดคือการอยู่ภายในสเป็คทุกครั้งที่เป็นไปได้ ...


ขอบคุณสำหรับการทำความสะอาด stevenvh เมื่อวานนี้ฉันรีบ
อดัมลอเรนซ์

11

คำตอบของ Cees ไม่ถูกต้องโดยเฉพาะ "เสมอ" และ "ใด ๆ " Microcontroller I / Os อาจต้องการ 0.6 Vdd เป็นอย่างต่ำสำหรับระดับสูงส่วนอื่น ๆ มีอย่างน้อย 0.7 Vdd และเช่นเดียวกับ Madmanguruman ระบุว่านี่เป็นมาตรฐานสำหรับ I2C 0.7 Vdd คือ 3.5 V ที่แหล่งจ่าย 5 V ดังนั้น 3.3 V จึงต่ำเกินไป

แต่มันยิ่งแย่กว่าเดิม ตัวควบคุมแรงดันไฟฟ้ามักจะมีความอดทน 5% สำหรับแรงดันขาออกเล็กน้อยดังนั้นกรณีที่เลวร้ายที่สุด 5 V อาจเป็น 5.25 V แล้ว 0.7 Vdd กลายเป็น 3.675 V. อินพุตขั้นต่ำสำหรับระดับสูง หาก 3.3 V มีค่าเผื่อติดลบ 5% ดังนั้น 3.3 V จะกลายเป็น 3.135 V ดังนั้นหากมีค่าความคลาดเคลื่อนที่ได้รับอาจจะมีค่าครึ่งโวลต์ต่ำเกินไปหรือ 15%

ดังนั้น,

ดังนั้นฉันจึงไม่เห็นเหตุผลที่ตัวเปลี่ยนระดับตราบใดที่อุปกรณ์ทั้งหมดตรวจจับแรงดันไฟฟ้าจาก pull-ups (3.3V) ว่ามีค่าตรรกะสูง ควรเป็นกรณีที่อุปกรณ์ใช้ 5V เป็นแหล่งจ่าย

เป็นข้อสรุปที่ไม่เหมาะ ตรวจสอบเอกสารข้อมูลและทำการคำนวณเสมอ


-1

ฉันรู้สึกว่าคำตอบอื่น ๆ ไม่ได้ตอบคำถามของ Jannis เขาถามเกี่ยวกับการใช้อุปกรณ์ 5V บนบัส 3.3V (สมมุติว่า 3.3V MCU) ฉันยอมรับว่าการดึงอัพที่เชื่อมโยงกับ 3.3V นั้นถือว่าใช้ได้เช่นความปลอดภัยสำหรับอุปกรณ์หลักเนื่องจากหมุด SDA / SCL จะดึงลงมาเท่านั้นตามที่เขากล่าวไว้ ระวังว่าทาสและอาจารย์จะต้องแบ่งปันพื้นดินทั่วไป (Vss pins equipotential) เพื่อป้องกัน MCU จากแรงดันไฟฟ้าเกิน แต่นี่อาจจะเป็นกรณีต่อไป ดังนั้นวิธีการของแจนิสน่าจะใช้ได้โดยไม่มีตัวจำเลเวล


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