ตัวควบคุมและเฟิร์มแวร์: DDM, APC, หน่วยความจำ และการป้องกัน · ภายในโมดูล: เลเซอร์และตัวรับ · ทรานซีฟเวอร์ออปติคัลและสายเคเบิล · เอกสารประกอบ · CodingBox
CodingBox เอกสารประกอบ

ตัวควบคุมและเฟิร์มแวร์: 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)
แผนผังที่จำลองโดย MCUMCU ตอบทุกคำขอสองสายจาก 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 ทำเครื่องหมายช่วงที่ข้อกำหนดนิยามไว้ว่าอ่านได้อย่างเดียวหรือเฉพาะของผู้ผลิต เพื่อให้คุณรู้ว่ากำลังเขียนเข้าไปในพื้นที่ส่วนตัวของเฟิร์มแวร์อยู่เมื่อใด


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