ความยาวบัส I2C สูงสุด?


38

ความยาวสูงสุดของสายเคเบิลที่สามารถใช้เชื่อมต่ออุปกรณ์ I2C สองตัว (I2C master-> I2C slave) คืออะไร?

ใช่ฉันรู้ว่า I2C ได้รับการออกแบบมาเพื่อการสื่อสารภายในบอร์ดจริงๆ ฉันได้รับมอบหมายให้ "เป้าหมายการออกแบบ" ในการใช้บัส I2C ทั่วไปสำหรับทาส I2C หลายตัวเพื่อรองรับการสาธิต

เพื่อความชัดเจนลองใช้อัตราบัส I2C มาตรฐานที่ 100 kHz


1
ความยาวสูงสุดมาให้ฉันเล่นกับความจุที่แนะนำโดยความยาว ความจุมากเกินไปและอาจส่งผลต่อความเร็วของคุณ เช่นเคยนี้ขึ้นอยู่กับ
Gustavo Litovsky

@GustavoLitovsky คุณถูกต้องเกี่ยวกับความจุ นอกจากนี้ยังขึ้นอยู่กับประเภทของสายเคเบิลที่ใช้ (ป้องกันเทียบกับไม่ป้องกัน) ฉันสนใจแนวทางทั่วไปมากที่สุด
Nate

2
@Nate Guideline: ความจุบัสสุทธิสูงสุด 400pF (ค่อนข้างเกี่ยวข้องกับคำถาม: บันทึกความทรงจำของรถบัส I2C ที่รก )
Nick Alexeev

1
I2C = บัสรวมวงจร มันไม่ได้ออกแบบมาสำหรับระยะทางไกลระหว่างกล่องและไม่แน่นอนที่ 400kHz
Spehro Pefhany

1
แค่อยากจะทิ้งประสบการณ์ส่วนตัวนอกเหนือจากการคำนวณ ฉันได้ทำการสาธิตตั้งแต่บอร์ด dev ไปจนถึง I2C ถึงตัวแปลง USB ด้วยสายที่ไม่มีการหุ้มประมาณ 3 ฟุต ดูไม่สวย แต่ใช้งานได้ 90%
mcmiln

คำตอบ:


16

สำหรับโหมดรวดเร็วและต้านทาน pullup, ความจุควรจะน้อยกว่า 200pF ตามนี้เอกสาร NXP ข้อกำหนด I2C บัสและคู่มือการใช้

ด้วย pullups แหล่งปัจจุบันคุณสามารถไปที่ 400pF แต่ไม่สามารถใช้กับตัวต้านทาน

หากสายไฟของคุณคือ 20pF / 30 ซม. และคุณมีความจุ 50pF ของการจรจัดและการป้อนข้อมูลอีกครั้งคุณจะ จำกัด ความยาวสายเคเบิลไว้ที่ 2.25m สมมติฐานต่าง ๆ จะนำไปสู่ตัวเลขต่างกัน


1
@KrunalDesai มีการกล่าวถึงโดยเฉพาะในเอกสาร NXP ที่ลิงก์ด้านบน ข้อมูลจำเพาะ I2C บัสและคู่มือผู้ใช้
Spehro Pefhany

1
สำหรับตัวอย่างในโลกแห่งความเป็นจริง "Wiimote" ของ Nintendo Wii ใช้ 400kHz I2C ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) เพื่อสื่อสารกับอุปกรณ์ต่อพ่วงเช่น Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) ซึ่งเช่นเดียวกัน คุณสามารถดูได้ว่ามีสายเคเบิลยาวประมาณ 1 เมตร ตัวขยายแบบพาสซีฟจะถูกขายเพื่อเพิ่ม 1m เพิ่มเติม ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ) ดังนั้นพวกเขาจึงจะผลักดัน แต่อยู่ในระยะ 2.25m ที่ จำกัด
Rob Starling

16

ความยาวของเสียงที่บ้าเช่น 10,25 และ 100 เมตรนั้นเป็นไปได้อย่างสมบูรณ์แบบและฉันใช้วิธีนี้บ่อยครั้ง (ด้วย UART ไม่ใช่ I2C แต่วิธีการนี้ตั้งอยู่) เมื่อฉันต้องรวบรวมสิ่งต่าง ๆ เข้าด้วยกันอย่างรวดเร็ว มันไม่ได้เป็นวิธีที่ดีที่สุด

กุญแจสำคัญคือการรู้เกณฑ์แรงดันไฟฟ้าขาเข้าของคุณ ตรวจสอบให้แน่ใจว่าแรงดันตกในสายดินนั้นต่ำกว่านี้หรือไม่เช่นนั้นเครื่องส่งสัญญาณที่มีศักยภาพสูงที่พื้นดินจะไม่สามารถดึงแรงดันไฟฟ้าต่ำพอ การขาดความอดทนสำหรับการชดเชยพื้นดิน IMHO เป็นเหตุผลที่ดีที่สุดในการใช้ RS485 หรือสามารถรับส่งสัญญาณ (I2C over CAN ถูกกล่าวถึงในบันทึกการใช้งานไม่กี่)

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

แต่ลองยกตัวอย่าง CAT5 CAT5 ต้องไม่สูงกว่า 52pf / m หรือไม่ใช่ CAT5

สายเคเบิล 100p ของ 52pf มีความจุ 5200pf หรือ 5.2nf

5.2n คูณ 20kohms (pullup) ให้เวลาคงที่ประมาณ 104 microseconds ที่ จำกัด ความเร็วไว้ที่ประมาณ 10kHz หรือมากกว่านั้น

ใช้ 2.2kohm pullups คุณอาจได้รับ 100kHz

ฉันได้ยินมาว่าอุปกรณ์ควรมีตัวต้านทานบน SDL และ SCK เนื่องจากมีการโหลด capacitive ขนาดใหญ่ที่พวกเขากำลังขับรถอยู่เช่น 180 หรือ 200 โอห์ม

แต่โดยความจริงแล้ว I2C ​​นั้นไม่ได้อยู่ในระยะทางไกล สามารถรับส่งสัญญาณหรือ RS485 ที่ใช้กับ UART ปกติเป็นโซลูชั่นที่แข็งแกร่งพร้อมการป้องกันความผิดที่ดีมาก, ความต้านทาน ESD, ความเร็ว, ระยะทางและอื่น ๆ ในราคาดอลลาร์ต่อชิปหรือมากกว่านั้น อิสระในการพกพาพลังงานพร้อมกับข้อมูล

ข้อเสียเพียงอย่างเดียวคือตัวรับส่งสัญญาณสามารถเข้าถึงการส่งสัญญาณ 70ma และ 1 หรือ 2ma เพียงแค่ฟังดังนั้น I2C หรือ direct TTL UART อาจมีประโยชน์ในสถานการณ์ที่ใช้พลังงานต่ำมาก


7

ฉันทำงานกับ บริษัท ที่ทำเซ็นเซอร์ USB ส่วนใหญ่จะขึ้นอยู่กับชิปเซ็นเซอร์ I2C อุปกรณ์เหล่านั้นสามารถแยกออกเป็นสองส่วนดังนั้นคุณสามารถติดตั้งส่วน CPU ในที่เดียวและส่วนเซ็นเซอร์อีกส่วนหนึ่ง เราทำการทดสอบจำนวนมากเกี่ยวกับการเชื่อมต่อ I2C ระหว่าง CPU ของอุปกรณ์และเซ็นเซอร์ I2C ที่ 100 kHz พร้อมโพรโทคอลการกู้คืนข้อผิดพลาดที่ดีสามารถเข้าถึง 25m ได้อย่างง่ายดายโดยใช้สายพื้นฐาน เรายังสามารถเข้าถึง 100 เมตรหนึ่งครั้งด้วยสายเคเบิล CAT5


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

1
25m นั้นค่อนข้างจะเยอะสำหรับ usb ...
Vladimir Cravero

3
ไม่ฉันกำลังพูดถึงการเชื่อมต่อI2Cระหว่าง CPU ของอุปกรณ์กับชิปเซ็นเซอร์ I2C ไม่ใช่การเชื่อมต่อ USB ระหว่างโฮสต์และ CPU นี่คือตัวอย่าง: yoctopuce.com/EN/products/yocto-meteo/doc/…
martinm

1
หากคุณต้องการใช้ Twisted Pair สำหรับ I2C และ power คู่ไหนที่คุณจะรวมเข้าด้วยกัน? (SDA, SCL), (VCC, GND) หรือ (SDA, GND), (SCL, VCC)
Cano64

3
เป็นการดีที่คุณไม่ได้ใช้คู่บิดเลย Twisted pair มีประโยชน์สำหรับสัญญาณที่สมดุล หากคุณไม่มีสายอื่นให้บิดสัญญาณพร้อมกราวด์ หากคุณมีเพียงสี่สายจริง ๆ ลองคิดดูว่าพลังงานระยะไกลสิ้นเปลืองเท่าไรคุณอาจจบด้วยออฟเซ็ตกราวด์ที่สูงกว่าที่ยอมรับได้ - ก่อนที่จะตัดสินใจใช้สายเดียวสำหรับ GND ฉันมักจะใช้สายเคเบิล Cat5 เก่า (ไม่สูงกว่า! ตัวป้องกันคู่เพิ่มความจุที่คุณไม่ต้องการ) ด้วยกราวด์คู่หนึ่งคู่หนึ่งคู่ + 5V และ SDA + GND และ SCL + GND
Matthias Urlichs

4

IIC เป็นโปรโตคอลแบบซิงโครนัสและดังนั้นจึงสามารถเรียกใช้โดยพลการช้าๆเพื่อตอบสนองความต้องการของระบบเกี่ยวกับระยะทางและเสียง

มีตัวอย่างมากมายของการใช้ IIC ผ่านสายเคเบิลตั้งแต่ACCESS.busย้อนกลับไปในช่วงทศวรรษ 1990 จนถึงวิธีที่ใช้ในปัจจุบันเพื่อดึงข้อมูลEDIDจากการแสดงวิดีโอ


อีกตัวอย่างหนึ่งคือ Wii Nunchuck ที่เชื่อมต่อกับ Wii Remote ผ่านI²Cโดยใช้สายเคเบิลหุ้มฉนวน 4 ฟุต
tcrosley

4

บางอย่างเช่น P82B96 ของ NXP สามารถนำมาใช้เพื่อเปลี่ยนระดับแรงดันไฟฟ้าบนบัสทำให้ระยะทางไกลขึ้นมาก

แผ่นข้อมูลมีตัวอย่างสำหรับความยาวสายเคเบิล I2C ของ 3M, 25m, 100m และ 250m

มีชิปอื่น ๆ ที่มีฟังก์ชั่นที่คล้ายกัน


ปัญหาของชิป NXP คือคุณต้องใช้สายมากกว่าสองเท่า ความคิดอื่น ๆ ? แบบสองทิศทางที่ฉันพบว่าไม่สูงกว่า + 5V
Matthias Urlichs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.