เป็นไปได้ที่ความถี่ผสม I2C จะเป็นไปได้หรือไม่?


12

สมมติว่าเรามี 400 kHz I 2 C บัส มีเจ้านายคนหนึ่งและอุปกรณ์ทาสมากมาย เราอยากจะแนะนำอุปกรณ์ทาสเพิ่มอีกหนึ่งตัว แต่น่าเสียดายที่มันไปที่ 100 kHz เท่านั้น

เห็นได้ชัดว่าตัวเลือกการออกแบบที่มั่นคงคือ:

  • เพิ่งรันบัสนั้นที่ 100 kHz
  • ใช้รถโดยสารแยกต่างหากสำหรับอุปกรณ์ต่อพ่วง 400 kHz และ 100 kHz

แต่คำถามนั้นเกี่ยวกับการแฮ็ค: ถ้าเราใช้บัสหนึ่งบัสแล้วจัดการกับอุปกรณ์ 400 kHz ที่ 400 kHz และเปลี่ยนบัสเป็น 100 kHz เมื่อพูดกับทาส 100 kHz?

หรือทาสที่ทำงานช้าลงอาจทำงานผิดพลาดในการตอบสนองต่อแฮช 400 kHz ที่เห็นบนสาย I 2 C เพราะมันคิดผิดพลาดว่ามันกำลังแก้ไขอยู่หรือไม่?

เราสามารถพึ่งพาอุปกรณ์ 100 kHz ที่ยังคงสามารถประมวลผลสัญญาณ 400 kHz I 2 C ได้ดีพอที่จะไม่สนใจข้อความที่ส่งไปยังทาสอื่น ๆ หรือไม่?


4
เกี่ยวกับประโยคสุดท้ายของคุณฉันไม่คิดว่าคุณจะขึ้นอยู่กับอุปกรณ์ 100kHz ที่สามารถประมวลผลสัญญาณ 400kHz
gbmhunter

แต่นั่นคือสิ่งที่เราต้องพึ่งพาหากเราใช้การแฮ็คดังกล่าวดังนั้นมันจึงเป็นคำถาม
Kaz

คำตอบ:


7

ตามที่คุณแนะนำการทำเช่นนั้นไม่ใช่การฝึกฝนด้านวิศวกรรมที่ดี ในขณะที่อุปกรณ์บางอย่างอาจเพิกเฉยต่อการรับส่งข้อมูลที่ไม่สามารถรับได้ (ตัวอย่างด้านล่าง) อุปกรณ์อื่น ๆ อาจถ่วงรถด้วยเฟรมที่ผิด

ดังนั้นคำตอบที่คุณต้องการขึ้นอยู่กับข้อมูลเฉพาะของใบสมัครของคุณเช่น:

  • ความยาวของการเชื่อมต่อ I2C ของคุณ
  • ค่าตัวต้านทานแบบดึงขึ้น
  • ความเข้ากันได้ของอุปกรณ์

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

อีกตัวเลือกหนึ่งคือเรียกใช้สายการปิดเพื่อทำให้อุปกรณ์ช้าหรือผ่านสายนาฬิกา (หากไม่สามารถสร้างสัญญาณนาฬิกา) ผ่านทางประตู AND


10

อีกตัวเลือกหนึ่งถ้าคุณไม่ได้มีรถบัส I2C เพิ่มเติมออกมาของเจ้านายของคุณคือการใช้สวิทช์ I2C เช่นPCA9543A / 43B ใส่ทาส 400kHz ในสาขาหนึ่งและทาส 100kHz ที่อื่น ๆ และสลับได้ตามความจำเป็น


หากคุณดูสิ่งที่ฟิลิปส์ (ผู้ริเริ่ม) กล่าวไว้นั่นเป็นสิ่งที่เกิดขึ้นจริง ไม่สามารถใช้งานร่วมกันได้และสวิตช์รถบัสเป็นวิธีการรักษาที่แนะนำ (อยู่ในบันทึกย่อของแอป)
gbarry

6

ไม่มีการรับประกันว่าอุปกรณ์ 100kHz จะไม่ทำงานผิดปกติเมื่อสัมผัสกับการรับส่งข้อมูล 400kHz - ไม่ว่าจะมีสิ่งใดก็ตามจาก NACK ไปจนถึงบัสแฮงก์

คุณควรรันบัสทั้งหมดด้วยความเร็ว 100kHz หรือมีบัสความเร็วต่ำแยกต่างหากสำหรับอุปกรณ์ต่อพ่วงที่ช้า


3

ตัวเลือกอื่น. แทนที่จะมีสองบัสคุณสามารถใช้หนึ่งบรรทัดพิเศษ (ง่ายกว่าด้วยซอฟต์แวร์ / bitbanged I 2 C) สายนาฬิกาแยกต่างหากหรือสายข้อมูลแยกต่างหาก หรือใช้บัฟเฟอร์I 2 C หรือ I 2สวิทช์ C เพื่อใส่ชิป 100MHz เดียวบนมันเป็นส่วนของตัวเองโดยไม่ต้องเปลี่ยนแปลงอะไรอื่น

หรือแค่ทดสอบบนรถบัสเดียว เป็นไปได้ทีเดียวที่ชิป 100kHz จะส่งผลกระทบต่อสาย มันสามารถอ่านได้ทุก ๆ บิตที่ 4 และจบลงด้วยการคิดว่ามันได้รับการแก้ไขแล้ว แต่มันจะต้องเห็นเงื่อนไขการเริ่มต้นที่ถูกต้องแล้วอ่านทุก ๆ 4 บิตจาก 32 บิตถัดไปเพราะมันเป็นที่อยู่ที่แน่นอนจากนั้นก็จะต้องพยายามอ่านสองสามไบต์ต่อไปเป็นข้อมูลที่ถูกต้องในการเขียนลงทะเบียน หรือพยายามโอเวอร์คล็อกข้อมูล ฉันไม่คิดว่ามันน่าจะเป็นสถานการณ์ ทางออกที่ดีที่สุดคือการวางสายในวงจรทดสอบและตรวจสอบ

สองสิ่งที่ควรทราบหากนี่เป็นวงจรเดียวหรือคุณสร้างเพียงไม่กี่อย่างง่ายพอที่จะเสี่ยงหรือเปลี่ยนแปลงได้ ถ้ามันเป็นรายการที่ผลิตโดยรวมคุณอาจแค่อยากได้รถบัสคันที่สอง อีกอย่างคือคุณต้องพิจารณาว่าชิป 100kHz นั้นถูกผลิตขึ้นเพื่อสเป็คI 2 C ดั้งเดิมและอาจรองรับความเร็วสัญญาณนาฬิกาที่สูงขึ้นได้เป็นอย่างดี ไม่ได้ทดสอบกับสเป็คความเร็วสูงกว่า 400kHz


2

การออกแบบบัส I2C เป็นเช่นนั้น -

  1. เมื่อขอบที่ตกลงมาเกิดขึ้นกับ SCL ที่อาจทำให้อุปกรณ์ทาสยืนยัน SDA ได้ทันทีโดยไม่ล่าช้าน้อยที่สุด
  2. การเรียงลำดับของขอบที่เพิ่มขึ้นและลดลงนั้นมีความสำคัญอย่างยิ่งยวด

เนื่องจากความแตกต่างของความแข็งแรงของตัวขับและความจุของสายจึงเป็นไปได้ในทางทฤษฎีว่าอุปกรณ์หนึ่งอาจตอบสนองต่อขอบตกที่ค่อนข้างช้าบน SCL โดยการขับ SDA เร็วจนอุปกรณ์อื่นจะเห็น SDA ตกก่อน

อาจเป็นไปได้ที่จะกำหนดเกณฑ์ตรรกะหลายรายการบน SCL และระบุว่าสำหรับขอบที่ตกลงมาบน SCL จะถูกพิจารณาว่ามาหลังจาก edge บน SDA จะต้องยังคงสูงกว่า 2/3 VDD เมื่อตรวจพบ edge บน SDA แต่อุปกรณ์ไม่สามารถยืนยัน SDA เพื่อตอบสนองการลดลงของ SCL ได้จนกว่าจะลดลงต่ำกว่า 1/3 VDD แต่ข้อมูลจำเพาะไม่ได้เขียนไว้ในข้อกำหนดดังกล่าว

แต่อุปกรณ์ที่เห็นขอบลดลงใกล้เคียงกันใน SDA และ SCL โดยทั่วไปจะคำนึงถึงขอบของ SCL ว่าเกิดขึ้นก่อนเว้นแต่ว่าจะมีการนำหน้าอย่างมีนัยสำคัญโดย SDA การใช้งาน I2C บางตัวจัดการเรื่องนี้โดยการซิงโครไนซ์ SCL และ SDA กับนาฬิกาภายนอกบางส่วนและกำหนดให้ขอบ SDA ที่ลดลงนั้นถูกสังเกตสองช่วงก่อนหน้า SCL เพื่อที่จะถูกพิจารณาว่ามาก่อน หากความเร็วของการทำงานใน SCL และ SDA นั้นเร็วเกินไปเมื่อเทียบกับนาฬิกาซิงโครไนซ์อุปกรณ์อาจรับรู้ลำดับสัญญาณที่สูงและต่ำของ SCL และ SDA ตามลำดับ หากหนึ่งในลำดับเหล่านั้นดูเหมือนว่ามันคือการจัดการกับอุปกรณ์ที่ช้ามันอาจตอบสนองตามนั้นบีบการสื่อสารอื่น ๆ ที่อาจเกิดขึ้น

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

สิ่งนี้จะทำให้การสื่อสารบางอย่างเกิดขึ้นช้ากว่าที่พวกเขาอาจจะทำได้ แต่ความเสื่อมโทรมของความเร็วมีแนวโน้มว่าจะไม่เลวร้ายเท่าที่ควรกับการออกแบบนาฬิกาแบบซิงโครไนซ์ (จำนวนจริงที่อุปกรณ์ช้า จะแย่มากตามจำนวนที่นาฬิกาจะต้องชะลอตัวลงเพื่อหลีกเลี่ยงความล้มเหลวของสถานการณ์กรณีที่เลวร้ายที่สุดในหน่วยนาฬิกาที่ซิงโครไนซ์)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.