Bộ điều khiển và firmware: DDM, APC, bộ nhớ, bảo vệ
Mọi transceiver có quản lý đều có một máy tính nhỏ bên trong. Vi điều khiển (MCU) đo lường, điều chỉnh, báo cáo và — theo góc nhìn của người lập trình thì đây là điều quan trọng nhất — chính nó là bộ nhớ mà bạn đọc và ghi. Việc một module có một EEPROM thuần túy hay một MCU giả lập EEPROM quyết định module đó có thể được mã hóa ra sao, vì sao một số lần ghi biến mất sau khi ngắt rồi cấp lại nguồn, và vì sao mật khẩu tồn tại. Trang này mô tả những gì bộ điều khiển thực hiện và thiết kế của nó thể hiện ra sao trên bàn thử.
MCU làm những gì
| Tác vụ | Chi tiết | Biểu hiện ra ngoài |
|---|---|---|
| Đo lường | lấy mẫu nhiệt độ (thermistor hoặc cảm biến trên chip), Vcc, dòng phân cực laser, dòng PD giám sát (Tx) và dòng quang điện của bộ thu (Rx) qua một ADC 10–12 bit, nhiều lần mỗi giây; áp dụng hiệu chuẩn của nhà máy | giá trị DDM — Thông số |
| APC — điều khiển công suất tự động | so sánh dòng PD giám sát với mục tiêu của nhà máy và chỉnh DAC dòng phân cực của driver | công suất Tx không đổi, dòng phân cực tăng dần — Dòng phân cực Tx và lão hóa |
| Bù nhiệt độ | các bảng tra chỉnh dòng điều chế và, trên PAM4, chỉnh cả thiết lập DSP theo nhiệt độ | tỷ số tắt ổn định |
| Điều khiển TEC | vòng lặp PID giữ nhiệt độ laser trên các module có làm mát; phản hồi từ bộ khóa bước sóng trên DWDM | giám sát laser temperature, TEC current |
| Ngưỡng và cờ báo | so sánh mọi giá trị giám sát với ngưỡng báo động/cảnh báo, đặt các cờ bị chốt, điều khiển IntL | Ngưỡng và báo động |
| Chân tín hiệu tốc độ thấp | đọc TX_DISABLE, RS0/RS1, LPMode, ResetL; điều khiển TX_FAULT, RX_LOS (hoặc khóa/mở các tín hiệu phần cứng) | hành vi của chân tín hiệu |
| Slave hai dây | trả lời tại A0h/A2h (SFP) hoặc A0h kèm trang/bank (QSFP, CMIS) | bản đồ bộ nhớ — Giao diện hai dây |
| Máy trạng thái | trạng thái module và đường dữ liệu theo CMIS; chọn ứng dụng; nén tín hiệu | CMIS |
| Bảo vệ và chức năng riêng của nhà sản xuất | mật khẩu, vùng bảo vệ ghi, lệnh save, mở khóa của nhà sản xuất, chữ ký xác thực | Các kiểu bảo vệ ghi |
| CDB / cập nhật firmware | trên các module CMIS, nhận và nạp (flash) ảnh firmware mới | byte phiên bản firmware |
Linh kiện điển hình: MCU 8-bit (dòng 8051) với vài kB flash trong các SFP/SFP+ giá rẻ; dòng Cortex-M 32-bit trong các module 100G+ và CMIS; một số nhà sản xuất dùng một ASIC điều khiển transceiver chuyên dụng tích hợp ADC, DAC và slave hai dây.
Hai cách xây dựng bộ nhớ
| Thiết kế | Cách bản đồ bộ nhớ được lưu trữ | Hệ quả đối với việc lập trình |
|---|---|---|
| EEPROM rời (ví dụ dòng AT24C02) cho A0h, MCU cho A2h | thông tin nhận dạng ở A0h là một EEPROM nối tiếp thật mà host và bộ lập trình giao tiếp trực tiếp; MCU chỉ xử lý chẩn đoán | việc ghi A0h là ghi EEPROM thông thường — phải tôn trọng t_WR và kích thước trang; một chân WP phần cứng có thể chặn việc ghi (Kiểu bảo vệ ghi 1–3) |
| Bản đồ do MCU mô phỏng | MCU trả lời mọi yêu cầu hai dây từ RAM và sao phản ánh các thay đổi vào flash/EEPROM nội bộ của nó — hoặc không | việc ghi đi tới đâu là do firmware quyết định: được chấp nhận, bị bỏ qua, bị khóa bằng mật khẩu, chỉ được lưu sau một lệnh save, hoặc bị ghi đè bởi bản sao riêng của firmware ở lần khởi động kế tiếp (kiểu 4–5) |
| Lai | EEPROM cho khối riêng của nhà sản xuất, MCU cho các trang và mật khẩu | quy tắc khác nhau theo từng dải byte |
Một bản đồ được mô phỏng giải thích được hầu hết các bí ẩn trên bàn thử: giá trị FFh từ một trang mà firmware không triển khai, các lần ghi “thành công” rồi lại tự hoàn nguyên, các byte chỉ đọc trong dải này nhưng tự do trong dải kế tiếp, hiện tượng kéo giãn xung nhịp (clock stretching) khi MCU đang bận lấy mẫu (Lỗi đọc và ghi EEPROM).
Khởi động và cửa sổ t_init
Khi cấp nguồn, MCU nạp dữ liệu hiệu chuẩn và thông tin nhận dạng từ bộ nhớ không mất dữ liệu của nó, khởi động ADC, chạy APC tới mục tiêu và chỉ sau đó mới bật slave hai dây và xóa cờ data-not-ready. Đó chính là khoảng 300 ms (SFP) đến 2 s (QSFP/CMIS) mà đặc tả cho phép trước khi host có thể kỳ vọng nhận được phản hồi, và cũng là lý do một lần đọc ngay sau khi cắm module trả về dữ liệu rác (Những gì host thực hiện).
Hiệu chuẩn nằm ở đây
Các giá trị đếm thô từ ADC không có ý nghĩa gì nếu thiếu các hằng số mà nhà máy đã đo trên một trạm kiểm tra: dòng PD giám sát so với công suất phát thực tế, dòng quang điện của bộ thu so với công suất đầu vào tại đúng bước sóng của module, đường cong thermistor, thang đo DAC của dòng phân cực. Trên các module hiệu chuẩn nội, firmware áp dụng các hằng số này và báo cáo ra đơn vị vật lý; trên các module hiệu chuẩn ngoại, các hằng số được ghi vào A2h 56–91 để host tự áp dụng (Hiệu chuẩn). Ghi đè lên vùng riêng của nhà sản xuất — nơi một số firmware lưu giữ các hằng số này — sẽ tạo ra DDM vô nghĩa hoặc một vòng lặp APC chết đứng — đây là cách kinh điển khiến một lần ghi bất cẩn “biến một module thành cục gạch” (Sản xuất và kiểm tra).
Cách bảo vệ được triển khai
| Cơ chế | Cách triển khai | Biểu hiện trên bàn thử |
|---|---|---|
| Mật khẩu | firmware so sánh 4 byte được ghi vào vùng mật khẩu (SFP A2h 123–126, QSFP 123–126, CMIS 122–125) với một giá trị đã lưu; mở khóa ghi cho phiên làm việc đó | WRITE FAIL cho tới khi giá trị đúng được nhập vào — Passwords |
| Vùng bảo vệ ghi | firmware bỏ qua các lệnh ghi vào những dải nó coi là chỉ đọc (checksum, ngưỡng, hiệu chuẩn, vùng riêng của nhà sản xuất) | đọc lại byte thấy không đổi, không báo lỗi |
| Chân WP phần cứng trên một EEPROM rời | chân này được kéo lên mức cao bên trong module hoặc do MCU điều khiển | cần bo mạch lập trình điều khiển chân này |
| Lệnh save | dữ liệu ghi vào RAM; một chuỗi lệnh riêng của nhà sản xuất mới ghi chúng xuống flash | tự hoàn nguyên sau khi ngắt rồi cấp lại nguồn nếu chuỗi lệnh đó không được gửi |
| Firmware mirror | khi khởi động, firmware ghi lại bản đồ bộ nhớ từ chính ảnh của nó | thay đổi biến mất sau mỗi lần ngắt/cấp lại nguồn — chỉ công cụ của nhà sản xuất mới đổi được ảnh đó |
| Xác thực | firmware tính một chữ ký (hash của số sê-ri, dữ liệu riêng của nhà sản xuất và một khóa bí mật) rồi ghi vào các byte riêng của nhà sản xuất; host xác minh chữ ký đó | sửa thông tin nhận dạng vẫn qua được checksum nhưng host vẫn từ chối — Khóa nhà sản xuất |
Cách nhận biết và lập trình từng kiểu: Các kiểu bảo vệ ghi, Mã hóa lại EEPROM.
Cập nhật firmware
Các module CMIS có thể nhận firmware qua bus hai dây bằng các lệnh CDB (bắt đầu tải xuống, ghi khối, hoàn tất, chạy, commit), thường có hai bank ảnh để một lần cập nhật thất bại vẫn có đường lùi. Các module SFF-8472/8636 không có cơ chế chuẩn nào; các nhà sản xuất dùng chuỗi lệnh riêng qua các byte riêng của nhà sản xuất. Vá lỗi bằng firmware là cách các nhà sản xuất giải quyết các vấn đề tương tác CMIS (Vấn đề CMIS), và byte phiên bản firmware (trang dưới CMIS 39–40, trang 01h 128–129) đáng được ghi lại cùng với thông tin nhận dạng.
Các kiểu sự cố của bộ điều khiển
| Triệu chứng | Nguyên nhân khả dĩ |
|---|---|
| Module không hiện diện trên bus, phần quang học vẫn bình thường | MCU không khởi động được: firmware hỏng, sụt áp (brown-out), thạch anh hỏng |
| Giá trị DDM đứng im hoặc vô nghĩa | ADC hoặc dữ liệu hiệu chuẩn bị hỏng; firmware treo |
| Công suất Tx trôi dù APC lẽ ra phải giữ ổn định | PD giám sát hoặc ADC lỗi, APC bị vô hiệu hóa |
| NACK ngẫu nhiên, đọc chậm | MCU quá tải (đang lấy mẫu), giới hạn kéo giãn xung nhịp bị một bộ lập trình quá nhanh vượt qua |
| Vẫn hoạt động, nhưng mọi lần ghi đều tự hoàn nguyên | do thiết kế firmware mirror — không phải lỗi |
| Module chết sau một lần ghi | vùng cấu hình firmware hoặc vùng hiệu chuẩn bị ghi đè |
Trong CodingBox
CodingBox xử lý module đúng như cách firmware trình diện nó: phát hiện kiểu bản đồ bộ nhớ, áp dụng các mật khẩu đã biết và các kịch bản lập trình cho những thiết kế dùng lệnh save hoặc dùng mirror, tính lại checksum, giữ một bản sao lưu trước mỗi lần ghi và cho phép bạn khôi phục từ code database nếu bộ điều khiển phản ứng bất thường. EEPROM editor đánh dấu các dải mà đặc tả định nghĩa là chỉ đọc hoặc dành riêng cho nhà sản xuất, để bạn biết khi nào mình đang ghi vào lãnh địa riêng của firmware.