Você Nem Sempre Precisa de Resistores de Pull-up nas Linhas SPI

Zachariah Peterson
|  Criada: Outubro 19, 2023  |  Atualizada: Novembro 11, 2024
resistores de pull-up SPI

Existe um equívoco popular de que resistores de pull-up são necessários ou indispensáveis nas linhas de um barramento SPI. Estou aqui para dizer inequivocamente que resistores de pull-up não são necessários em um barramento SPI para realizar sua função básica de enviar e receber dados digitais.

O buffer em uma interface SPI possui uma topologia push-pull que (em um nível alto) envolve MOSFETs de comutação de lado alto e lado baixo, formando essencialmente um inversor CMOS. Como veremos neste artigo, a presença de resistores de pull-up não tem impacto na funcionalidade de um barramento push-pull.

Isso dito, existem casos em que faz sentido colocar um resistor de pull-up em um barramento push-pull, e em algumas folhas de dados um fabricante de componentes irá recomendá-lo ou exigí-lo. Vamos olhar para essas situações e como isso afeta o comportamento do seu sistema. Embora possam existir soluções mais elaboradas que eliminam a necessidade de resistores de pull-up nessas situações, a colocação de um resistor de pull-up pode ser uma solução que mantém seu design simples e oferece um seguro de que a interface funcionará corretamente.

Como um Barramento SPI Funciona com Resistores de Pull-Up

Vamos dar uma olhada no modelo típico de um buffer em uma interface SPI. Todos os buffers SPI possuem uma topologia push-pull que consiste em comutação de alta e baixa tensão que transmite um sinal para o barramento, e cada sinal no barramento SPI (CS, MOSI, MISO e SCLK) terá essa topologia. Um exemplo desse circuito é mostrado abaixo. Note que um buffer SPI real não é tão simples quanto dois MOSFETs, mas a mesma ideia se aplica em geral.

Inversor CMOS como um driver SPI. A saída se conecta a um traço (representado como elementos concentrados) e um circuito de carga (modelo equivalente RC).

Unparalleled Schematic Capture

Easily design schematics of any complexity.

A razão inteira para usar essa topologia é para as capacitâncias de descarga no circuito do buffer fornecerem taxas de transição de borda razoavelmente rápidas na saída, que serão muito menores do que o período do relógio no barramento. Isso é o que permite taxas de dados mais rápidas do que um protocolo de dreno aberto (por exemplo, I2C).

Um barramento SPI que inclui resistores de pull-up é essencialmente um driver inversor CMOS com um resistor em paralelo com o FET de alta no buffer de saída. Agora, vamos ver o que acontece durante cada estado de comutação no driver e podemos ver o que acontece no barramento.

Saída de Lógica ALTA

Durante o estado de saída de lógica ALTA, o NMOS está DESLIGADO e o PMOS está LIGADO. VDDIO agora está fornecendo corrente para o traço conectado e carga. A capacitância no traço e na carga então começa a carregar até que a tensão vista na carga corresponda a VDDIO. Aqui, a resistência ON do PMOS é da ordem de mOhm, enquanto o resistor de pull-up é da ordem de 1 a 10 kOhms. Obviamente, o resistor de pull-up é tão grande que é essencialmente curto-circuitado pelo PMOS no estado de saída de lógica ALTA.

Como toda a corrente flui através do PMOS no estado de lógica ALTA, independentemente da presença do resistor de pull-up, as características de comutação serão inalteradas.

Easy, Powerful, Modern

The world’s most trusted PCB design system.

Saída de Lógica BAIXA

Agora, vamos considerar que o circuito mudou para o estado de saída lógica BAIXA. Neste estado, o NMOS está LIGADO e o PMOS está DESLIGADO, então o traço e a capacitância de carga estão descarregando através do NMOS para a rede GND. Como o PMOS está desligado, ele aparece como uma resistência muito alta (ordem de MOhms) que é muito maior do que o valor do resistor de pull-up (1 a 10 kOhms).

Como o pull-up é o resistor menor neste caso, ele permitirá um valor de corrente de VDDIO/R(pu) fluir para o NMOS. Para um resistor de pull-up de 1 a 10 kOhm e VDDIO = 3.3 V, a corrente de fuga para o NMOS seria de 0.33 a 3.3 mA. Isso é muito menor do que a corrente típica do SPI de ~50 mA, então, novamente, não notaremos quaisquer efeitos nas características de comutação. O tempo de queda no barramento será limitado pelas capacitâncias de carga e de traço, a impedância resistiva de saída do circuito de buffer e a resistência em estado ligado do NMOS.

Se a Comutação não é Afetada, Por que Usar um Pull-Up?

Claramente, a colocação de um resistor de pull-up em uma linha SPI não afeta sua capacidade de transmitir um sinal para o barramento. Portanto, o pull-up deve estar desempenhando alguma outra função que não está relacionada à transmissão de dados, caso contrário, o resistor não seria utilizado.

As razões para usar um resistor de pull-up em uma ou mais linhas em uma interface SPI variam dependendo da situação proposta. Algumas situações em que resistores de pull-up são usados incluem:

Easy, Powerful, Modern

The world’s most trusted PCB design system.

  • Colocação na linha CS de um dispositivo periférico
  • Colocação na linha MISO para um dispositivo host
  • Colocação na linha MOSI para um dispositivo periférico
  • Colocação em todas as linhas do barramento perto dos pinos de saída

A razão declarada para a colocação em qualquer uma dessas situações é definir o estado lógico em um dos componentes periféricos no barramento. A recomendação mais comum é colocar um resistor de pull-up no pino CS de um periférico para puxá-lo para alto. Se o periférico tem um pino de habilitação ativo em baixo, isso sempre puxará o pino para alto, a menos que o lado do driver do pull defina o pino como baixo.

Um exemplo de tal uso é mostrado abaixo. No layout da PCB, o resistor de pull-up seria colocado próximo ao pino CS deste periférico.

Colocação típica de um resistor de pull-up no pino CS de um barramento SPI.

Por que isso seria usado? A razão declarada é que durante a inicialização do sistema, o pino CS poderia estar flutuando em qualquer estado e isso criaria um risco de que ruídos possam corromper dados no barramento. Além disso, se o dispositivo hospedeiro iniciar antes do periférico e o pino CS se tornar habilitado involuntariamente, o hospedeiro poderia começar a manipular dados no periférico. Isso é às vezes citado como uma razão para colocar um pull-up em periféricos de memória.

Até o momento, não consigo encontrar uma razão convincente para colocar um resistor de pull-up na linha SCLK (clock). A razão é que o circuito lógico receptor não será ativado se outras condições (especificamente o estado da linha CS) não forem atendidas, independentemente da presença de um sinal de clock. Algumas notas de aplicação e folhas de dados recomendam os resistores de pull-up para MISO ou MOSI por várias razões, mas testar se isso funciona é simples e o resistor sempre pode ser dessoldado ao trabalhar no seu protótipo.

O Sequenciamento de Energia é uma Solução Mais Elaborada

Por ser frequentemente citado como um problema com o estado do pino CS durante a inicialização do sistema, acredito que a sequência de energia entre periféricos e o host do sistema seria a melhor abordagem para prevenir esse problema durante a inicialização. Em sistemas menores, pode não haver espaço no dispositivo disponível para múltiplos reguladores ou para um sequenciador de energia que possa passar a energia necessária. É uma solução mais simples colocar um resistor de pull-up, mas entenda que esses resistores de pull-up não são necessários para que a interface funcione corretamente.

Seja para construir eletrônicos de potência confiáveis ou sistemas digitais avançados, use o conjunto completo de recursos de design de PCB e ferramentas CAD de classe mundial em Altium Designer. Para implementar a colaboração no ambiente interdisciplinar de hoje, empresas inovadoras estão usando a plataforma Altium 365 para compartilhar facilmente dados de design e colocar projetos em fabricação.

Apenas arranhamos a superfície do que é possível com Altium Designer no Altium 365. Comece seu teste gratuito do Altium Designer + Altium 365 hoje.

Sobre o autor

Sobre o autor

Zachariah Peterson tem vasta experiência técnica na área acadêmica e na indústria. Atualmente, presta serviços de pesquisa, projeto e marketing para empresas do setor eletrônico. Antes de trabalhar na indústria de PCB, lecionou na Portland State University e conduziu pesquisas sobre teoria, materiais e estabilidade de laser aleatório. A experiência de Peterson em pesquisa científica abrange assuntos relacionados aos lasers de nanopartículas, dispositivos semicondutores eletrônicos e optoeletrônicos, sensores ambientais e padrões estocásticos. Seu trabalho foi publicado em mais de uma dezena de jornais avaliados por colegas e atas de conferência, além disso, escreveu mais de dois mil artigos técnicos sobre projeto de PCB para diversas empresas. É membro da IEEE Photonics Society, da IEEE Electronics Packaging Society, da American Physical Society e da Printed Circuit Engineering Association (PCEA). Anteriormente, atuou como membro com direito a voto no Comitê Consultivo Técnico de Computação Quântica do INCITS, onde trabalhou em padrões técnicos para eletrônica quântica e, no momento, atua no grupo de trabalho P3186 do IEEE, que tem como foco a interface de portas que representam sinais fotônicos com simuladores de circuitos da classe SPICE.

Recursos relacionados

Documentação técnica relacionada

Retornar a página inicial
Thank you, you are now subscribed to updates.