Conexões de barramento SPI - em loop ou não em loop?


9

Eu tenho uma pergunta sobre a conexão física de um barramento SPI.

Eu tenho um mestre SPI (um dispositivo PIC32) e vários escravos (neste caso, dispositivos PIC16). Estou escrevendo apenas para os escravos, e o protocolo cuida de qual deles faz o que quando, para que não haja sinais MISO ou SS com os quais se preocupar e estou apenas paralelizando os dados e as linhas de relógio com todos os escravos. O comprimento total do ônibus não passa de um par de pés (digamos 60cm) e estou executando o SCK a 8MHz.

Agora, o posicionamento físico dos dispositivos escravos (que na verdade são nós de interface em outras placas) é tal que o barramento SPI retorna ao mestre de forma que seja possível conectar as duas extremidades de cada loop ao MOSI e SCK, respectivamente.

O diagrama a seguir mostra o que quero dizer - estou falando das conexões pontilhadas em vermelho - e a pergunta é: é bom fazer isso ou não?

Barramento SPI

Eu tenho poder e terra fazendo uma jornada semelhante, e isso é obviamente - e comprovadamente - útil porque minimiza a queda de tensão causada pelos escravos. No entanto, não tenho idéia se é bom ou ruim fazer o mesmo com essas linhas de sinal. Em vez disso, devo permitir algum tipo de terminação - resistores à terra (?) - ou talvez resistores em série para suprimir reflexos, ou o quê?

Eu tentei com e sem conectar os pontos, por assim dizer, e não há diferença funcional nem mudanças que eu possa ver no escopo, mas talvez se fosse um pouco mais de 60cm ou um pouco mais rápido que 8Mhz, Eu teria um problema? Por isso, estou procurando conselhos sobre o que fazer para me manter longe de problemas se algo mudar.

Embora essa pergunta esteja me incomodando particularmente para um barramento SPI de 60 cm a 8Mhz, existem princípios gerais para outras situações? Talvez as flexões em um barramento I2c devam ser posicionadas de maneira diferente?

Quaisquer links para material de leitura adequado também serão bem-vindos - não encontrei nada que cubra esta questão específica.


Eu não sou completamente certo o problema que você está tentando resolver com essa conexão
PlasmaHH

@PlasmaHH Bem, essa é realmente a minha pergunta - não tenho problema para resolver, mas tenho essa opção. Sei que ajuda nas linhas de energia, não sei se ajuda nas linhas de sinal. É uma pergunta estúpida? Talvez eu esteja pensando demais.
Roger Rowland

Eu acrescentaria que, idealmente, um PCB de 4 camadas e aviões Vdd e Vss dedicados seriam uma boa idéia aqui por várias razões, juntamente com tampas de desvio dedicadas muito próximas a cada dispositivo.
Rdtsc

11
IMO eu faria a conexão que você propôs em vermelho e livrar-se da conexão do escravo 3 a slave 4
lucas92

Respostas:


9

Loop de volta? NÃO. Se a linha for longa o suficiente para precisar de terminação (mais do que o tempo de execução * c / 10 ou mais), conduza-a com força suficiente para finalizá-la adequadamente e corresponda razoavelmente bem à linha e à finalização. Se a linha for curta o suficiente para não precisar de terminação, ela não precisará da condutividade 'extra' que você parece estar procurando com a conexão em loop.

Um resistor em série? NÃO. Esse estilo de terminação de origem-fim funciona apenas para um único receptor de ponto no final da linha. Nos pontos anteriores da linha, você obtém a pior forma de onda possível para seus receptores, que é um passo para a meia tensão, seguido de uma pausa, seguido de outro passo para a tensão máxima.


Ok, obrigado - você pode explicar o que você quer dizer com "dirija com força suficiente" ? Você quer dizer não direto do PIC, mas via MOSFET ou algo assim? Além disso, para "finalizá-lo corretamente" , você quer dizer resistores à terra? Entendo o ponto em que o tempo aumenta, em vez da frequência do relógio, determinando a necessidade de rescisão. Você pode mostrar o cálculo completo da regra de ouro? Aumente o tempo em que unidades? O que é c/10?
Roger Rowland

@RogerRowland 'forte o suficiente' para que ele desenvolva um bom nível lógico para a carga da terminação. Uma saída de uC pode ser forte o suficiente, pode não, depende da terminação e da força da unidade. Use um buffer ou dois em paralelo se não houver corrente suficiente na unidade. 'Corretamente' significa impedância resistiva de derivação. Seja para o aterramento, o trilho intermediário ou o acoplamento CA, depende do sistema. Se você indicar o driver com três estados, será necessário aterrar para manter os níveis lógicos válidos. Caso contrário, a terminação no meio do trilho carrega menos o motorista.
Neil_UK

@RogerRowland O tempo de subida em segundos, c velocidade da luz em m / segundo, portanto o tempo de subida * c em metros, / 10 é um pouco ondulado para 'uma fração insignificante do tempo de subida presente de forma simultânea na linha de sinal'
Neil_UK

Mais uma vez obrigado Neil, isso é realmente útil! Acho que me beneficiaria realizando algumas experiências para garantir que o que você disse afunda - talvez um fim de semana chuvoso seja bem passado.
Roger Rowland

3

O problema que vejo com a topologia de loop é que é difícil colocar os terminadores corretamente para suprimir as reflexões. isso não importa muito em 8MHz, mas pode ter se tornado um problema em frequências mais altas ou com linhas mais longas.

O único caso que vejo onde as linhas pontilhadas podem ajudar é quando o atraso de propagação do mestre para SLAVE 6era inaceitável. Nesse caso, você conectaria as linhas pontilhadas, mas interromperia o loop em algum lugar no meio (digamos, entre SLAVE 3e SLAVE 4) e terminaria cada ramificação independentemente.


2

Com sinais rápidos ou longas filas, a reflexão do sinal se torna um problema. Nesses casos, você deve finalizar a linha corretamente, colocando um resistor conectando o final da linha e o terra (não o início da linha). A terminação faz a linha "parecer eletricamente infinita", para que o sinal não volte. Às vezes, a terminação também precisa de elementos LC para combater a impedância reativa.

No entanto, para o seu caso, a terminação não é necessária (linha curta para a velocidade do sinal, supondo que você não esteja operando em um ambiente eletricamente barulhento). É por isso que você não vê diferença. Também é uma prática ruim de design fazer um loop no seu sinal. Isso faz com que o sinal entre em loop, introduzindo ruído no seu circuito (e loops nas duas direções). Também facilita a captura de ruído de RF em suas linhas.

Além disso, geralmente também é ruim fazer um loop no terra e nas linhas de energia. O ruído de comutação digital e os loops de terra também existem, e podem ter um impacto dramático nos circuitos analógicos. Se necessário, você pode usar os garfos em Y (sem conexão na extremidade oposta) para reduzir a queda de tensão. Se isso não for suficiente, use traços mais amplos (traço maior -> menos resistência -> menos queda de tensão).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.