Mã hóa QSFP28 và QSFP-DD: khối ID nằm ở đâu khi rời khỏi A0h/A2h của SFF-8472
Tôi làm các lô nhỏ recode module cho integrator, và cho tới giờ mọi thứ trên bench của tôi đều theo kiểu SFP: đọc 256 byte ở A0h với serial ID nằm ở nửa đầu, đọc A2h để lấy diagnostics và ngưỡng cảnh báo, ghi khối định danh, xong. Giờ có một khách hàng mang tới hàng 100G và 400G và rig của tôi rõ ràng đuối sức.
- module cần recode: một khay QSFP28, vài QSFP-DD và một mẫu OSFP
- programmer hiện tại: I2C trơn, đọc và ghi A0h và A2h, không có page select
- host ở đầu bên kia kiểm tra vendor name, part number và serial trước khi bật sáng port
Ghi chú của tôi về cách bộ nhớ được bố trí, đây mới thực sự là thứ tôi muốn được kiểm tra lại:
SFP/SFP+/SFP28 (SFF-8472): A0h 256B, serial ID in first 128B; A2h 256B diagnostics + thresholds, optional 128B pages
QSFP+/QSFP28 (SFF-8636): single A0h, 128B pages selected by byte 7Fh, page 00h mandatory
XFP (INF-8077i): byte 7Fh picks the active table, with serial ID in table 01h and user EEPROM in 02h
OSFP/QSFP-DD/SFP-DD (CMIS 5.x): lower 128B fixed, upper memory by bank and page via 7Eh and 7Fh
Những gì đã thử:
- dump một QSFP28 bằng profile SFP của tôi, nó đưa cho tôi nửa dưới cộng với bất kỳ page nào đang được chọn lúc đó
- lấy hai dump liên tiếp của cùng module để xem byte nào tự thay đổi
Bản đồ đó có đúng không, và tôi thực sự phải ghi những trường nào để mã hóa vendor khi bộ nhớ đã chia page và bank như vậy?
Comments 5
Bản đồ đó về cơ bản là đúng. Cái rig của bạn thiếu là trên SFF-8636 chỉ có một địa chỉ và 128 byte phía trên là một cửa sổ: bạn ghi số page vào byte 7Fh, rồi đọc nửa trên thì nhận được đúng page đó. Page 00h là page bắt buộc và chứa khối định danh, nên để mã hóa thì hiếm khi cần đi đâu khác. CMIS còn thêm một lớp bank lên trên: 7Eh chọn bank, 7Fh chọn page, còn 128 byte phía dưới cố định và luôn đọc được. Không có page select thì tool của bạn cứ đưa cho bạn bất kỳ page nào module đang dừng lại, đúng y hành vi bạn mô tả.
Các trường quan trọng cho việc mã hóa vendor thì giống nhau ở mọi nơi: vendor name, part number, revision, serial, OUI và các checksum. Sai một checksum là một host khó tính sẽ loại module dù mọi chuỗi text nhìn hoàn hảo trong hex dump. Một điều nữa cần chuẩn bị tinh thần: một số module bảo vệ các chức năng vendor sau password của manufacturer và host trong khi đọc trơn vẫn mở, nên bạn có thể thoải mái dump một part mà không ghi được.
Checksum đúng là thứ cắn tôi ngay lần thử đầu tiên - các chuỗi khớp từng byte với một module chắc chắn tốt mà host vẫn từ chối part đó. Tốt là biết được page 00h là đủ cho khối định danh, điều đó giữ phạm vi công việc nhỏ lại.
Tóm lại thành thật là programmer của tôi không làm được việc này chút nào, vì nó không có cách nào ghi byte 7Fh trước khi đọc. Tôi thà mua hẳn một board còn hơn gắn thêm page select vào một rig tự chế chỉ cho một đơn hàng. Có thứ gì trên thị trường xử lý bank CMIS đàng hoàng không, hay đó chỉ là tính năng trên datasheet cho có?
Các board thương mại có quảng cáo việc này - SFPTotal Plus X, hàng của Reveltronics (REVELPROG-IS), các programmer EDGE và Flexoptix đều đưa QSFP-DD và OSFP vào danh sách tính năng, và còn kèm theo một database mã vendor. SFPTotal tuyên bố hơn 25.000 mã, gồm cả Cisco, Huawei và HPE.
Số đó khớp được bao nhiêu với các part cụ thể trên bench của bạn lại là chuyện khác, và tôi cũng không dám chắc chắn hộ bạn. Nếu có thể, hãy mang một mẫu QSFP-DD của khách đặt trước board đó trước khi quyết định mua. Hỗ trợ một form factor trên datasheet không giống với hỗ trợ đúng module cụ thể trong tay bạn, và các part có bank chính là chỗ khoảng cách đó lộ ra.
Để so sánh, công việc SFP trơn thì vẫn thô sơ như trước giờ: chỉ 128 byte đầu trong dump 256 byte là thực sự quan trọng, phần còn lại là vùng dành riêng cho nhà sản xuất, và người ta đã ghi image GLC-LX hay GLC-BX-D/GLC-BX-U lên các part CWDM generic suốt nhiều năm để chúng được một Catalyst 3560, một HP J8692A hay một EX4200-24F chấp nhận. Sơ đồ programmer tự chế được truyền tay cho việc đó, serp-0.3 là cái tôi tự làm, và dump từ một Finisar FCMJ-8521-3, một HP J4858C hay J4859C, hoặc một D-Link DEM-310GT là những điểm tham chiếu quen thuộc.
Chuyện khác hẳn, nhưng đáng biết phòng khi có que GPON lên bench của bạn: ở đó bạn không mã hóa từ bên ngoài chút nào. Trên một FS GPON-ONU-34-20BI, vốn là họ hàng của Nokia G-010S-A, bạn có một shell ngay trên que đó - khi cắm sợi quang vào nó trả lời ở 192.168.1.10 với user ONTUSER - đặt serial và MAC bằng uci, và ghi lại vendor string trong EEPROM từ bên trong bằng sfp_i2c.
QDD và OSFP dùng cấu trúc CMIS và chỉ có đúng một byte checksum trong Page 0.