ตัวควบคุมและเฟิร์มแวร์: DDM, APC, หน่วยความจำ และการป้องกัน
ทรานซีฟเวอร์แบบมีการจัดการทุกตัวมีคอมพิวเตอร์ขนาดเล็กอยู่ภายใน ไมโครคอนโทรลเลอร์ (MCU) วัดค่า ควบคุม รายงานผล และ — จากมุมมองของผู้เขียนโค้ดถือเป็นเรื่องสำคัญที่สุด — คือหน่วยความจำที่คุณอ่านและเขียนนั่นเอง โมดูลมี EEPROM ธรรมดาหรือมี MCU ที่ทำตัวเป็น EEPROM เป็นตัวกำหนดว่าจะเขียนโค้ดมันได้อย่างไร ทำไมการเขียนบางครั้งจึงหายไปหลังตัดไฟแล้วจ่ายไฟใหม่ และทำไมจึงต้องมีรหัสผ่านอยู่ด้วย หน้านี้อธิบายว่าตัวควบคุมทำอะไรบ้าง และดีไซน์ของมันปรากฏให้เห็นอย่างไรบนโต๊ะทดสอบ
MCU ทำอะไรบ้าง
| งาน | รายละเอียด | ปรากฏเป็น |
|---|---|---|
| การวัดค่า | สุ่มตัวอย่างอุณหภูมิ (เทอร์มิสเตอร์หรือเซนเซอร์บนชิป), Vcc, ไบอัสเลเซอร์, กระแส monitor-PD (Tx) และกระแสโฟโตของตัวรับ (Rx) ผ่าน ADC 10–12 บิตหลายครั้งต่อวินาที แล้วใช้การสอบเทียบจากโรงงาน | ค่าต่าง ๆ ใน DDM — พารามิเตอร์ |
| APC — การควบคุมกำลังอัตโนมัติ | เทียบกระแส monitor-PD กับเป้าหมายจากโรงงาน แล้วปรับ DAC ไบอัสของไดรเวอร์ | กำลัง Tx คงที่ ไบอัสค่อย ๆ สูงขึ้น — ไบอัส Tx และการเสื่อมสภาพ |
| การชดเชยอุณหภูมิ | ตารางค้นค่าปรับกระแสมอดูเลชัน และในโมดูล PAM4 ปรับการตั้งค่า DSP ตลอดช่วงอุณหภูมิ | อัตราส่วนการดับแสงคงที่ |
| การควบคุม TEC | ลูป PID รักษาอุณหภูมิเลเซอร์ในโมดูลที่มีความเย็น; ป้อนกลับจากตัวล็อกความยาวคลื่นในโมดูล DWDM | ตัวตรวจติดตามอุณหภูมิเลเซอร์และกระแส TEC |
| ค่าเกณฑ์และแฟล็ก | เทียบค่าที่ตรวจวัดทุกค่ากับค่าเกณฑ์อะลาร์ม/คำเตือน ตั้งแฟล็กแบบล็อกค้าง และขับ IntL | ค่าเกณฑ์และอะลาร์ม |
| พินความเร็วต่ำ | อ่าน TX_DISABLE, RS0/RS1, LPMode, ResetL; ขับ TX_FAULT, RX_LOS (หรือปิดกั้นสัญญาณฮาร์ดแวร์) | พฤติกรรมของพิน |
| ลูกข่ายสองสาย | ตอบสนองที่ A0h/A2h (SFP) หรือ A0h พร้อมเพจ/แบงก์ (QSFP, CMIS) | แผนผังหน่วยความจำ — อินเทอร์เฟซสองสาย |
| เครื่องสถานะ | สถานะโมดูลและสถานะเส้นทางข้อมูลของ CMIS; การเลือกแอปพลิเคชัน; สควอลช์ | CMIS |
| การป้องกันและฟังก์ชันของผู้ผลิต | รหัสผ่าน, พื้นที่ป้องกันการเขียน, คำสั่งบันทึก, การปลดล็อกของผู้ผลิต, ลายเซ็นยืนยันตัวตน | ชนิดการป้องกันการเขียน |
| CDB/การอัปเดตเฟิร์มแวร์ | ในโมดูล CMIS จะรับและแฟลชอิมเมจเฟิร์มแวร์ใหม่ | ไบต์รุ่นของเฟิร์มแวร์ |
ชิ้นส่วนทั่วไป: MCU 8 บิต (ระดับ 8051) พร้อมแฟลชไม่กี่ kB ใน SFP/SFP+ ต้นทุนต่ำ; ระดับ Cortex-M 32 บิตในโมดูล 100G ขึ้นไปและโมดูล CMIS; ผู้ผลิตบางรายใช้ ASIC ควบคุมทรานซีฟเวอร์โดยเฉพาะที่รวม ADC, DAC และลูกข่ายสองสายไว้ในตัว
สองวิธีในการสร้างหน่วยความจำ
| ดีไซน์ | วิธีเก็บแผนผัง | ผลกระทบต่อการเขียนโค้ด |
|---|---|---|
| EEPROM แยกชิ้น (เช่นระดับ AT24C02) สำหรับ A0h, MCU สำหรับ A2h | ข้อมูลระบุตัวตนที่ A0h เป็น EEPROM แบบอนุกรมจริง ๆ ที่โฮสต์และเครื่องโปรแกรมคุยด้วยโดยตรง; MCU จัดการเฉพาะการวินิจฉัยเท่านั้น | การเขียนที่ A0h เป็นการเขียน EEPROM ธรรมดา — ต้องเคารพ t_WR และขนาดเพจ; พิน WP ทางฮาร์ดแวร์อาจปิดกั้นได้ (ชนิดการป้องกันการเขียน 1–3) |
| แผนผังที่จำลองโดย MCU | MCU ตอบทุกคำขอสองสายจาก RAM และสะท้อนการเปลี่ยนแปลงไปยังแฟลช/EEPROM ภายในของตัวเอง — หรือไม่ก็ได้ | การเขียนจะไปอยู่ที่ใดขึ้นกับเฟิร์มแวร์เป็นผู้ตัดสิน: ยอมรับ, ละเลย, ต้องผ่านรหัสผ่านก่อน, บันทึกเฉพาะหลังคำสั่งบันทึกเท่านั้น หรือถูกเขียนทับด้วยสำเนาของเฟิร์มแวร์เองตอนบูตครั้งถัดไป (ชนิด 4–5) |
| แบบผสม | EEPROM สำหรับบล็อกของผู้ผลิต, MCU สำหรับเพจและรหัสผ่าน | กฎผสมกันไปตามช่วงไบต์ |
แผนผังจำลองอธิบายปริศนาส่วนใหญ่บนโต๊ะทดสอบได้ ได้แก่ ค่า FFh จากเพจที่เฟิร์มแวร์ไม่ได้ทำไว้ การเขียนที่ “สำเร็จ” แล้วก็ย้อนกลับไปเอง ไบต์ที่อ่านได้อย่างเดียวในช่วงหนึ่งแต่เขียนได้อิสระในอีกช่วงหนึ่ง การยืดสัญญาณนาฬิกาขณะที่ MCU กำลังยุ่งอยู่กับการสุ่มตัวอย่าง (ข้อผิดพลาดในการอ่านและเขียน EEPROM)
การบูตและช่วง t_init
เมื่อเปิดไฟ MCU จะโหลดข้อมูลการสอบเทียบและข้อมูลระบุตัวตนจากหน่วยเก็บข้อมูลแบบไม่ลบเลือน เริ่ม ADC รัน APC จนถึงเป้าหมาย แล้วจึงเปิดใช้งานลูกข่ายสองสายและล้างสถานะข้อมูลยังไม่พร้อม นั่นคือช่วงเวลา 300 ms (SFP) ถึง 2 s (QSFP/CMIS) ที่ข้อกำหนดอนุญาตให้ใช้ก่อนที่โฮสต์จะคาดหวังคำตอบได้ และเป็นเหตุผลที่การอ่านค่าทันทีหลังเสียบจะได้ค่าขยะกลับมา (สิ่งที่โฮสต์ทำ)
ที่ที่ข้อมูลการสอบเทียบอาศัยอยู่
ค่าดิบจาก ADC ไม่มีความหมายใด ๆ หากปราศจากค่าคงที่ที่โรงงานวัดไว้บนสถานีทดสอบ ได้แก่ กระแส monitor-PD เทียบกับกำลังส่งจริง, กระแสโฟโตของตัวรับเทียบกับกำลังอินพุตที่ความยาวคลื่นของโมดูล, กราฟเทอร์มิสเตอร์, สเกล DAC ของไบอัส ในโมดูลที่สอบเทียบภายใน เฟิร์มแวร์จะนำค่าคงที่เหล่านี้ไปใช้และรายงานเป็นหน่วยทางกายภาพ ส่วนในโมดูลที่สอบเทียบภายนอก ค่าคงที่จะถูกเขียนไว้ที่ A2h 56–91 ให้โฮสต์นำไปใช้เอง (การสอบเทียบ) การเขียนทับพื้นที่ของผู้ผลิตที่เฟิร์มแวร์บางตัวเก็บค่าคงที่เหล่านี้ไว้จะทำให้ DDM แสดงค่าไร้สาระหรือลูป APC ตาย ซึ่งเป็นวิธีคลาสสิกที่การเขียนอย่างไม่ระมัดระวังทำให้โมดูล “กลายเป็นก้อนอิฐ” (การผลิตและการทดสอบ)
การป้องกันถูกนำไปใช้อย่างไร
| กลไก | การนำไปใช้ | มุมมองบนโต๊ะทดสอบ |
|---|---|---|
| รหัสผ่าน | เฟิร์มแวร์เทียบ 4 ไบต์ที่เขียนลงในพื้นที่รหัสผ่าน (SFP A2h 123–126, QSFP 123–126, CMIS 122–125) กับค่าที่เก็บไว้; ปลดล็อกการเขียนสำหรับเซสชันนั้น | WRITE FAIL จนกว่าจะป้อนค่าที่ถูกต้อง — รหัสผ่าน |
| พื้นที่ป้องกันการเขียน | เฟิร์มแวร์ละเลยการเขียนในช่วงที่ถือว่าอ่านได้อย่างเดียว (เช็กซัม, ค่าเกณฑ์, ข้อมูลการสอบเทียบ, พื้นที่ของผู้ผลิต) | อ่านค่ากลับมาไม่เปลี่ยนแปลง ไม่มีข้อผิดพลาด |
| พิน WP ทางฮาร์ดแวร์ บน EEPROM แยกชิ้น | พินถูกดึงขึ้นสูงไว้ภายในโมดูล หรือถูกขับโดย MCU | ต้องใช้บอร์ดโปรแกรมเป็นตัวขับพินนี้ |
| คำสั่งบันทึก | การเขียนตกไปอยู่ใน RAM ก่อน; ลำดับคำสั่งเฉพาะของผู้ผลิตจะบันทึกลงแฟลชจริง | ย้อนกลับหลังตัดไฟแล้วจ่ายไฟใหม่ เว้นแต่จะส่งลำดับคำสั่งนั้น |
| มิเรอร์ของเฟิร์มแวร์ | เมื่อบูตเฟิร์มแวร์จะเขียนแผนผังใหม่จากอิมเมจของตัวเอง | การเปลี่ยนแปลงหายไปทุกครั้งที่ตัดไฟแล้วจ่ายไฟใหม่ — มีเพียงเครื่องมือของผู้ผลิตเท่านั้นที่เปลี่ยนอิมเมจได้ |
| การยืนยันตัวตน | เฟิร์มแวร์คำนวณลายเซ็น (แฮชของหมายเลขซีเรียล ข้อมูลผู้ผลิต และค่าลับ) ใส่ลงในไบต์ของผู้ผลิต; โฮสต์เป็นผู้ตรวจสอบ | แก้ไขข้อมูลระบุตัวตนแล้วผ่านเช็กซัม แต่โฮสต์ก็ยังปฏิเสธอยู่ดี — การล็อกผู้ผลิต |
วิธีจดจำและเขียนโค้ดแต่ละชนิด: ชนิดการป้องกันการเขียน, การเขียนโค้ด EEPROM ใหม่
การอัปเดตเฟิร์มแวร์
โมดูล CMIS รับเฟิร์มแวร์ผ่านบัสสองสายได้ด้วยคำสั่ง CDB (เริ่มดาวน์โหลด, เขียนบล็อก, เสร็จสิ้น, รัน, คอมมิต) มักมีแบงก์อิมเมจสองชุดเพื่อให้ย้อนกลับได้หากอัปเดตล้มเหลว โมดูล SFF-8472/8636 ไม่มีกลไกมาตรฐาน ผู้ผลิตใช้ลำดับคำสั่งเฉพาะของตนผ่านไบต์ของผู้ผลิต การแก้ไขเฟิร์มแวร์คือวิธีที่ผู้ผลิตใช้แก้ปัญหาความเข้ากันได้ของ CMIS (ปัญหาของ CMIS) และไบต์รุ่นของเฟิร์มแวร์ (เพจล่าง 39–40 ของ CMIS, เพจ 01h 128–129) ก็ควรค่าแก่การบันทึกไว้พร้อมกับข้อมูลระบุตัวตน
รูปแบบความล้มเหลวของตัวควบคุม
| อาการ | สาเหตุที่เป็นไปได้ |
|---|---|
| มองไม่เห็นโมดูลบนบัส ทั้งที่ส่วนออปติกปกติดี | MCU ไม่บูต: เฟิร์มแวร์เสียหาย, ไฟตก, คริสตัลเสียหาย |
| ค่า DDM ค้างหรือไร้สาระ | ADC หรือข้อมูลการสอบเทียบเสียหาย; เฟิร์มแวร์ค้าง |
| กำลัง Tx เลื่อนไหลทั้งที่ APC ควรจะรักษาไว้ | monitor-PD หรือ ADC เสีย, APC ถูกปิดใช้งาน |
| NACK แบบสุ่ม, อ่านช้า | MCU ทำงานหนักเกินไป (กำลังสุ่มตัวอย่าง), ขีดจำกัดการยืดสัญญาณนาฬิกาถูกเกินโดยเครื่องโปรแกรมที่เร็วเกินไป |
| ทำงานได้ แต่ทุกการเขียนย้อนกลับเสมอ | เป็นมิเรอร์ของเฟิร์มแวร์ตามการออกแบบ — ไม่ใช่ความผิดปกติ |
| โมดูลตายหลังการเขียน | พื้นที่การตั้งค่าเฟิร์มแวร์หรือข้อมูลการสอบเทียบถูกเขียนทับ |
ใน CodingBox
CodingBox ปฏิบัติต่อโมดูลตามที่เฟิร์มแวร์นำเสนอ: ตรวจจับชนิดของแผนผัง ใช้รหัสผ่านที่รู้จักและสคริปต์การเขียนโค้ดสำหรับดีไซน์แบบคำสั่งบันทึกและแบบมิเรอร์ คำนวณเช็กซัมใหม่ เก็บสำเนาสำรองไว้ก่อนการเขียนทุกครั้ง และให้คุณกู้คืนได้จาก code database หากตัวควบคุมมีปฏิกิริยาที่ไม่ดี EEPROM editor ทำเครื่องหมายช่วงที่ข้อกำหนดนิยามไว้ว่าอ่านได้อย่างเดียวหรือเฉพาะของผู้ผลิต เพื่อให้คุณรู้ว่ากำลังเขียนเข้าไปในพื้นที่ส่วนตัวของเฟิร์มแวร์อยู่เมื่อใด