โปรโตคอลI²Cอนุญาตให้ใช้ในทางทฤษฎีและด้วยการกำหนดแอดเดรส 7 บิตสูงสุด 127 อุปกรณ์ที่จะเชื่อมต่อกับต้นแบบ นี่เป็นจำนวนมากดังนั้นทำไมไมโครคอนโทรลเลอร์ที่มีต้นทุนต่ำ (เช่นPIC24 นี้ ) จึงมีพอร์ตI²Cมากกว่าหนึ่งพอร์ต ทำไมถึงจำเป็น?
โปรโตคอลI²Cอนุญาตให้ใช้ในทางทฤษฎีและด้วยการกำหนดแอดเดรส 7 บิตสูงสุด 127 อุปกรณ์ที่จะเชื่อมต่อกับต้นแบบ นี่เป็นจำนวนมากดังนั้นทำไมไมโครคอนโทรลเลอร์ที่มีต้นทุนต่ำ (เช่นPIC24 นี้ ) จึงมีพอร์ตI²Cมากกว่าหนึ่งพอร์ต ทำไมถึงจำเป็น?
คำตอบ:
การจัดฮับของเซ็นเซอร์
ในสถานการณ์นี้มีรถบัสI²Cสองคัน ขอเรียกว่ารถบัสท้องถิ่นและขนส่งหลัก จุดประสงค์ของบัสท้องถิ่นคือเพื่อเชื่อมต่อเซนเซอร์จำนวนมากเข้ากับไมโครคอนโทรลเลอร์ (μC) วัตถุประสงค์ของμCคือการสำรวจเซ็นเซอร์รวมข้อมูลจากพวกเขาและตรวจจับเหตุการณ์บางอย่าง μCในบทบาทดังกล่าวเรียกว่าฮับเซ็นเซอร์ ฮับเซ็นเซอร์ไม่รับผิดชอบสำหรับฟังก์ชันการสั่งซื้อที่สูงขึ้น มีโปรเซสเซอร์หลักอันทรงพลังสำหรับสิ่งนั้น บัสหลักเชื่อมต่อฮับเซ็นเซอร์กับโปรเซสเซอร์หลัก ดังนั้นฮับเซ็นเซอร์μCจึงเป็นหลักบนรถบัสI²Cท้องถิ่นและทาสบนรถบัสหลักI²C
SPI และI²C
PIC ที่ลิงก์ในโพสต์ดั้งเดิมไม่ได้แชร์พินระหว่าง SPI และI²C อย่างไรก็ตามมี PIC อื่น ๆ ที่ใช้พินเดียวกันสำหรับฮาร์ดแวร์ SPI และI²Cเพราะทั้งคู่ถูกนำไปใช้กับอุปกรณ์ต่อพ่วง MSSP เดียวกัน หาก PIC มีอุปกรณ์ต่อพ่วง MSSP สองชุดแยกจากกันจะสามารถใช้หนึ่งอุปกรณ์สำหรับฮาร์ดแวร์ SPI ในขณะที่อีกอุปกรณ์หนึ่งใช้สำหรับฮาร์ดแวร์I²C
เหตุผลทั่วไปที่ต้องการมากกว่าหนึ่งบัสคือการมีอุปกรณ์ที่ทำงานด้วยความเร็วที่แตกต่างกัน เดิมทีI²Cทำงานที่ความเร็วสูงสุด 100 kHz ต่อมาความเร็วเพิ่มขึ้นสูงสุด 400 kHz และต่อมาเป็น 1 MHz และสูงกว่า
gotcha คือเนื่องจากที่อยู่ของอุปกรณ์แต่ละตัวถูกฝังอยู่ในโปรโตคอลI²Cดังนั้นหากคุณมีอุปกรณ์ที่มีอัตราความเร็วแตกต่างกันบนรถบัสเดียวกันพูด 100 kHz และ 400 kHz คุณจะต้องวิ่งด้วยความเร็วต่ำที่สุด ไปยังอุปกรณ์ทั้งหมดบนบัสเดียวกัน (100 kHz ในกรณีนี้)
หากคุณขับรถด้วยความเร็วสูงกว่า (400 kHz) เห็นได้ชัดว่าอุปกรณ์ความเร็วต่ำจะทำงานไม่ถูกต้องและอาจแปลที่อยู่ของอุปกรณ์ความเร็วสูงเป็นของตัวเองทำให้อุปกรณ์ 400 kHz ล้มเหลวเช่น ดี. แต่แม้ว่าคุณจะเริ่มต้นบัสด้วยความเร็ว 100 kHz แล้วลองเพิ่มความเร็วบัสเป็น 400 kHz หลังจากระบุชิพความเร็วสูงมันอาจเป็นไปได้ (แม้ว่าอาจไม่น่าเป็นไปได้) สำหรับชิปความเร็วต่ำที่จะตีความหนึ่ง แพ็คเก็ตข้อมูลความเร็วสูงไม่ถูกต้องตามที่อยู่ของมันและทำให้การสื่อสารบนบัสยุ่งเหยิง ไม่ว่าในกรณีใดเมื่อสิ้นสุดการแลกเปลี่ยนด้วยอุปกรณ์ 400 kHz อุปกรณ์ 100 kHz อาจอยู่ในสถานะที่ไม่รู้จัก
ดังนั้นจึงมีประสิทธิภาพมากที่สุดถ้าคุณมีอุปกรณ์ที่ทำงานด้วยความเร็วที่แตกต่างกันและคุณมีพอร์ตI²Cหลายแห่งและคุณมีพินสำรองเพื่อให้ความหรูหราดังกล่าวให้มีI²Cหนึ่งตัวสำหรับอุปกรณ์ 100 kHz และอีกอุปกรณ์ 400 kHz และอื่น ๆ สำหรับอุปกรณ์ 1 MHz ตามความต้องการของคุณอาจกำหนด
นี่ไม่ใช่ปัญหาของ SPI เนื่องจากอุปกรณ์แต่ละตัวเปิดใช้งาน (ระบุไว้) ในฮาร์ดแวร์โดยสายเลือกแยกชิป ดังนั้นความเร็วสัญญาณนาฬิกาสามารถจับคู่กับความเร็วของชิปที่เลือก (10 MHz, 20 MHz, อะไรก็ได้) โดยไม่ส่งผลกระทบต่อชิปอื่น ๆ บนรถบัสเดียวกันเนื่องจากไม่ได้เปิดใช้งาน
นอกจากนี้ยังช่วยให้คุณรองรับอุปกรณ์สองเครื่องที่มีที่อยู่เดียวกัน ใช่อุปกรณ์ส่วนใหญ่ให้คุณเลือกที่อยู่สองบิตด้านล่างด้วยสายรัด เมื่อเร็ว ๆ นี้ฉันต้องสนับสนุนอุปกรณ์ 4 ตัวที่แต่ละตัวอนุญาตให้คุณตั้งค่า LSB ของที่อยู่ด้วยตัวต้านทาน มีสองพอร์ตหมายความว่าไม่มีค่าใช้จ่ายเพิ่มเติมสำหรับฉัน
บางทีฉันต้องการที่จะเป็นหลักสำหรับอุปกรณ์จำนวนมากและนำเสนออื่น ๆ เป็นพอร์ตทาสดังนั้นเจ้านายของฉันไม่ต้องรอที่จะคว้ารถบัสเพื่อให้คำสั่งในขณะที่ฉันสำรวจเซ็นเซอร์อุณหภูมิสำหรับวันที่ 10,000 เวลา.
ดูเหมือนจะมีคำตอบที่ดีอื่น ๆ ในชุดข้อความนี้เพียงเพิ่ม 2 เซนต์ของฉัน
ความเร็ว.
หากคุณจำเป็นต้องเข้าถึงอุปกรณ์ I2C สองเครื่องในเวลาเดียวกันคุณอาจมีข้อขัดแย้งที่สำคัญ หรืออย่างใดอย่างหนึ่งจะต้องรอคนอื่น
ประการที่สองสามารถใช้I²Cเพื่อรับแบนด์วิดธ์เพิ่มขึ้น (คุณสามารถรับหรือส่งสองไบต์ในเวลาเดียวกัน)
หากคุณมี ADC บางตัวที่ทำงานอย่างต่อเนื่องI²Cอันใดอันหนึ่งจะยุ่งตลอดเวลา
การสลับที่อยู่ก็ใช้เวลาเช่นกันในบางกรณีคุณสามารถใช้สองพอร์ตสำหรับอุปกรณ์สองเครื่องและหลีกเลี่ยงการเปลี่ยนแปลงที่อยู่เพื่อประหยัดเวลา
คนอื่นพูดถึงหลาย ๆ เหตุผลในการทำเช่นนี้ฉันจะเพิ่ม:
คุณได้รับอุปกรณ์ 5V I2C จำนวนมากและอุปกรณ์ 3V3 I2C จำนวนมาก
ตัวอย่างเช่นฉันมีไมโคร 3.3V ซึ่งมีพอร์ต I2C สองพอร์ตหนึ่งตัวต้านทาน 5V และอีก 3V3 เท่านั้น