CodingBox Documentação

Interface de dois fios: endereços, páginas, bancos e temporização

Todo módulo conectável é gerenciado pelos mesmos dois fios — um clock serial e uma linha de dados serial — usando o protocolo I²C que as especificações chamam de interface de dois fios (TWI). O que difere entre módulos SFP, QSFP, XFP e CMIS é como o espaço de endereços é organizado sobre esse protocolo: dispositivos separados, memória paginada ou bancos de páginas. Este material é a visão em nível de protocolo em que programadores, hosts e o CodingBox se baseiam.

Camada física

  • Duas linhas de dreno aberto, SCL e SDA, com pull-up no lado do host; lógica de 3,3 V.
  • O módulo é sempre o escravo; o host (ou o programador) é o mestre e gera o clock.
  • Os módulos podem esticar o clock (manter SCL em nível baixo) enquanto um microcontrolador busca os dados — as especificações permitem até 500 µs.
  • Presença e seleção são pinos separados, não transações de barramento: MOD_ABS (SFP), ModPrsL e ModSelL (classe QSFP e CMIS). O ModSelL permite que vários módulos compartilhem um barramento; o SFP não tem pino de seleção, então os hosts dão a cada gaiola (cage) seu próprio barramento ou um multiplexador.

Espaço de endereços por especificação

FamíliaEndereços de dispositivo (escrita de 8 bits / 7 bits)OrganizaçãoSeleção de página
SFP, SFP+, SFP28 (SFF-8472)A0h / 50h identidade, A2h / 51h diagnósticoA0h: 256 bytes planos; A2h: 128 planos + metade superior paginada opcionalbyte 127 do A2h, se o bit 4 do byte 64 do A0h estiver definido
XFP (INF-8077i)A0h128 planos + “tabelas” superiores paginadasbyte 127
QSFP+, QSFP28 (SFF-8636)A0h128 planos + 128 superiores paginadosbyte 127
QSFP-DD, OSFP, SFP-DD… (CMIS)A0h128 planos + bancos × páginas dos 128 superioresbyte 126 banco, byte 127 página

Um SFP, portanto, precisa de dois endereços de dispositivo e nenhuma paginação para o básico; tudo depois do XFP usa um endereço e paginação. Alguns SFPs legados definem o bit 2 do byte 92 do A0h (“mudança de endereço necessária”) e exigem uma sequência do fabricante antes que o A2h responda.

Transações

OperaçãoSequênciaNotas
Leitura aleatóriaSTART · endereço do dispositivo+W · offset do byte · START · endereço do dispositivo+R · dados… · STOPa leitura do dia a dia; o offset se autoincrementa
Leitura sequencialcontinuar gerando clock após o primeiro bytedá a volta em 255 → 0 dentro da visão atual de dispositivo/página
Leitura no endereço atualSTART · endereço do dispositivo+R · dadoscontinua a partir do último offset — frágil se outro mestre interveio
Escrita de byteSTART · addr+W · offset · dados · STOPdepois aguardar t_WR
Escrita de páginaSTART · addr+W · offset · dados × n · STOPlimitada pelo dispositivo de memória (tipicamente 4–16 bytes) e não deve cruzar seu limite interno de página
Sondagem de confirmaçãoemitir START + addr+W até o módulo confirmar (ACK)a forma mais rápida de saber que um ciclo de escrita terminou

Ler uma página superior sempre são duas transações: gravar o byte de seleção de página (127, e 126 para bancos CMIS), depois ler 128–255. A seleção persiste até ser alterada, por isso uma seleção de página desatualizada é uma causa clássica de leituras com “conteúdo errado”.

Velocidade

EspecificaçãoClock
SFF-8472 (SFP)100 kHz de base; alguns módulos toleram 400 kHz
INF-8077i (XFP)100 kHz
SFF-8636 rev 2.x (QSFP)até 400 kHz
Especificações de hardware CMIS / QSFP-DD / OSFPaté 400 kHz

Mais lento é sempre permitido. Para gravações, a maioria dos programadores reduz bem abaixo do clock nominal — para a faixa baixa de quilohertz — porque os ciclos de escrita da EEPROM e os módulos mediados por microcontrolador são muito mais sensíveis à temporização do que as leituras.

Temporização que importa

ParâmetroLimite típicoSignificado
t_init (SFP)300 msda energização / negação de TX_DISABLE até o módulo estar totalmente operacional e o barramento responder
t_init (QSFP)2 saté a inicialização terminar e Data_Not_Ready ser limpo
MgmtInit (CMIS)≤ 2 s conforme as especificações de hardwareaté o módulo sair de MgmtInit e a identidade ser válida
t_WR40 msciclo de escrita máximo para uma gravação de byte ou sequencial; sondar ACK ou aguardar
t_clock_hold500 µsesticamento máximo de clock pelo módulo
ton_IntL200 msdo evento de flag até o IntL ser ativado
Dados prontosbit 0 do byte 110 (SFP), bit 0 do byte 2 (QSFP)não confie nos monitores enquanto estiver definido

Armadilhas e suas soluções

SintomaCausa no protocoloSolução
Tudo FFhsem ACK — endereço de dispositivo errado, página não implementada, módulo ausenteverificar A0h vs. A2h, bits de página, encaixe
Conteúdo erradoseleção de página/banco desatualizadagravar 127 (e 126) antes de todo acesso à página superior
Bytes corrompidosclock rápido demais, fios longos, disputa com um host sondando o DDMreduzir a velocidade, cabo curto, ler na bancada, não em um switch em produção
Escrita “bem-sucedida”, mas a leitura retorna o valor antigogravação rápida demais, t_WR ignorado, limite de escrita de página cruzadogravações de byte ou pequenos blocos com esperas; sondagem de ACK
Barramento trava, SCL ou SDA presos em nível baixotransação interrompidagerar nove pulsos de SCL, depois STOP; desligar e religar o módulo
Funciona no switch, mas não responde no programadoro módulo espera o LPMode liberado ou um pino de seleçãorespeitar ModSelL/LPMode; aguardar o t_init

Os diagnósticos de bancada para esses casos estão reunidos em Erros de leitura e escrita de EEPROM; os esquemas de proteção que operam sobre o barramento (senhas, WP de hardware, comandos de salvar) estão em Tipos de proteção contra gravação.

Leitura em um sistema em produção

Um host sonda o DDM a cada poucos segundos e reage às flags; um segundo mestre no mesmo barramento (um clipe de programador, uma ferramenta in-band) causa colisões, gravações com endereçamento errado e, na pior das hipóteses, um módulo inutilizado por uma escrita de página que cai no offset errado. Leia no local se for necessário; grave na bancada.

No CodingBox

O CodingBox trata automaticamente o modelo de endereços por fator de forma — A0h/A2h para SFP, paginação para QSFP e XFP, banco + página para CMIS —, permite definir a velocidade do barramento e a temporização de escrita por perfil de programador, e verifica cada gravação lendo de volta (Gravando um módulo).


Se você encontrar uma imprecisão ou um erro neste artigo, selecione o trecho correspondente e pressione Ctrl+Enter para .