การเขียนโค้ด EEPROM ใหม่: รหัสผ่านและกลไก
ข้อสรุปสำคัญจากการถกกันทางวิศวกรรมมาหลายปีคือ ความเข้ากันได้ของทรานซีฟเวอร์ไม่ใช่เรื่องเฟิร์มแวร์ แต่เป็นสตริงระบุตัวตนใน EEPROM ที่อ่านผ่าน I²C สวิตช์ปฏิเสธโมดูลเพียงเพราะจำสตริงของผู้ผลิตไม่ได้เท่านั้น ข้อเท็จจริงข้อเดียวนี้อธิบายแนวทางปฏิบัติทั่วไปที่ว่า “เขียนโค้ดทุกอย่างให้เป็น Cisco ก็ใช้ได้แทบทุกที่” และอธิบายตลาดเครื่องมือเขียนโค้ดทั้งตลาด
รหัสผ่านอยู่ที่ไหน
การเขียนลงพื้นที่ที่มีการป้องกันของหน่วยความจำโมดูลต้องป้อนรหัสผ่านขนาด 4 ไบต์ที่แอดเดรสคงที่ก่อนเขียน:
| ชนิดโมดูล | บล็อกหน่วยความจำ | ออฟเซตรหัสผ่าน |
|---|---|---|
| SFP / SFP+ | A2h (แอดเดรส I²C 0x51) | 0x7B–0x7E |
| QSFP / XFP | A0h | 0x7B |
รหัสผ่านที่มักถูกอ้างถึง
| รหัสผ่าน | หมายเหตุ |
|---|---|
00 00 10 11 | ค่าเริ่มต้นของ MSA — สิ่งแรกที่ควรลอง |
00 00 00 00, FF FF FF FF | ค่าเริ่มต้นที่พบบ่อย |
9B B0 3D FA | พบในโมดูลจำนวนหนึ่ง |
4F 43 50 00 | ASCII “OCP” |
โมดูล QSFP-DD ของบางผู้ผลิตมาพร้อมค่าเริ่มต้นตายตัวของตัวเอง และโมดูลที่ใช้ไมโครโปรเซสเซอร์บางตัวใช้รหัสผ่านแบบแปรผันที่เปลี่ยนไปเรื่อย ๆ ซึ่งเป็นกับดักสำหรับใครก็ตามที่พยายามไล่สุ่ม
เหตุใดการไล่สุ่มจึงไม่ใช่คำตอบ
รหัสผ่านระดับผู้ผลิตที่ปกป้องแผนผังหน่วยความจำทั้งหมด ใช้เวลาไล่สุ่มในระดับมากกว่า 100 วัน แม้แต่รหัสผ่านแบบ ASCII ระดับโฮสต์ก็ยังใช้เวลาสูงสุดประมาณสามวัน แนวทางที่ใช้ได้จริงคือฐานข้อมูลของรหัสและรหัสผ่านที่ทราบแล้วซึ่งเก็บมาจากโมดูลต้นฉบับ — ตรงนี้เองคือคุณค่าที่แท้จริงของเครื่องมือเขียนโค้ด ไม่ใช่ที่ฮาร์ดแวร์ I²C (ซึ่งเป็นเรื่องง่าย)
กับดักของเครื่องโปรแกรมแบบทำเอง
- เครื่องโปรแกรม CH341A ราคาถูกไม่คำนวณเช็กซัมของ SFP การเขียนอิมเมจโดยไม่มี CC_BASE/CC_EXT ที่ถูกต้องจะได้โมดูลที่สวิตช์ปฏิเสธ คุณต้องใช้เครื่องมือที่คำนวณเช็กซัมใหม่ให้อัตโนมัติ
- สวิตช์บางรุ่นเขียนได้เฉพาะที่แอดเดรส 0x50 ทำให้เข้าถึงรหัสผ่านที่ 0x51 จากตัวสวิตช์เองไม่ได้ — จำเป็นต้องมีบอร์ดโปรแกรมที่เหมาะสม
- พินป้องกันการเขียนของ EEPROM — โรงงานบางแห่งต่อ WP เข้ากับ Vcc ทำให้โมดูลถูกล็อกไม่ให้เขียนได้ในสนาม
กรณีศึกษาจากภาคสนาม
- โมดูลที่เขียนโค้ดเป็นผู้ผลิตรายหนึ่งไม่ยอมเจรจาอัตโนมัติบนสวิตช์ของอีกรายหนึ่ง เมื่อเขียนโค้ดใหม่ให้เป็นสตริงผู้ผลิตของสวิตช์เอง ลิงก์ก็ขึ้นทันที
- ผู้ผลิตออปติกส์บางรายจงใจส่งมอบโมดูลที่ยังไม่ได้เขียนโค้ด โดยคาดหวังให้ผู้ซื้อเขียนโค้ดเองสำหรับแพลตฟอร์มเป้าหมาย
- โมดูล DWDM ถูกปรับความยาวคลื่นผ่านอินเทอร์เฟซการจัดการเดียวกันกับที่ใช้เขียนโค้ด
ขั้นตอนใน CodingBox
- อ่านโมดูล ระบบจะบันทึกลงcode databaseให้อัตโนมัติ และสำรองข้อมูลไว้ก่อนการเขียนทุกครั้ง
- ตั้งค่าแอดเดรสตาราง, แอดเดรสรหัสผ่าน และค่ารหัสผ่านในหน่วยความจำที่มีการป้องกันและรหัสผ่าน — รหัสผ่านที่ทราบแล้วจากฐานข้อมูลจะถูกนำมาใช้ให้อัตโนมัติ
- แก้ไขผู้ผลิต, หมายเลขชิ้นส่วน และฟิลด์ข้อมูลระบุตัวตนอื่น ๆ ใน EEPROM editor ระบบจะคำนวณ CC_BASE และ CC_EXT ใหม่ให้
- เขียนเพจที่เลือกไว้ จากนั้นอ่านย้อนกลับมาเพื่อยืนยัน ตรวจสอบโมดูลบนสวิตช์ด้วยคำสั่งในการตรวจสอบยืนยันออปติก
เขียนโค้ดโมดูลเฉพาะเพื่อความเข้ากันได้ที่คุณมีสิทธิ์เท่านั้น และปฏิบัติตามนโยบายขององค์กรและของผู้ผลิต
กฎเบื้องหลังการเขียนโค้ดใหม่ให้สะอาด — รูปแบบฟิลด์ บิตใดที่ต้องตั้ง และผลรวมใดที่ต้องแก้ไข — อยู่ในฟิลด์ข้อมูลผู้ผลิต, รหัสความสอดคล้อง และเช็กซัม
สิ่งที่โรงงานทำในขั้นตอนเดียวกันนี้ และพื้นที่ใดเก็บข้อมูลการสอบเทียบที่การเขียนอย่างไม่ระมัดระวังอาจทำลายได้: การผลิตและการทดสอบ, คอนโทรลเลอร์และเฟิร์มแวร์
ไบต์ใดเก็บอะไรไว้ก่อนที่คุณจะแก้ไข: แผนผัง A0h ของ SFF-8472, เพจบนของ SFF-8636, เพจบนของ CMIS, XFP
หมายเลขชิ้นส่วนเป้าหมายและไวยากรณ์ของแต่ละผู้ผลิต: การกำหนดหมายเลขชิ้นส่วน สิ่งที่แพลตฟอร์มแต่ละคลาสตรวจสอบหลังการเขียน: วิธีที่ NOS แต่ละแบบตรวจสอบโมดูล