CodingBox Q&A Ask question

프로그래머가 SFP+ FTLX8571D3BCV-IT를 읽기는 하는데 쓰기에는 No Acknowledge로 응답함

Asked Active Viewed 110 AI translation from Русский
6

작은 모듈 교환 재고를 관리하고 있습니다. 노드들이 도시 곳곳에 흩어져 있어서, 남의 스위치마다 거의 매번 SFP를 재코딩해야 합니다. 기가비트 모듈로는 방법이 오래전에 자리 잡았는데, 10기가짜리에서 막혔습니다.

책상 위에 있는 것:

  • SFP/SFP+ 케이지가 있는 프로그래머, 전원 3.3V
  • Finisar FTLX8571D3BCV-IT와 FTLX1471D3BCV-IT, 둘 다 읽힘
  • 오래된 재고에서 나온 Cisco GLC-LH-SM
  • HP J4858B와 J4859C

읽기는 안정적으로, 반복해서 되고, 두 뱅크 다 전체가 됩니다. 쓰기는 어느 것도 안 됩니다.

read  A0 0x00-0xFF ... OK
read  A2 0x00-0xFF ... OK
write A0 vendor name ... No Acknowledge
write A0 serial (bytes 68-83) ... No Acknowledge

이미 확인한 것:

  • 같은 프로그래머로 일반 기가비트 SFP에 똑같은 작업을 하면 됨, 그러니까 배선이랑 전원은 살아있음
  • FTLX8571D3BCV-IT 두 번째 개체를 가져옴, 동작이 바이트 단위까지 똑같음
  • GLC-LH-SM에서는 벤더 필드를 건드리기도 전에 No Acknowledge가 바로 날아옴

그러니까 특정 개체의 문제는 아닌 것 같습니다. 이게 모듈 자체의 하드웨어 쓰기 보호인가요, 아니면 SFP+에서는 메모리가 이미 순수 EEPROM이 아니라서 일반적인 I2C 쓰기로는 아예 접근이 안 되는 건가요? 그리고 따로 궁금한 게 HP J4858B/J4859C인데, 일반 프로그래머로 쓰는 사람이 있나요, 아니면 이건 처음부터 막다른 길인가요?

Comments 6

Accepted answer

여기엔 서로 다른 메커니즘 두 개가 섞여 있고, 고치는 방법도 다릅니다.

첫 번째는 평범한 EEPROM에 하드웨어 쓰기 보호가 걸린 경우입니다. 메모리 칩에는 write protect 핀이 있고, 그게 풀업돼 있는 동안은 읽기는 되고 쓰기는 떨어져 나갑니다. 이 작업을 깊이 파본 사람들이 권하던 방법은 플래싱하는 동안 그 핀을 접지시키는 거였습니다. 일부 기가비트 모듈은 이걸로 충분합니다.

두 번째가 10기가짜리에서 부딪히신 겁니다. SFP+에서는 데이터가 종종 별도 EEPROM이 아니라 모듈 마이크로컨트롤러 뒤에 있습니다. 그 컨트롤러가 A0랑 A2를 읽기용으로는 직접 내주고, 쓰기는 자기만의 명령 시퀀스로만 받아들입니다. 표준 프로그래머는 그 시퀀스를 모르니까 어느 필드를 노리든 상관없이 모든 시도에서 No Acknowledge를 받는 겁니다. 거기엔 접지시킬 게 없어요.

케이지를 실제로 우회하는 데 도움이 되는 방법은 프로그래머 커넥터를 건너뛰고 모듈의 4번, 7번 핀, 즉 I2C 라인에 전선을 직접 납땜하는 겁니다. 후기를 보면 이렇게 한 뒤로 케이지에서는 조용하던 모듈 일부가 써집니다. 거친 방법이고 손이 정확해야 하고, 그 뒤로 모듈이 사는지는 본인 책임입니다.

HP는 완전히 별개입니다. 표준 프로그래머는 안 먹히고, 자체 처리가 필요하고, J4858B/J4859C를 일반 배선으로는 성공을 기대 안 하겠습니다. 목표가 그냥 남의 스위치에서 동작하는 모듈을 얻는 거라면, HP랑 씨름하는 것보다 정직한 메모리를 가진 모듈을 구해서 벤더 이미지를 통째로 밀어넣는 게 더 쌉니다. 256바이트 덤프 중 의미 있는 건 앞의 128바이트고, 나머지는 제조사 예약 영역입니다.

당연히 어떤 벤더도 이런 재코딩을 지원하지 않습니다. 재프로그래밍된 모듈을 들고 지원팀에 가봐야 할 얘기가 없습니다.

3 Russialambdaops44RU Show original (Русский) AI translation

몇 가지 확인해주세요, 안 그러면 추측이 됩니다. No Acknowledge가 장치 주소 자체에서 오나요, 아니면 첫 데이터 바이트 이후에 오나요? 프로그래머 로그에서 보통 이게 보입니다. 그리고 쓰시는 프로그래머가 어떤 건가요, 완제품인가요 아니면 자체 배선의 자작품인가요? 이에 따라 케이지의 3.3V에서 뭘 기대할 수 있는지가 달라집니다.

전원 인가 시 동작도 궁금합니다. 모듈을 설치하자마자 실패하는 것과 전원을 몇 분 받은 뒤 실패하는 게 똑같나요? 그리고 네 종류 다 똑같이 동작하나요, 아니면 Finisar랑 HP가 다른가요? HP는 보통 자기만의 실패 원인이 있어서 나머지랑 바로 분리하는 게 낫습니다.

3 RussiadwdmmonkRU Show original (Русский) AI translation

결과 보고합니다. 케이지를 건너뛰고 I2C 라인의 4번, 7번 핀에 직접 납땜했습니다. Finisar는 됐습니다. FTLX8571D3BCV-IT는 써졌고 반대로 읽어서 확인도 됐고, FTLX1471D3BCV-IT도 마찬가지입니다. GLC-LH-SM도 더 이상 No Acknowledge를 안 내고 정상적으로 써집니다.

HP는 끝내 항복 안 했습니다. J4858B는 쓰기는 형식적으로 받아들이는데, 수정한 뒤에 스위치가 모듈을 거부합니다. J4859C도 똑같이 동작하고요. 그러니 저한테는 문제가 절반만 해결됐습니다. Finisar랑 Cisco는 이제 쓰고, HP는 다음 기회까지 미뤄뒀습니다.

1 KazakhstanlinkguruKZ Show original (Русский) AI translation

HP는 함정이 쓰기 보호보다 더 깊어서, 나온 결과가 예상된 그대로입니다. J4858B에서 바이트 68-83, 그러니까 시리얼 넘버를 수정하면 바이트 124-127의 체크섬이 바뀌고, 그 뒤로 모듈이 거부됩니다. 이건 계산하는 데 문제없는 MSA의 CC_BASE랑 CC_EXT가 아니라, A0의 마지막 네 바이트에 있는 별도의 벤더 체크섬입니다. 다들 아무리 파봐도 알고리즘은 끝내 공개적으로 안 풀렸습니다.

같은 사연의 J9150A도 마찬가지고요. 더 신형인 HP랑 Aruba 모듈에서는 아예 정적 체크섬에서 요청-응답 방식인 HPIDv2로 넘어가서, 거기서는 프로그래머가 원리적으로 무용지물입니다. 그러니 "써지긴 하는데 안 받아들여진다"는 나올 수밖에 없었던 결과, 딱 그겁니다.

1 Kazakhstanlambdaowl20KZ Show original (Русский) AI translation

모듈 하나가 아니라 재고를 굴리고 계시니, 도구 얘기를 하겠습니다. 저는 Huawei S5731이랑 S6730용, 그리고 HP 6120XG용 재코딩에 Ubiquiti의 UACC-SFP-WIZARD를 갖다 썼습니다. 저렴한 프로그래머치고는 꽤 쓸 만합니다. 다만 Ubiquiti 모듈 자체에는 0x00001011, SFPX, QSFP 같은 형태의 비밀번호 목록이 돌아다니고, 그게 없으면 일부 모듈은 쓰기가 안 열립니다. 이미지로는 FTLX8571D3BCV랑 FTLX8574D3BCV를 자주 쓰고, 가끔 SNR-SFP+W73-3이랑 W37-3도 씁니다.

3 Russiaportrunner91RU Show original (Русский) AI translation

위의 일반화를 정정하겠습니다, 아무도 시기상조로 인두를 잡지 않도록요. 모든 SFP+에서 메모리가 마이크로컨트롤러 뒤에 숨어있는 건 아닙니다. 제 FTLX8574D3BCV랑 SNR-SFP+W73-3 두 개는 납땜 없이 케이지에 꽂은 일반 프로그래머로 써졌습니다. 그러니 먼저 해당 개체를 확인하고 나서 우회로 들어가는 게 맞습니다.

그리고 write protect 핀 접지도 만능 레시피는 아닙니다. 마이크로컨트롤러가 있는 모듈에서는 아무 소용이 없어요, 거기서는 실패가 메모리가 아니라 컨트롤러 펌웨어에서 오는 거니까요. 이 작업은 정직한 별도 EEPROM이 있는 곳에서만 의미가 있고, 전원을 끈 모듈에서 해야 합니다. 안 그러면 모듈 대신 벽돌을 얻기 십상입니다.

2 UkrainecoremonkUA Show original (Русский) AI translation
Log in to comment. Log in