O SPI é significativamente mais rápido do que o bit-bang?

8

Eu tenho um projeto baseado em uma foto 18f4550. Para gravar em um registrador de turno '595, existe uma vantagem distinta no uso de spi sobre pinos io regulares? Ouvi dizer que o spi é mais rápido, mas não sei como. Ele usa um relógio diferente e mais rápido que o resto do chip ou é simplesmente mais eficiente? Eu posso dividir um byte através de pinos io regulares em um número muito pequeno de instruções. O spi usa menos poder de processamento? Estarei mudando com bastante frequência durante cálculos bastante intensos, por isso quero o maior número possível de ciclos dedicados ao meu processo e não mudando.

Meu principal motivo para não querer usar o spi é que meu layout atual tornaria um pouco mais difícil o acesso aos pinos necessários, porque eu já estou usando alguns deles para outras coisas e teria que embaralhar as coisas. Eu queria descobrir quais são os benefícios antes de começar a rasgar as coisas e movê-las.

captncraig
fonte
5
Você pode executar o SPI batendo em bits.
starblue

Respostas:

17

Supondo que você esteja comparando um "mecanismo" serial periférico ou síncrono spi no micro para gerar a mesma sequência via "bang-bit", sim, ele tende a ser um pouco mais rápido, mas o mais importante é que o processador pode fornecer um byte inteiro para o periférico para enviar e depois fazer outras coisas enquanto é transmitido. No caso de troca de bits, o processador tende a ser amarrado durante a transmissão (embora, como o micro tenda a ser o principal e a maioria dos periféricos seja totalmente estático, você provavelmente pode tolerar uma pausa no meio do byte para atender a uma interrupção ou até mesmo pesquisar coisas - ADC serial com clock de interface e tarefas com intervalo de amostra sendo exemplos notáveis ​​de exceções).

Em MCUs mais capazes, pode até ser possível programar um controlador DMA para executar uma transferência de vários bytes da memória através do mecanismo SPI sem mais atenção do processador, especialmente se apenas os dados em uma direção forem importantes.

Mas muitos projetos de microcontroladores acabam altamente otimizados para suas tarefas; se você pode poupar os ciclos e tolerar a redução de velocidade, complica seu software para poder usar os GPIOs que tornam o layout físico mais limpo, de maneira alguma uma escolha incomum.

Chris Stratton
fonte
Sim isso ^. Como menciona Chris, a maior vantagem do uso de periféricos de hardware é que você pode transferir um byte de dados de um fluxo para o periférico e ser notificado por meio de uma interrupção se terminar de retirá-lo e pronto para outro byte. Isso libera o uso da CPU para outras coisas enquanto o byte está sendo alterado - o que pode ser uma vida útil nos ciclos da máquina, dada a taxa de transmissão desses protocolos seriais.
Jon G
3
Não é uma vida para SPI. Se você está falando de velocidade, pode estar executando o SPI em 10MHz, que são apenas 10 instruções PIC em velocidade máxima. Isso dificilmente é uma idade. Tempo suficiente para preparar seu próximo byte. Mal é tempo suficiente para reparar uma interrupção.
Rocketmagnet
2
Pode ser justo dizer que muito depende da taxa de transmissão pretendida / necessária, que não foi declarada. No entanto, como indiquei, se o micro for o mestre, pode ser livre o atraso no envio do próximo byte, desde que o aplicativo possa tolerar a irregularidade / redução na taxa de transferência.
Chris Stratton
1
@Rocketmagnet, estou corrigido. O SPI é muito mais rápido do que eu pensava - acho que o agrupei com protocolos seriais mais lentos, como o UART (onde 9600 baud é ~ 10 kHz).
Jon G
1
Observe também que o SPI master é relativamente fácil de se livrar. O escravo SPI pode ser um pouco mais difícil, pois as transições de seleção de chip e relógio precisam ser cronometradas e manipuladas especificamente (como um pino de interrupção externo). Uso o estilo SPI master bit bang frequentemente em meus projetos, especialmente se eu não precisar de alto desempenho, mas quiser uma placa limpa (também boa para a gravação em casa). Observe também que é prática comum fazer o oposto: transferir dados para registradores de mudança (HC595 etc.) usando SPI e um GPIO (pino de trava).
8111 Hans
10

Vantagens do bit-bang:

  • Controle absoluto sobre o protocolo.
  • Se o tempo para executar instruções no microcontrolador for mais rápido que a taxa de transmissão do SPI, poderá ser mais rápido, mas isso é improvável. Seria necessária uma taxa de transmissão SPI de velocidade muito muito baixa com um microcontrolador de velocidade relativamente alta.
  • Pode ter uma latência menor que uma interrupção do SPI.
  • Escolha de pinos.

Desvantagens do bit-bang:

  • Requer muito mais código para lidar com - Cronometragem de taxa de bits - Amostragem confiável de bits recebidos - Limites do quadro de processo * Cada segmento de código acima consome tempo que poderia ser gasto executando outro código.

Vantagens do SPI:

  • Registrar configurar alças tempo de transmissão, amostragem de bits recebidos e contagem de quadros de processamento
  • A maioria dos microcontroladores com SPI possui um vetor de interrupção dedicado para cada periférico SPI (verifique duas vezes seu micro!)
  • Uma vez configurado, é necessário apenas verificar se o buffer SPI TX / RX está vazio / cheio e gravar / ler um byte.
  • Se o DMA estiver disponível, o SPI pode transmitir grandes buffers de dados contíguos sem qualquer interferência do software.

Desvantagens do SPI:

  • Um periférico extra para aprender e configurar (isso é realmente uma desvantagem?)
  • Requer pinos extras ou multiplexação de pinos
  • Custo extra (tende a ser insignificante com os microcontroladores atuais)
  • Eu tive problemas de ruído com o SPI, mas eles estavam em protótipos de placas em velocidades relativamente altas (10 MHz)
  • Escolha de pinos altamente restrita

Para mim, as vantagens do bit-bang são menores se comparadas às vantagens do SPI. As desvantagens do bit-bang são muito maiores que as do SPI. As três principais razões que eu posso ver para escolher bit-banging são:

  1. Protocolo de baixa velocidade personalizado
  2. Se a comunicação for de baixa velocidade e o restante do aplicativo tiver baixos requisitos de computação
  3. Ou se a comunicação for de baixa velocidade e a escolha de pinos for um grande problema
Joshua
fonte
8

No PIC, uma implementação convencional do estilo SPI de bit-bang leva cerca de cinco ciclos por bit; com um pouco de trabalho nas peças 18Fxx, pode-se reduzir para cerca de quatro (ao custo de cerca de três ciclos por byte de sobrecarga extra). Esse tempo é adicional ao tempo necessário para buscar dados (geralmente três ciclos por byte). Portanto, calcule cerca de 40 a 43 ciclos por byte. Usando o SPI de hardware, a velocidade aumenta para dois ciclos por bit mais alguns ciclos extras por byte (alguns outros podem lidar com transferências consecutivas, mas os PICs que vi não podem) e enquanto o SPI está enviando um byte o processador pode buscar o próximo, permitindo um tempo geral de cerca de 18 ciclos / byte - um ganho de velocidade de cerca de 2,5x.

supercat
fonte
0

Para bit banging (BB), você esqueceu de mencionar:

  1. Amarra o processador pelo período da comunicação. (O SPI carrega os registradores e depois devolve para você fazer outra coisa)
  2. Interrupções em segundo plano podem interferir seriamente com o código BB, tornando-o útil apenas em projetos de encadeamento único, lembre-se de que o código BB deve prestar 100% de atenção ao lidar com o protocolo.
prumo
fonte