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ília | Endereços de dispositivo (escrita de 8 bits / 7 bits) | Organização | Seleção de página |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | A0h / 50h identidade, A2h / 51h diagnóstico | A0h: 256 bytes planos; A2h: 128 planos + metade superior paginada opcional | byte 127 do A2h, se o bit 4 do byte 64 do A0h estiver definido |
| XFP (INF-8077i) | A0h | 128 planos + “tabelas” superiores paginadas | byte 127 |
| QSFP+, QSFP28 (SFF-8636) | A0h | 128 planos + 128 superiores paginados | byte 127 |
| QSFP-DD, OSFP, SFP-DD… (CMIS) | A0h | 128 planos + bancos × páginas dos 128 superiores | byte 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ção | Sequência | Notas |
|---|---|---|
| Leitura aleatória | START · endereço do dispositivo+W · offset do byte · START · endereço do dispositivo+R · dados… · STOP | a leitura do dia a dia; o offset se autoincrementa |
| Leitura sequencial | continuar gerando clock após o primeiro byte | dá a volta em 255 → 0 dentro da visão atual de dispositivo/página |
| Leitura no endereço atual | START · endereço do dispositivo+R · dados | continua a partir do último offset — frágil se outro mestre interveio |
| Escrita de byte | START · addr+W · offset · dados · STOP | depois aguardar t_WR |
| Escrita de página | START · addr+W · offset · dados × n · STOP | limitada pelo dispositivo de memória (tipicamente 4–16 bytes) e não deve cruzar seu limite interno de página |
| Sondagem de confirmação | emitir 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ção | Clock |
|---|---|
| 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 / OSFP | até 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âmetro | Limite típico | Significado |
|---|---|---|
| t_init (SFP) | 300 ms | da energização / negação de TX_DISABLE até o módulo estar totalmente operacional e o barramento responder |
| t_init (QSFP) | 2 s | até a inicialização terminar e Data_Not_Ready ser limpo |
| MgmtInit (CMIS) | ≤ 2 s conforme as especificações de hardware | até o módulo sair de MgmtInit e a identidade ser válida |
| t_WR | 40 ms | ciclo de escrita máximo para uma gravação de byte ou sequencial; sondar ACK ou aguardar |
| t_clock_hold | 500 µs | esticamento máximo de clock pelo módulo |
| ton_IntL | 200 ms | do evento de flag até o IntL ser ativado |
| Dados prontos | bit 0 do byte 110 (SFP), bit 0 do byte 2 (QSFP) | não confie nos monitores enquanto estiver definido |
Armadilhas e suas soluções
| Sintoma | Causa no protocolo | Solução |
|---|---|---|
| Tudo FFh | sem ACK — endereço de dispositivo errado, página não implementada, módulo ausente | verificar A0h vs. A2h, bits de página, encaixe |
| Conteúdo errado | seleção de página/banco desatualizada | gravar 127 (e 126) antes de todo acesso à página superior |
| Bytes corrompidos | clock rápido demais, fios longos, disputa com um host sondando o DDM | reduzir a velocidade, cabo curto, ler na bancada, não em um switch em produção |
| Escrita “bem-sucedida”, mas a leitura retorna o valor antigo | gravação rápida demais, t_WR ignorado, limite de escrita de página cruzado | gravações de byte ou pequenos blocos com esperas; sondagem de ACK |
| Barramento trava, SCL ou SDA presos em nível baixo | transação interrompida | gerar nove pulsos de SCL, depois STOP; desligar e religar o módulo |
| Funciona no switch, mas não responde no programador | o módulo espera o LPMode liberado ou um pino de seleção | respeitar 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).