CodingBox 문서

컨트롤러와 펌웨어: DDM, APC, 메모리, 보호

매니지드 트랜시버에는 모두 작은 컴퓨터가 들어 있습니다. 마이크로컨트롤러(MCU)는 측정하고 조절하고 보고하며, 프로그래머의 관점에서 가장 중요하게는 여러분이 읽고 쓰는 메모리 그 자체입니다. 모듈이 순수한 EEPROM을 쓰는지 아니면 MCU가 EEPROM인 척하는지에 따라 코딩 방식, 전원을 껐다 켜면 일부 쓰기가 사라지는 이유, 비밀번호가 존재하는 이유 자체가 달라집니다. 이 페이지는 컨트롤러가 하는 일과 그 설계가 벤치에서 어떻게 나타나는지를 설명합니다.

MCU가 하는 일

작업세부 내용나타나는 형태
측정10–12비트 ADC로 초당 여러 번 온도(서미스터 또는 온칩 센서), Vcc, 레이저 바이어스, 모니터 PD 전류(Tx), 수신기 광전류(Rx)를 샘플링; 공장 교정값 적용DDM 값(파라미터)
APC(자동 광출력 제어)모니터 PD 전류를 공장 목표값과 비교해 드라이버의 바이어스 DAC를 조정일정한 Tx 광출력, 상승하는 바이어스(Tx 바이어스와 노화)
온도 보상룩업 테이블로 온도 전 구간에서 변조 전류를, PAM4에서는 DSP 설정도 조정안정적인 소광비
TEC 제어냉각형 모듈에서 레이저 온도를 유지하는 PID 루프; DWDM에서는 파장 고정기 피드백레이저 온도, TEC 전류 모니터
임계값과 플래그모든 모니터 값을 알람/경고 임계값과 비교하고, 래치 플래그를 설정하며, IntL을 구동임계값과 알람
저속 핀TX_DISABLE, RS0/RS1, LPMode, ResetL를 읽음; TX_FAULT, RX_LOS를 구동(또는 하드웨어 신호를 게이팅)핀 동작
2선 버스 슬레이브A0h/A2h(SFP)에서, 또는 페이지·뱅크가 있는 A0h(QSFP, CMIS)에서 응답메모리 맵(2선 인터페이스)
상태 머신CMIS 모듈 상태와 데이터 경로 상태; 애플리케이션 선택; 스퀠치CMIS
보호와 벤더 기능비밀번호, 쓰기 보호 영역, 저장 명령, 벤더 락 해제, 인증 서명쓰기 보호 유형
CDB/펌웨어 업데이트CMIS 모듈에서 새 펌웨어 이미지를 수신해 플래시에 기록펌웨어 버전 바이트

일반적으로 쓰이는 부품: 저가형 SFP/SFP+에는 플래시 몇 kB짜리 8비트 MCU(8051 계열); 100G 이상과 CMIS 모듈에는 32비트 Cortex-M 계열; 일부 벤더는 ADC, DAC, 2선 버스 슬레이브를 통합한 전용 트랜시버 컨트롤러 ASIC을 사용합니다.

메모리를 구현하는 두 가지 방식

설계맵 저장 방식프로그래밍에 미치는 영향
A0h는 개별 EEPROM(예: AT24C02 계열), A2h는 MCUA0h의 식별 정보는 호스트와 프로그래머가 직접 통신하는 진짜 시리얼 EEPROM이며, MCU는 진단만 담당A0h 쓰기는 일반 EEPROM 쓰기이므로 t_WR과 페이지 크기를 지켜야 함; 하드웨어 WP 핀이 이를 막을 수 있음(쓰기 보호 유형 1–3)
MCU 에뮬레이션 맵MCU가 모든 2선 버스 요청에 RAM에서 응답하고, 변경 사항을 내부 플래시/EEPROM에 반영하기도 하고 하지 않기도 함쓰기는 펌웨어가 정하는 대로 처리됨: 수락, 무시, 비밀번호로 제한, 저장 명령 이후에만 저장, 또는 다음 부팅 시 펌웨어 자체 사본으로 덮어쓰기(유형 4–5)
하이브리드벤더 블록은 EEPROM, 페이지와 비밀번호는 MCU바이트 범위별로 규칙이 섞여 있음

에뮬레이션된 맵은 벤치에서 겪는 대부분의 수수께끼를 설명해 줍니다: 펌웨어가 구현하지 않은 페이지에서 나오는 FFh, “성공”한 것처럼 보이다가 되돌아가는 쓰기, 한 구간에서는 읽기 전용이다가 바로 다음 구간에서는 자유로워지는 바이트, MCU가 샘플링하느라 바쁠 때 발생하는 클록 스트레칭입니다(EEPROM 읽기·쓰기 오류).

부팅과 t_init 구간

전원이 켜지면 MCU는 비휘발성 저장소에서 교정값과 식별 정보를 불러오고, ADC를 시작하고, APC를 목표값까지 구동한 뒤에야 2선 버스 슬레이브를 활성화하고 data-not-ready를 해제합니다. 이것이 규격이 호스트에게 응답을 기대하기 전에 허용하는 300 ms(SFP)에서 2 s(QSFP/CMIS)의 시간이며, 삽입 직후 읽기가 쓰레기값을 반환하는 이유입니다(호스트의 동작).

교정값이 저장되는 곳

ADC 원시 값은 공장이 테스트 스테이션에서 측정한 상수, 즉 모니터 PD 전류 대 실제 송신 광출력, 수신기 광전류 대 모듈 파장에서의 입력 광출력, 서미스터 곡선, 바이어스 DAC 스케일이 없으면 아무 의미가 없습니다. 내부 교정 모듈에서는 펌웨어가 이 값을 적용해 물리 단위로 보고하며, 외부 교정 모듈에서는 호스트가 적용할 수 있도록 상수가 A2h 56–91에 기록됩니다(교정). 일부 펌웨어가 이런 상수를 보관하는 벤더 영역을 덮어쓰면 터무니없는 DDM 값이 나오거나 APC 루프가 죽어 버리는데, 이는 부주의한 쓰기가 모듈을 “벽돌로 만드는” 전형적인 경로입니다(제조와 테스트).

보호 기능의 구현 방식

메커니즘구현 방식벤치에서 보이는 모습
비밀번호비밀번호 영역(SFP A2h 123–126, QSFP 123–126, CMIS 122–125)에 쓴 4바이트를 펌웨어가 저장된 값과 비교; 세션 동안 쓰기 잠금 해제올바른 값을 입력할 때까지 WRITE FAIL(비밀번호)
쓰기 보호 영역펌웨어가 읽기 전용으로 간주하는 범위(체크섬, 임계값, 교정값, 벤더 영역)에는 쓰기를 무시다시 읽으면 값이 그대로, 오류 없음
개별 EEPROM의 하드웨어 WP 핀모듈 내부에서 핀이 하이로 고정되거나 MCU가 구동프로그래머 보드가 이 핀을 구동해야 함
저장 명령쓰기는 일단 RAM에 저장; 벤더 고유의 시퀀스를 보내야 플래시에 반영시퀀스를 보내지 않으면 전원을 껐다 켤 때 되돌아감
펌웨어 미러링부팅 시 펌웨어가 자체 이미지로부터 맵을 다시 씀전원을 껐다 켤 때마다 변경 사항이 사라짐 — 벤더의 도구만이 이미지를 바꿀 수 있음
인증펌웨어가 시리얼 번호, 벤더 데이터, 비밀값의 해시로 서명을 계산해 벤더 바이트에 기록; 호스트가 이를 검증식별 정보를 수정해도 체크섬은 통과하지만 호스트가 여전히 거부함(벤더 락)

각 유형을 알아보고 프로그래밍하는 방법: 쓰기 보호 유형, EEPROM 재코딩.

펌웨어 업데이트

CMIS 모듈은 CDB 명령(다운로드 시작, 블록 쓰기, 완료, 실행, 커밋)을 통해 2선 버스로 펌웨어를 받을 수 있으며, 업데이트에 실패해도 되돌아갈 수 있도록 이미지 뱅크를 2개 두는 경우가 많습니다. SFF-8472/8636 모듈에는 표준 메커니즘이 없어 벤더가 벤더 바이트를 통해 자체 시퀀스를 사용합니다. 벤더는 펌웨어 수정으로 CMIS 상호운용성 문제를 해결하므로(CMIS 문제), 펌웨어 버전 바이트(CMIS 하위 페이지 39–40, 페이지 01h 128–129)는 식별 정보와 함께 기록해 둘 가치가 있습니다.

컨트롤러의 고장 유형

증상가능성 있는 원인
버스에서 모듈이 보이지 않지만 광학적으로는 정상MCU가 부팅되지 않음: 펌웨어 손상, 순간 전압 강하, 크리스탈 손상
DDM 값이 고정되거나 터무니없음ADC 또는 교정값 손상; 펌웨어 멈춤
APC가 유지해야 할 Tx 광출력이 흔들림모니터 PD 또는 ADC 결함, APC 비활성화
불규칙한 NACK, 느린 읽기MCU 과부하(샘플링 중); 빠른 프로그래머가 클록 스트레칭 한계를 초과
동작은 하지만 모든 쓰기가 되돌아감설계상의 펌웨어 미러링 — 고장이 아님
쓰기 이후 모듈이 죽음펌웨어 설정 또는 교정값 영역이 덮어써짐

CodingBox에서

CodingBox는 모듈을 펌웨어가 제시하는 그대로 다룹니다: 맵 유형을 감지하고, 저장 명령 방식과 미러링 방식 설계에 맞는 알려진 비밀번호와 프로그래밍 스크립트를 적용하며, 체크섬을 다시 계산하고, 모든 쓰기 전에 백업을 남겨 컨트롤러가 이상하게 반응하면 code database에서 복원할 수 있게 합니다. EEPROM editor는 규격이 읽기 전용 또는 벤더 전용으로 정의한 범위를 표시해 주므로, 펌웨어의 사적 영역에 쓰고 있다는 사실을 알 수 있습니다.


이 문서에서 부정확한 내용이나 오류를 발견하면 해당 부분을 선택하고 Ctrl+Enter를 눌러 해 주세요.