I2C บัสของ RPi โหลดอุปกรณ์สูงสุด / พัดลมหมด?
ฉันมี RPi4 และฉันใช้บัส I2C กับตัวขยาย MCP23017 gpio 4 ตัวและใช้งานได้ดี ความตั้งใจของฉันคือใช้อุปกรณ์ MCPMCP23017 8 เครื่องเนื่องจากมีการกำหนดแอดเดรสเพียง 3 บิตซึ่งเป็นค่าสูงสุดสำหรับบัส I2C 1 ตัว คำถามของฉันคือบัส I2C ของ RPi มีการโหลดอุปกรณ์สูงสุดหรือไม่?
คำตอบ
คุณไม่เข้าใจI²C - นี่คือบัสระบายน้ำแบบเปิดดังนั้นแนวคิดของ fanout จึงใช้ไม่ได้ การโหลดถูก จำกัด มากขึ้นตามความจุซึ่งจะเกี่ยวข้องกับความยาวบัสและเลย์เอาต์นอกเหนือจากจำนวนอุปกรณ์ คุณสามารถเพิ่มจำนวนอุปกรณ์ได้สูงสุดโดยใช้ค่าพูลอัพหรือบัฟเฟอร์ที่มีค่าต่ำ
ดูการบัฟเฟอร์และมัลติเพล็กซ์ใน https://en.wikipedia.org/wiki/I²C
"ดูเมื่อมีอุปกรณ์ I2C จำนวนมากในระบบอาจจำเป็นต้องรวมบัสบัฟเฟอร์หรือมัลติเพล็กเซอร์เพื่อแยกส่วนบัสขนาดใหญ่ออกเป็นชิ้นเล็ก ๆ ซึ่งอาจจำเป็นเพื่อให้ความจุของส่วนบัสต่ำกว่าค่าที่อนุญาตหรือ อนุญาตให้อุปกรณ์หลายเครื่องที่มีที่อยู่เดียวกันคั่นด้วยมัลติเพล็กเซอร์ "
ด้วยรูปแบบที่เหมาะสมคุณไม่ควรมีปัญหาในการโหลดกับอุปกรณ์ MCPMCP23017 8 เครื่อง
หากคุณกังวลเกี่ยวกับความจุบัสที่สูงเกินไปพัดลมออกที่สูงเกินไป (หากเกี่ยวข้องทั้งหมดในกรณีนี้ ... ) หรือหากคุณต้องการเชื่อมต่อตัวขยาย MCP23017 IO มากกว่า 8 ตัวกับ RPi แสดงว่ามีวิธีง่ายๆ : เชื่อมต่อสวิตช์ I2C เช่น PCA9548 (บัส I2C 8 ตัว) หรือที่คล้ายกันกับพิน I2C ดั้งเดิมของ RPi เนื่องจากเคอร์เนล Linux มีการสนับสนุนโดยปริยายสำหรับสิ่งนี้ตั้งแต่สองสามปีสิ่งเดียวที่คุณต้องทำคือเพิ่มบรรทัดต่อไปนี้ลงในไฟล์/boot/config.txt
(as sudo
):
dtoverlay=i2c-mux,pca9548,addr=0x70
ด้วยวิธีนี้คุณจะมีรถเมล์ I2C เพิ่มอีก 8 คันที่คุณสามารถเชื่อมต่ออุปกรณ์พิเศษของคุณกับ (ใช้i2cdetect -l
เพื่อดูรถประจำทางเสริมและชื่อของพวกมัน) สิ่งเดียวที่คุณต้องทำในโค้ดของคุณคือบอกซอฟต์แวร์ของคุณกับ/dev/i2c-x
อุปกรณ์ที่เชื่อมต่อกับอุปกรณ์ I2C ของคุณ
ข้อดีบางประการ:
- การแพร่กระจายของความจุบัส
- คุณไม่ต้องสนใจเกี่ยวกับคำสั่งการสลับของ I2C MUX โมดูลเคอร์เนลของ Linux กำลังทำสิ่งนี้ให้คุณตาม
/dev/i2c-x
บัส - คุณสามารถเพิ่มอุปกรณ์ MCP23017 ทั้งหมด 64 เครื่องลงใน RPi (ทางอ้อมนั่นคือ) ซึ่งหมายถึง (บ้า) ทั้งหมด 64 x 16 = 1024 IO (คุณต้องการอะไรอีก ... )
- สำคัญ : คุณสามารถทำงานร่วมกับอุปกรณ์จ่ายไฟ "ที่อีกด้านหนึ่ง" ของ I2C MUX ได้ อาจเป็น 3V3 แต่ยังเป็น 1V8 หรือ 5V สะดวกสุด ๆ ! โปรดทราบว่าส่วนหน้าของ I2C MUX ต้องเป็นไปตามแหล่งจ่ายไฟของ RPi (นั่นคือ 3V3) เพื่อหลีกเลี่ยงความเสียหายของหมุดเข้า / ออก
ข้อเสีย:
ใช่มีอย่างใดอย่างหนึ่ง: คุณต้องเพิ่มฮาร์ดแวร์เพิ่มเติม (แม้ว่าจะมี จำกัด ) ในโครงการของคุณ แต่คุณได้รับกลับมามากสำหรับความพยายามพิเศษเล็กน้อยนี้