CodingBox Q&A Ask question

QSFP28과 QSFP-DD 코딩: SFF-8472 A0h/A2h를 벗어나면 ID 블록은 어디에 있나

Asked Active Viewed 74 AI translation from English
4

저는 인티그레이터용으로 소량씩 모듈 재코딩을 하고 있는데, 지금까지는 작업대 위의 모든 게 SFP 모양이었습니다. A0h의 256바이트를 읽는데 앞쪽 절반에 시리얼 ID가 있고, A2h를 읽어서 진단과 임계값을 보고, 식별 블록을 쓰면 끝이었습니다. 그런데 고객이 100G와 400G 부품을 들고 나타났고 제 장비는 분명히 역부족입니다.

  • 재코딩할 모듈: QSFP28 한 트레이, QSFP-DD 몇 개, OSFP 샘플 하나
  • 현재 프로그래머: 순수 I2C, A0h와 A2h를 읽고 쓰지만 페이지 선택 기능은 전혀 없음
  • 반대쪽 호스트는 포트에 불이 들어오기 전에 벤더 이름, 파트넘버, 시리얼을 확인함

메모리 구조에 대해 제가 정리한 작업 노트인데, 이게 바로 검증받고 싶은 내용입니다:

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

지금까지 시도한 것:

  • SFP 프로파일로 QSFP28을 덤프해봄, 아래쪽 절반과 그때그때 선택된 페이지를 그대로 넘겨줌
  • 같은 모듈을 연달아 두 번 덤프해서 어떤 바이트가 저절로 바뀌는지 확인함

이 지도가 맞나요? 그리고 메모리가 페이지와 뱅크로 나뉜 상태에서 벤더 코딩을 하려면 실제로 어떤 필드를 써야 하나요?

Comments 5

지도는 본질적으로 맞습니다. 지금 장비에 빠진 부분은, SFF-8636에는 주소가 하나뿐이고 위쪽 128바이트는 창(window)이라는 점입니다. 바이트 7Fh에 페이지 번호를 쓰고 나서 위쪽 절반을 읽으면 그 페이지가 나옵니다. 페이지 00h가 필수이고 식별 블록을 담고 있어서, 코딩 목적이라면 다른 곳까지 갈 일은 거의 없습니다. CMIS는 그 위에 뱅크를 하나 더 얹는데 - 7Eh가 뱅크를 고르고 7Fh가 페이지를 고르며, 아래쪽 128바이트는 고정이라 항상 읽을 수 있습니다. 페이지 선택이 없으면 도구는 모듈이 마지막으로 멈춰 있던 페이지를 계속 그대로 넘겨주는데, 이게 정확히 설명하신 그 동작입니다.

벤더 코딩에서 중요한 필드는 어디나 똑같습니다. 벤더 이름, 파트넘버, 리비전, 시리얼, OUI, 체크섬입니다. 체크섬 하나만 틀려도 까다로운 호스트는 헥스 덤프에서 모든 문자열이 완벽해 보여도 모듈을 내쳐버립니다. 하나 더 대비해둘 것은, 일부 모듈은 평범한 읽기는 열려 있으면서도 벤더 기능은 제조사와 호스트 비밀번호 뒤에 숨겨두기 때문에, 쓰기는 못 해도 덤프는 얼마든지 할 수 있는 부품도 있다는 겁니다.

4 KazakhstanrackhubKZ Show original (English) AI translation

첫 시도에서 정확히 체크섬에 물렸습니다 - 정상 동작하는 모듈과 문자열이 바이트 단위로 똑같았는데도 호스트가 그 부품을 계속 거부했거든요. 식별 블록에는 페이지 00h면 충분하다는 걸 알게 돼서 작업 범위는 작게 유지할 수 있겠네요.

솔직히 정리하면 제 프로그래머로는 이걸 아예 못합니다. 읽기 전에 바이트 7Fh를 쓸 방법이 없거든요. 주문 하나 때문에 자작 장비에 페이지 선택 기능을 붙이느니 그냥 보드를 사는 게 낫겠습니다. 시중에 CMIS 뱅크를 제대로 다루는 게 있나요, 아니면 그건 데이터시트에나 나오는 기능인가요?

2 ChinasfpnodeCN Show original (English) AI translation

상용 보드들은 그걸 내세우긴 합니다 - SFPTotal Plus X, Reveltronics 장비(REVELPROG-IS), EDGE 프로그래머, Flexoptix 전부 QSFP-DD와 OSFP를 기능 목록에 올려두고 있고, 벤더 코드 데이터베이스까지 딸려 옵니다. SFPTotal은 Cisco, Huawei, HPE를 포함해서 25,000개가 넘는 코드를 지원한다고 주장합니다.

그게 실제로 작업대 위의 특정 부품과 얼마나 맞아떨어지는지는 별개 문제고, 제 말도 그대로 믿지는 마세요. 가능하다면 구매를 확정하기 전에 고객의 QSFP-DD 샘플을 보드 앞에 직접 가져다 놓아보세요. 데이터시트에 폼팩터 지원이 적혀 있는 것과 손에 든 그 특정 모듈이 지원되는 건 다른 얘기고, 뱅크가 있는 부품에서 바로 그 차이가 드러납니다.

3 South Koreawaverunner63KR Show original (English) AI translation

대조해보면 평범한 SFP 작업은 예나 지금이나 투박합니다. 256바이트 덤프 중 진짜 중요한 건 앞쪽 128바이트뿐이고 나머지는 제조사 예약 영역이라서, 사람들은 몇 년째 GLC-LX나 GLC-BX-D/GLC-BX-U 이미지를 범용 CWDM 부품에 써넣어서 Catalyst 3560, HP J8692A, EX4200-24F가 받아들이게 만들어 왔습니다. 그 용도로 자작 프로그래머 회로도가 돌아다녔는데 제가 만든 건 serp-0.3이었고, Finisar FCMJ-8521-3, HP J4858C나 J4859C, D-Link DEM-310GT에서 뽑은 덤프가 흔히 쓰이는 기준점이었습니다.

결이 다른 얘기지만, 작업대에 GPON 스틱이 올라올 경우를 대비해서 알아둘 만합니다. 거기서는 외부에서 코딩하는 게 아예 불가능합니다. Nokia G-010S-A와 한 계열인 FS GPON-ONU-34-20BI에서는 스틱 자체에 셸이 뜨는데 - 광케이블을 연결한 상태로 192.168.1.10에서 ONTUSER로 응답합니다 - uci로 시리얼과 MAC을 설정하고, 내부에서 sfp_i2c로 EEPROM 벤더 문자열을 다시 씁니다.

2 Türkiyelinknerd83TR Show original (English) AI translation
Log in to comment. Log in