CodingBox 문서

2선식 인터페이스: 주소, 페이지, 뱅크, 타이밍

모든 플러거블 모듈은 동일한 두 가닥의 선 — 시리얼 클록과 시리얼 데이터 라인 — 을 통해 관리되며, 규격에서 2선 인터페이스(TWI)라고 부르는 I²C 프로토콜을 사용합니다. SFP, QSFP, XFP, CMIS 모듈 사이에서 다른 점은 그 위에 주소 공간이 어떻게 구성되는가입니다: 별도의 디바이스, 페이지 방식 메모리, 또는 페이지의 뱅크입니다. 이 자료는 프로그래머, 호스트, CodingBox가 모두 의존하는 프로토콜 수준의 시각입니다.

물리 계층

  • 오픈 드레인 라인 두 개, SCLSDA는 호스트 쪽에서 풀업됨; 3.3 V 로직.
  • 모듈은 항상 슬레이브입니다; 호스트(또는 프로그래머)가 마스터로서 클록을 생성합니다.
  • 모듈은 마이크로컨트롤러가 데이터를 가져오는 동안 클록을 스트레치(SCL을 로우로 유지)할 수 있습니다 — 규격은 최대 500 µs까지 허용합니다.
  • 존재 여부와 선택은 버스 트랜잭션이 아니라 별도의 핀으로 이루어집니다: MOD_ABS(SFP), ModPrsL과 ModSelL(QSFP 계열과 CMIS). ModSelL 덕분에 여러 모듈이 버스 하나를 공유할 수 있습니다; SFP에는 선택 핀이 없으므로 호스트는 케이지마다 별도의 버스나 멀티플렉서를 둡니다.

규격별 주소 공간

계열디바이스 주소(8비트 쓰기/7비트)구성페이지 선택
SFP, SFP+, SFP28(SFF-8472)A0h/50h 식별 정보, A2h/51h 진단A0h: 플랫 바이트 256개; A2h: 플랫 128개 + 선택적 페이지 방식 상위 절반A2h 바이트 127, A0h 바이트 64 비트 4가 설정된 경우
XFP(INF-8077i)A0h플랫 128개 + 페이지 방식 상위 “테이블”바이트 127
QSFP+, QSFP28(SFF-8636)A0h플랫 128개 + 페이지 방식 상위 128개바이트 127
QSFP-DD, OSFP, SFP-DD…(CMIS)A0h플랫 128개 + 상위 128개의 뱅크 × 페이지바이트 126 뱅크, 바이트 127 페이지

따라서 SFP는 기본적으로 두 개의 디바이스 주소가 필요하고 페이징은 필요 없습니다; XFP 이후로는 모두 하나의 주소와 페이징을 사용합니다. 일부 레거시 SFP는 A0h 바이트 92 비트 2(“address change required”)를 설정해 두며, A2h가 응답하기 전에 벤더 시퀀스가 필요합니다.

트랜잭션

동작시퀀스비고
랜덤 읽기START · 디바이스 addr+W · 바이트 오프셋 · START · 디바이스 addr+R · 데이터… · STOP일상적인 읽기; 오프셋이 자동 증가함
순차 읽기첫 바이트 이후에도 클록을 계속 진행현재 디바이스/페이지 범위 안에서 255 → 0으로 래핑됨
현재 주소 읽기START · 디바이스 addr+R · 데이터마지막 오프셋에서 이어짐 — 다른 마스터가 개입하면 불안정함
바이트 쓰기START · addr+W · 오프셋 · 데이터 · STOP이후 t_WR 만큼 대기
페이지 쓰기START · addr+W · 오프셋 · 데이터 × n · STOP메모리 디바이스에 따라 제한됨(보통 4–16바이트)이며 내부 페이지 경계를 넘으면 안 됨
Acknowledge 폴링모듈이 ACK할 때까지 START + addr+W를 반복쓰기 사이클이 끝났는지 아는 가장 빠른 방법

상위 페이지를 읽는 것은 항상 두 번의 트랜잭션입니다: 페이지 선택 바이트(127, CMIS 뱅크의 경우 126도)를 쓴 다음 128–255를 읽습니다. 이 선택은 바뀔 때까지 유지되며, 그래서 오래된 페이지 선택값이 “잘못된 내용” 읽기의 전형적인 원인이 됩니다.

속도

규격클록
SFF-8472(SFP)기본 100 kHz; 일부 모듈은 400 kHz까지 허용
INF-8077i(XFP)100 kHz
SFF-8636 rev 2.x(QSFP)최대 400 kHz
CMIS/QSFP-DD/OSFP 하드웨어 규격최대 400 kHz

더 느린 속도는 항상 허용됩니다. 쓰기의 경우 대부분의 프로그래머는 공칭 클록보다 훨씬 낮은 — 수 kHz대까지 — 속도로 낮추는데, EEPROM 쓰기 사이클과 마이크로컨트롤러가 중개하는 모듈이 읽기보다 타이밍에 훨씬 민감하기 때문입니다.

중요한 타이밍

매개변수일반적인 한계의미
t_init(SFP)300 ms전원 인가/TX_DISABLE 해제부터 모듈이 완전히 동작하고 버스가 응답할 때까지
t_init(QSFP)2 s초기화가 끝나고 Data_Not_Ready가 해제될 때까지
MgmtInit(CMIS)하드웨어 규격 기준 ≤ 2 s모듈이 MgmtInit을 벗어나 식별 정보가 유효해질 때까지
t_WR40 ms바이트 또는 순차 쓰기의 최대 쓰기 사이클; ACK를 폴링하거나 대기
t_clock_hold500 µs모듈이 클록을 스트레치할 수 있는 최댓값
ton_IntL200 ms플래그 이벤트부터 IntL 활성까지
Data ready바이트 110 비트 0(SFP), 바이트 2 비트 0(QSFP)설정되어 있는 동안은 모니터 값을 신뢰하지 말 것

함정과 해결책

증상프로토콜 원인해결책
전부 FFhACK 없음 — 잘못된 디바이스 주소, 미구현 페이지, 모듈 없음A0h 대 A2h, 페이지 비트, 장착 상태 확인
잘못된 내용오래된 페이지/뱅크 선택값상위 페이지에 접근할 때마다 127(과 126)을 쓸 것
손상된 바이트클록이 너무 빠름, 긴 리드선, DDM을 폴링하는 호스트와의 충돌속도를 낮출 것, 케이블을 짧게 할 것, 운영 중인 스위치가 아니라 벤치에서 읽을 것
쓰기는 “성공”하지만 예전 값이 읽힘너무 빠르게 씀, t_WR 무시, 페이지 쓰기 경계를 넘음대기를 두고 바이트 단위나 작은 단위로 쓸 것; ACK 폴링
버스가 멈춤, SCL 또는 SDA가 로우에 고정트랜잭션 중단SCL 펄스 9개를 내보낸 뒤 STOP; 모듈 전원을 껐다 켤 것
스위치에서는 되는데 프로그래머에서는 안 됨모듈이 LPMode 해제나 선택 핀을 기대함ModSelL/LPMode를 지킬 것; t_init을 확보할 것

이에 대한 벤치 측 진단은 EEPROM 읽기·쓰기 오류에 정리되어 있습니다; 버스 위에 얹히는 보호 방식(비밀번호, 하드웨어 WP, 저장 명령)은 쓰기 보호 유형에 있습니다.

운영 중인 시스템에서 읽기

호스트는 몇 초마다 DDM을 폴링하고 플래그에 반응합니다; 같은 버스에 두 번째 마스터(프로그래머 클립, 인밴드 도구)가 있으면 충돌, 잘못된 주소로의 쓰기, 최악의 경우 페이지 쓰기가 엉뚱한 오프셋에 떨어져 모듈이 벽돌이 되는 사고까지 일어납니다. 꼭 필요하다면 현장에서 읽으십시오; 쓰기는 벤치에서 하십시오.

CodingBox에서

CodingBox는 폼 팩터별 주소 모델을 자동으로 처리하며 — SFP는 A0h/A2h, QSFP와 XFP는 페이징, CMIS는 뱅크+페이지 — 프로그래머 프로필별로 버스 속도와 쓰기 타이밍을 설정할 수 있게 하고, 각 쓰기를 다시 읽어 검증합니다(모듈 쓰기).


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