อินเทอร์เฟซสองสาย: แอดเดรส เพจ แบงก์ และจังหวะเวลา · ข้อกำหนดและมาตรฐาน · ทรานซีฟเวอร์ออปติคัลและสายเคเบิล · เอกสารประกอบ · CodingBox
CodingBox เอกสารประกอบ

อินเทอร์เฟซสองสาย: แอดเดรส เพจ แบงก์ และจังหวะเวลา

โมดูลถอดเสียบทุกตัวถูกจัดการผ่านสายสองเส้นแบบเดียวกัน — สายสัญญาณนาฬิกาแบบอนุกรมและสายข้อมูลแบบอนุกรม — โดยใช้โพรโทคอล I²C ซึ่งสเปกเรียกว่า อินเทอร์เฟซสองสาย (TWI) สิ่งที่ต่างกันระหว่างโมดูล SFP, QSFP, XFP และ CMIS คือวิธีจัดระเบียบพื้นที่แอดเดรสบนโพรโทคอลนี้: อุปกรณ์แยกกัน, หน่วยความจำแบบแบ่งเพจ, หรือแบงก์ของเพจ เนื้อหานี้คือมุมมองระดับโพรโทคอลที่เครื่องโปรแกรม โฮสต์ และ CodingBox ต่างก็พึ่งพา

ชั้นกายภาพ

  • สายแบบโอเพนเดรนสองเส้น คือ SCL และ SDA ถูกพูลอัพที่ฝั่งโฮสต์; ลอจิก 3.3 V
  • โมดูลเป็นลูกข่ายเสมอ; โฮสต์ (หรือเครื่องโปรแกรม) เป็นมาสเตอร์และสร้างสัญญาณนาฬิกา
  • โมดูลอาจยืดสัญญาณนาฬิกา (กด SCL ให้ต่ำค้างไว้) ระหว่างที่ไมโครคอนโทรลเลอร์กำลังดึงข้อมูล — สเปกอนุญาตให้นานได้ถึง 500 µs
  • การตรวจจับการเสียบและการเลือกใช้ขาแยกต่างหาก ไม่ใช่ธุรกรรมบนบัส: MOD_ABS (SFP), ModPrsL และ ModSelL (กลุ่ม QSFP และ CMIS) ModSelL ทำให้โมดูลหลายตัวใช้บัสเดียวกันร่วมกันได้; SFP ไม่มีขาเลือก ดังนั้นโฮสต์จึงให้แต่ละเคจมีบัสของตัวเองหรือใช้มัลติเพล็กเซอร์

พื้นที่แอดเดรสตามสเปก

ตระกูลแอดเดรสอุปกรณ์ (เขียน 8 บิต / 7 บิต)การจัดระเบียบการเลือกเพจ
SFP, SFP+, SFP28 (SFF-8472)A0h / 50h ข้อมูลระบุตัวตน, A2h / 51h การวินิจฉัยA0h: 256 ไบต์แบบแฟลต; A2h: 128 ไบต์แบบแฟลต + ครึ่งบนแบบแบ่งเพจซึ่งไม่บังคับไบต์ 127 ของ A2h ถ้าบิต 4 ของไบต์ 64 ของ A0h ถูกตั้งค่า
XFP (INF-8077i)A0h128 ไบต์แบบแฟลต + “ตาราง” ส่วนบนแบบแบ่งเพจไบต์ 127
QSFP+, QSFP28 (SFF-8636)A0h128 ไบต์แบบแฟลต + 128 ไบต์ส่วนบนแบบแบ่งเพจไบต์ 127
QSFP-DD, OSFP, SFP-DD… (CMIS)A0h128 ไบต์แบบแฟลต + แบงก์ × เพจของ 128 ไบต์ส่วนบนไบต์ 126 เลือกแบงก์, ไบต์ 127 เลือกเพจ

ดังนั้น SFP จึงต้องใช้แอดเดรสอุปกรณ์ สอง แอดเดรสและไม่ต้องแบ่งเพจสำหรับการทำงานพื้นฐาน; ทุกอย่างหลังจาก XFP ใช้แอดเดรส เดียว และแบ่งเพจ SFP รุ่นเก่าบางตัวตั้งบิต 2 ของไบต์ 92 ใน A0h (“address change required”) และต้องมีลำดับคำสั่งเฉพาะของผู้ผลิตก่อนที่ A2h จะตอบสนอง

ธุรกรรม

การดำเนินการลำดับหมายเหตุ
การอ่านแบบสุ่มSTART · แอดเดรสอุปกรณ์+W · ออฟเซตไบต์ · START · แอดเดรสอุปกรณ์+R · ข้อมูล… · STOPการอ่านที่ใช้งานทั่วไป; ออฟเซตเพิ่มขึ้นเองอัตโนมัติ
การอ่านต่อเนื่องคลิกสัญญาณนาฬิกาต่อไปหลังไบต์แรกวนกลับที่ 255 → 0 ภายในมุมมองอุปกรณ์/เพจปัจจุบัน
การอ่านจากแอดเดรสปัจจุบันSTART · แอดเดรสอุปกรณ์+R · ข้อมูลต่อจากออฟเซตล่าสุด — เปราะบางหากมีมาสเตอร์ตัวอื่นแทรกเข้ามา
การเขียนทีละไบต์START · addr+W · ออฟเซต · ข้อมูล · STOPจากนั้นรอ t_WR
การเขียนทีละเพจSTART · addr+W · ออฟเซต · ข้อมูล × n · STOPจำกัดโดยตัวอุปกรณ์หน่วยความจำ (โดยทั่วไป 4–16 ไบต์) และต้องไม่ข้ามขอบเขตเพจภายในของมัน
การโพล ACKส่ง START + addr+W ซ้ำจนกว่าโมดูลจะ ACKวิธีที่เร็วที่สุดในการรู้ว่ารอบการเขียนเสร็จสิ้นแล้ว

การอ่านเพจบนเป็นสองธุรกรรมเสมอ: เขียนไบต์เลือกเพจ (127 และ 126 สำหรับแบงก์ของ CMIS) แล้วจึงอ่าน 128–255 การเลือกนี้จะค้างอยู่จนกว่าจะถูกเปลี่ยน ซึ่งเป็นเหตุผลที่การเลือกเพจค้างจากของเก่าเป็นสาเหตุคลาสสิกของการอ่านได้ “wrong content”

ความเร็ว

สเปกสัญญาณนาฬิกา
SFF-8472 (SFP)พื้นฐาน 100 kHz; บางโมดูลรองรับ 400 kHz ได้
INF-8077i (XFP)100 kHz
SFF-8636 รุ่น 2.x (QSFP)สูงสุด 400 kHz
สเปกฮาร์ดแวร์ CMIS / QSFP-DD / OSFPสูงสุด 400 kHz

ช้ากว่านี้ทำได้เสมอ สำหรับการเขียน เครื่องโปรแกรมส่วนใหญ่จะลดสัญญาณนาฬิกาลงต่ำกว่าค่าตามพิกัดมาก — ลงมาอยู่ในระดับกิโลเฮิรตซ์ต่ำ ๆ — เพราะรอบการเขียน EEPROM และโมดูลที่มีไมโครคอนโทรลเลอร์คั่นกลางไวต่อจังหวะเวลากว่าการอ่านมาก

จังหวะเวลาที่สำคัญ

พารามิเตอร์ขีดจำกัดทั่วไปความหมาย
t_init (SFP)300 msนับจากเปิดไฟ / ยกเลิก TX_DISABLE จนโมดูลทำงานได้เต็มที่และบัสตอบสนอง
t_init (QSFP)2 sจนการเริ่มต้นทำงานเสร็จสมบูรณ์และ Data_Not_Ready ถูกล้าง
MgmtInit (CMIS)≤ 2 s ตามสเปกฮาร์ดแวร์จนโมดูลออกจาก MgmtInit และข้อมูลระบุตัวตนใช้ได้
t_WR40 msรอบการเขียนสูงสุดสำหรับการเขียนทีละไบต์หรือต่อเนื่อง; โพล ACK หรือรอ
t_clock_hold500 µsการยืดสัญญาณนาฬิกาสูงสุดโดยโมดูล
ton_IntL200 msนับจากเหตุการณ์แฟล็กจนถึง IntL ทำงาน
ข้อมูลพร้อมไบต์ 110 บิต 0 (SFP), ไบต์ 2 บิต 0 (QSFP)อย่าเชื่อค่าที่ตรวจวัดขณะที่บิตนี้ถูกตั้งค่าอยู่

ปัญหาที่พบบ่อยและวิธีแก้

อาการสาเหตุเชิงโพรโทคอลวิธีแก้
ทั้งหมดเป็น FFhไม่มี ACK — แอดเดรสอุปกรณ์ผิด, ไม่รองรับเพจนั้น, ไม่มีโมดูลเสียบอยู่ตรวจสอบ A0h เทียบกับ A2h, บิตเพจ, การเสียบ
เนื้อหาผิดการเลือกเพจ/แบงก์ค้างจากของเก่าเขียน 127 (และ 126) ก่อนเข้าถึงเพจบนทุกครั้ง
ไบต์เสียหายสัญญาณนาฬิกาเร็วเกินไป, สายยาวเกินไป, ชนกับโฮสต์ที่กำลังโพล DDMลดความเร็วลง, ใช้สายสั้นลง, อ่านบนโต๊ะทดสอบแทนที่จะอ่านในสวิตช์ที่ใช้งานจริง
การเขียน “สำเร็จ” แต่อ่านกลับมาได้ค่าเก่าเขียนเร็วเกินไป, ไม่สนใจ t_WR, ข้ามขอบเขตการเขียนเพจเขียนทีละไบต์หรือทีละก้อนเล็ก ๆ พร้อมรอ; โพล ACK
บัสค้าง, SCL หรือ SDA ค้างที่ระดับต่ำธุรกรรมถูกขัดจังหวะคลิกพัลส์ SCL ออกมาเก้าพัลส์ แล้วตามด้วย STOP; ปิดเปิดไฟโมดูลใหม่
ทำงานได้ในสวิตช์ แต่ไม่ตอบสนองบนเครื่องโปรแกรมโมดูลรอให้ปลด LPMode หรือรอขาเลือกจัดการ ModSelL/LPMode ให้ถูกต้อง; เผื่อเวลา t_init

การวินิจฉัยฝั่งโต๊ะทดสอบสำหรับปัญหาเหล่านี้รวบรวมไว้ใน ข้อผิดพลาดในการอ่านและเขียน EEPROM; ส่วนกลไกป้องกันที่ทำงานอยู่เหนือบัส (รหัสผ่าน, WP ฮาร์ดแวร์, คำสั่งบันทึก) อยู่ใน ชนิดของการป้องกันการเขียน

การอ่านในระบบที่ใช้งานจริง

โฮสต์จะโพล DDM ทุกไม่กี่วินาทีและตอบสนองต่อแฟล็ก; มาสเตอร์ตัวที่สองบนบัสเดียวกัน (คลิปของเครื่องโปรแกรม, เครื่องมือแบบอินแบนด์) ก่อให้เกิดการชนกัน, การเขียนผิดแอดเดรส และเลวร้ายที่สุดคือโมดูลถูกทำให้ใช้งานไม่ได้จากการเขียนเพจที่ตกลงบนออฟเซตผิด อ่านในที่ติดตั้งได้หากจำเป็น; แต่ให้เขียนบนโต๊ะทดสอบ

ใน CodingBox

CodingBox จัดการโมเดลแอดเดรสตามฟอร์มแฟกเตอร์ให้โดยอัตโนมัติ — A0h/A2h สำหรับ SFP, การแบ่งเพจสำหรับ QSFP และ XFP, แบงก์ + เพจสำหรับ CMIS — ให้คุณตั้งความเร็วบัสและจังหวะเวลาการเขียนต่อโปรไฟล์เครื่องโปรแกรมได้ และตรวจสอบการเขียนแต่ละครั้งด้วยการอ่านย้อนกลับมาเทียบ (การเขียนโมดูล)


หากพบข้อมูลที่ไม่ถูกต้องหรือข้อผิดพลาดในบทความนี้ ให้เลือกข้อความส่วนนั้นแล้วกด Ctrl+Enter เพื่อ