Interface Periférica Serial - Serial Peripheral Interface

Ônibus SPI
Modelo Barramento de comunicação serial
Designer Motorola
Projetado 1979 ; 42 anos atrás ( 1979 )
Protocolo Serial , full-duplex

A Serial Peripheral Interface ( SPI ) é uma especificação de interface de comunicação serial síncrona usada para comunicação de curta distância, principalmente em sistemas embarcados . A interface foi desenvolvida pela Motorola em meados da década de 1980 e se tornou um padrão de fato . As aplicações típicas incluem cartões Secure Digital e monitores de cristal líquido .

Os dispositivos SPI se comunicam em modo full duplex usando uma arquitetura mestre-escravo , geralmente com um único mestre (embora alguns dispositivos Atmel suportem a mudança de funções em tempo real, dependendo de um pino externo (SS)). O dispositivo mestre (controlador) origina o quadro para leitura e gravação. Vários dispositivos escravos podem ser suportados por meio da seleção com seleção de chip individual (CS), às vezes chamada de linhas de seleção escrava (SS).

Às vezes, o SPI é chamado de barramento serial de quatro fios , contrastando com barramentos seriais de três , dois e um fio . O SPI pode ser descrito com precisão como uma interface serial síncrona, mas é diferente do protocolo de interface serial síncrona (SSI), que também é um protocolo de comunicação serial síncrona de quatro fios. O protocolo SSI emprega sinalização diferencial e fornece apenas um único canal de comunicação simplex . Para qualquer transação, o SPI é uma comunicação mestre e multi-escravo.

Interface

Único mestre para único escravo: exemplo básico de barramento SPI

O barramento SPI especifica quatro sinais lógicos:

  • SCLK: Relógio serial (saída do mestre)
  • MOSI: Master Out Slave In (saída de dados do mestre)
  • MISO: Master In Slave Out (saída de dados do escravo)
  • CS / SS: Seleção de Chip / Slave (geralmente ativo baixo , saída do mestre para indicar que os dados estão sendo enviados)

MOSI em um mestre conecta-se a MOSI em um escravo. MISO em um mestre se conecta a MISO em um escravo. O Slave Select tem a mesma funcionalidade que o chip select e é usado em vez de um conceito de endereçamento.

Nota: em um dispositivo somente escravo, MOSI pode ser rotulado como SDI (Serial Data In) e MISO pode ser rotulado como SDO (Serial Data Out)

Os nomes dos sinais acima podem ser usados ​​para rotular os pinos do dispositivo mestre e escravo, bem como as linhas de sinal entre eles de forma inequívoca, e são os mais comuns em produtos modernos. Os nomes dos pinos são sempre escritos em maiúscula, por exemplo, "Seleção de chip", não "seleção de chip".

Muitos produtos podem ter nomes de pinos SPI não padrão:

Relógio serial:

  • SCK

Saída Mestre → Entrada Escrava (MOSI):

  • SIMO, MTSR - correspondem a MOSI nos dispositivos mestre e escravo, conectam-se um ao outro
  • SDI, DI, DIN, SI - em dispositivos escravos; conecta ao MOSI no mestre ou às conexões abaixo
  • SDO, DO, DOUT, SO - em dispositivos mestres; conecta-se ao MOSI no escravo ou às conexões acima

Entrada Master ← Saída Slave (MISO):

  • SOMI, MRST - correspondem a MISO nos dispositivos mestre e escravo, conectam-se um ao outro
  • SDO, DO, DOUT, SO - em dispositivos escravos; conecta ao MISO no mestre ou às conexões abaixo
  • SDI, DI, DIN, SI - em dispositivos mestres; conecta-se ao MISO no escravo ou às conexões acima

Slave Select:

  • SS, SS , SSEL, nSS, / SS, SS # (seleção de escravo)
  • CS, CS (seleção de chip)
  • CSN (seleção / habilitação de chip)
  • CE (habilitar chip)

Operação

O barramento SPI pode operar com um único dispositivo mestre e com um ou mais dispositivos escravos.

Se um único dispositivo escravo for usado, o pino SS pode ser fixado para baixo lógico se o escravo permitir. Alguns escravos requerem uma borda descendente do sinal de seleção de chip para iniciar uma ação. Um exemplo é o Maxim MAX1242 ADC , que inicia a conversão em uma transição alto → baixo. Com vários dispositivos escravos, um sinal SS independente é necessário do mestre para cada dispositivo escravo.

A maioria dos dispositivos escravos tem saídas tri-state, então seu sinal MISO torna-se de alta impedância ( desconectado eletricamente ) quando o dispositivo não é selecionado. Dispositivos sem saídas tri-state não podem compartilhar segmentos de barramento SPI com outros dispositivos sem usar um buffer tri-state externo.

Transmissão de dados

Uma configuração típica de hardware usando dois registradores de deslocamento para formar um buffer circular entre chips

Para iniciar a comunicação, o barramento mestre configura o relógio, usando uma frequência suportada pelo dispositivo escravo, normalmente até alguns MHz. O mestre então seleciona o dispositivo escravo com nível lógico 0 na linha de seleção. Se um período de espera for necessário, como para uma conversão analógico-digital, o mestre deve aguardar pelo menos esse período de tempo antes de emitir ciclos de clock.

Durante cada ciclo de clock do SPI, ocorre uma transmissão de dados full-duplex. O mestre envia um bit na linha MOSI e o escravo o lê, enquanto o escravo envia um bit na linha MISO e o mestre o lê. Essa sequência é mantida mesmo quando se pretende apenas uma transferência de dados unidirecional.

As transmissões normalmente envolvem dois registradores de deslocamento de algum tamanho de palavra determinado, como oito bits, um no mestre e um no escravo; eles estão conectados em uma topologia de anel virtual. Os dados geralmente são deslocados com o bit mais significativo primeiro. Na transição do clock, tanto o mestre quanto o escravo se deslocam um pouco e o enviam na linha de transmissão para a contraparte. Na próxima transição do clock, em cada receptor, o bit é amostrado da linha de transmissão e definido como um novo bit menos significativo do registrador de deslocamento. Depois que os bits de registro foram deslocados para fora e para dentro, o mestre e o escravo trocaram os valores de registro. Se mais dados precisam ser trocados, os registradores de deslocamento são recarregados e o processo se repete. A transmissão pode continuar por qualquer número de ciclos de clock. Quando concluído, o mestre para de alternar o sinal do relógio e normalmente desmarca o escravo.

As transmissões geralmente consistem em palavras de oito bits. No entanto, outros tamanhos de palavras também são comuns, por exemplo, palavras de dezesseis bits para controladores de tela de toque ou codecs de áudio, como o TSC2101 da Texas Instruments , ou palavras de doze bits para muitos digital-para-analógico ou analógico-para - conversores digitais. Vários dispositivos SPI também podem ser encadeados para conservar os pinos.

Cada escravo no barramento que não foi ativado usando sua linha de seleção de chip deve desconsiderar o relógio de entrada e os sinais MOSI e não deve conduzir o MISO (ou seja, deve ter uma saída tristate ) embora alguns dispositivos precisem de buffers tristate externos para implementar isso.

Polaridade e fase do relógio

Um diagrama de tempo que mostra a polaridade e a fase do relógio. As linhas vermelhas denotam as bordas de ataque do relógio; e linhas azuis, bordas de fuga.

Além de definir a frequência do clock, o mestre também deve configurar a polaridade e a fase do clock em relação aos dados. O Motorola SPI Block Guide nomeia essas duas opções como CPOL e CPHA (para c lock pol arity e pha se), respectivamente, uma convenção que a maioria dos fornecedores também adotou.

O diagrama de tempo é mostrado à direita. O tempo é descrito com mais detalhes abaixo e se aplica tanto ao dispositivo mestre quanto ao escravo.

  • CPOL determina a polaridade do relógio. As polaridades podem ser convertidas com um simples inversor .
    • CPOL = 0 é um relógio que fica ocioso em 0, e cada ciclo consiste em um pulso de 1. Ou seja, a borda de ataque é uma borda de subida e a borda de fuga é uma borda de queda.
    • CPOL = 1 é um relógio que fica ocioso em 1 e cada ciclo consiste em um pulso de 0. Ou seja, a borda de ataque é uma borda de descida e a borda de fuga é uma borda de subida.
  • O CPHA determina o tempo (ou seja, fase) dos bits de dados em relação aos pulsos de relógio. A conversão entre essas duas formas não é trivial.
    • Para CPHA = 0, o lado "externo" altera os dados na borda posterior do ciclo de clock anterior, enquanto o lado "interno" captura os dados na (ou logo após) a borda dianteira do ciclo do clock. O lado externo mantém os dados válidos até a borda final do ciclo de clock atual. Para o primeiro ciclo, o primeiro bit deve estar na linha MOSI antes da transição do clock.
    • Uma forma alternativa de considerar isso é dizer que um ciclo CPHA = 0 consiste em um meio ciclo com o relógio ocioso, seguido por meio ciclo com o relógio ativado.
    • Para CPHA = 1, o lado "externo" altera os dados na borda anterior do ciclo de clock atual, enquanto o lado "interno" captura os dados na (ou logo após) a borda posterior do ciclo do clock. O lado externo mantém os dados válidos até a borda de ataque do ciclo de clock seguinte. Para o último ciclo, o escravo mantém a linha MISO válida até que a seleção do escravo seja desativada.
    • Uma forma alternativa de considerar isso é dizer que um CPHA = 1 ciclo consiste em um meio ciclo com o relógio ativado, seguido por meio ciclo com o relógio ocioso.

Os sinais MOSI e MISO geralmente são estáveis ​​(em seus pontos de recepção) por meio ciclo até a próxima transição de clock. Os dispositivos mestre e escravo SPI também podem amostrar dados em diferentes pontos nesse meio ciclo.

Isso adiciona mais flexibilidade ao canal de comunicação entre o mestre e o escravo.

Números de modo

As combinações de polaridade e fases são frequentemente referidas como modos que são comumente numerados de acordo com a seguinte convenção, com CPOL como o bit de ordem superior e CPHA como o bit de ordem inferior:

Para microcontroladores " Microchip PIC " / "baseados em ARM" (observe que NCPHA é a inversão de CPHA):

Modo SPI Polaridade do relógio
(CPOL / CKP)
Fase do relógio
(CPHA)
Borda do relógio
(CKE / NCPHA)
0 0 0 1
1 0 1 0
2 1 0 1
3 1 1 0

Para PIC32MX: modo SPI configure os bits CKP, CKE e SMP. Defina SMP bit e CKP, CKE dois bits configurados conforme a tabela acima.

Para outros microcontroladores:

Modo CPOL CPHA
0 0 0
1 0 1
2 1 0
3 1 1

Outra notação comumente usada representa o modo como uma tupla (CPOL, CPHA); por exemplo, o valor '(0, 1)' indicaria CPOL = 0 e CPHA = 1.

Observe que na operação Full Duplex, o dispositivo Master pode transmitir e receber com diferentes modos. Por exemplo, ele pode transmitir no Modo 0 e receber no Modo 1 ao mesmo tempo.

Configuração de escravo independente

Barramento SPI típico: mestre e três escravos independentes

Na configuração do escravo independente, há uma linha de seleção de chip independente para cada escravo. É assim que o SPI é normalmente usado. O mestre declara apenas uma seleção de chip por vez.

Os resistores pull-up entre a fonte de alimentação e as linhas de seleção de chip são recomendados para sistemas onde os pinos de seleção de chip do mestre podem ser padronizados para um estado indefinido. Quando rotinas de software separadas inicializam cada chip, selecione e se comunique com seu escravo, os resistores pull-up evitam que outros escravos não inicializados respondam.

Uma vez que os pinos MISO dos escravos são conectados juntos, eles precisam ser pinos tri-state (alta, baixa ou alta impedância), onde a saída de alta impedância deve ser aplicada quando o escravo não é selecionado. Dispositivos escravos que não suportam tri-state podem ser usados ​​na configuração slave independente adicionando um chip de buffer tri-state controlado pelo sinal de seleção de chip. (Uma vez que apenas uma única linha de sinal precisa ser tristate por escravo, um chip lógico padrão típico que contém quatro buffers tristate com entradas de porta independentes pode ser usado para fazer interface com até quatro dispositivos escravos para um barramento SPI.)

Configuração de Daisy chain

Barramento SPI em cadeia: escravos mestre e cooperativos

Alguns produtos que implementam SPI podem ser conectados em uma configuração de cadeia , a primeira saída escrava sendo conectada à segunda entrada escrava, etc. A porta SPI de cada escravo é projetada para enviar durante o segundo grupo de pulsos de relógio uma cópia exata de os dados que recebeu durante o primeiro grupo de pulsos de clock. Toda a cadeia atua como um registrador de deslocamento de comunicação ; O encadeamento em série é geralmente feito com registradores de deslocamento para fornecer um banco de entradas ou saídas por meio do SPI. Cada escravo copia a entrada para a saída no próximo ciclo de clock até que a linha SS baixa ativa fique alta. Tal recurso requer apenas uma única linha SS do mestre, em vez de uma linha SS separada para cada escravo.

Outros aplicativos que podem interoperar potencialmente com o SPI que requerem uma configuração de ligação em cadeia incluem SGPIO , JTAG e Interface de dois fios .

Configuração do expansor

Outra variação usa exatamente duas seleções de chips. Uma seleção de chip controla um bloco de lógica de seleção, o outro é roteado pela lógica de seleção. A aplicação é comum o suficiente para que haja multiplexadores controlados em série disponíveis. Isso pode padronizar e preparar um conector para o futuro, de modo que um controlador possa oferecer suporte a muitos dispositivos com uma mudança de software. Um aplicativo semelhante emparelha o multiplexador controlado em série com um controlador USB para SPI comercial, controlado por um PC ou smartphone. Isso permite que muitos tipos de dispositivos eletrônicos "burros" sejam controlados por computadores baratos produzidos em massa.

Modificações de alta confiabilidade

Em ambientes com ruído elétrico, o padrão SPI tem poucos sinais e pode ser econômico reduzir os efeitos do ruído de modo comum adaptando o SPI para usar sinalização diferencial de baixa tensão . Outra vantagem é que os dispositivos controlados podem ser projetados para loopback para testar a integridade do sinal.

Comunicações válidas

Alguns dispositivos escravos são projetados para ignorar qualquer comunicação SPI em que o número de pulsos de clock seja maior do que o especificado. Outros não se importam, ignorando entradas extras e continuando a deslocar o mesmo bit de saída. É comum que diferentes dispositivos usem comunicações SPI com comprimentos diferentes, como, por exemplo, quando o SPI é usado para acessar a cadeia de varredura de um IC digital emitindo uma palavra de comando de um tamanho (talvez 32 bits) e, em seguida, obtendo uma resposta de um tamanho diferente (talvez 153 bits, um para cada pino nessa cadeia de varredura).

Interrupções

Dispositivos SPI às vezes usam outra linha de sinal para enviar um sinal de interrupção para uma CPU host. Os exemplos incluem interrupções de caneta para baixo de sensores de tela de toque, alertas de limite térmico de sensores de temperatura, alarmes emitidos por chips de relógio em tempo real, SDIO e inserções de conector de fone de ouvido do codec de som em um telefone celular. As interrupções não são cobertas pelo padrão SPI; seu uso não é proibido nem especificado pela norma. Em outras palavras, as interrupções estão fora do escopo do padrão SPI e são opcionalmente implementadas independentemente dele.

Exemplo de bit-banging do protocolo mestre

Abaixo está um exemplo de bit-banging do protocolo SPI como um mestre SPI com CPOL = 0, CPHA = 0 e oito bits por transferência. O exemplo foi escrito na linguagem de programação C. Como este é CPOL = 0, o clock deve ser puxado para baixo antes que a seleção de chip seja ativada. A linha de seleção de chip deve ser ativada, o que normalmente significa ser alternada para baixo, para o periférico antes do início da transferência, e desativada posteriormente. A maioria dos periféricos permite ou exige várias transferências enquanto a linha de seleção está baixa; essa rotina pode ser chamada várias vezes antes de desmarcar o chip.

/*
 * Simultaneously transmit and receive a byte on the SPI.
 *
 * Polarity and phase are assumed to be both 0, i.e.:
 *   - input data is captured on rising edge of SCLK.
 *   - output data is propagated on falling edge of SCLK.
 *
 * Returns the received byte.
 */
uint8_t SPI_transfer_byte(uint8_t byte_out)
{
    uint8_t byte_in = 0;
    uint8_t bit;

    for (bit = 0x80; bit; bit >>= 1) {
        /* Shift-out a bit to the MOSI line */
        write_MOSI((byte_out & bit) ? HIGH : LOW);

        /* Delay for at least the peer's setup time */
        delay(SPI_SCLK_LOW_TIME);

        /* Pull the clock line high */
        write_SCLK(HIGH);

        /* Shift-in a bit from the MISO line */
        if (read_MISO() == HIGH)
            byte_in |= bit;

        /* Delay for at least the peer's hold time */
        delay(SPI_SCLK_HIGH_TIME);

        /* Pull the clock line low */
        write_SCLK(LOW);
    }

    return byte_in;
}

Prós e contras

Vantagens

  • Comunicação full duplex na versão padrão deste protocolo
  • Drivers push-pull (em oposição ao dreno aberto) fornecem boa integridade de sinal e alta velocidade
  • Taxa de transferência superior a I²C ou SMBus . Não limitado a qualquer velocidade máxima do clock, permitindo uma velocidade potencialmente alta
  • Flexibilidade de protocolo completa para os bits transferidos
    • Não limitado a palavras de 8 bits
    • Escolha arbitrária de tamanho, conteúdo e propósito da mensagem
  • Interface de hardware extremamente simples
    • Normalmente, requisitos de energia mais baixos do que I²C ou SMBus devido a menos circuitos (incluindo resistores pull up)
    • Sem arbitragem ou modos de falha associados - ao contrário do barramento CAN
    • Os escravos usam o relógio do mestre e não precisam de osciladores de precisão
    • Os escravos não precisam de um endereço único  - ao contrário de I²C ou GPIB ou SCSI
    • Transceptores não são necessários - ao contrário do CAN-bus
  • Usa apenas quatro pinos em pacotes de IC e fios em layouts de placa ou conectores, muito menos do que interfaces paralelas
  • No máximo um sinal de barramento exclusivo por dispositivo (seleção de chip); todos os outros são compartilhados
  • Os sinais são unidirecionais, permitindo fácil isolamento galvânico
  • Implementação de software simples

Desvantagens

  • Requer mais pinos em pacotes de IC do que I²C , mesmo na variante de três fios
  • Sem endereçamento em banda; sinais de seleção de chip fora de banda são necessários em barramentos compartilhados
  • Extensibilidade severamente reduzida quando múltiplos escravos usando diferentes modos SPI são necessários. O acesso fica mais lento quando o mestre freqüentemente precisa reinicializar em modos diferentes.
  • Nenhum controle de fluxo de hardware pelo escravo (mas o mestre pode atrasar a próxima transição do clock para diminuir a taxa de transferência)
  • Nenhum reconhecimento de escravo de hardware (o mestre pode estar transmitindo para lugar nenhum e não saber)
  • Normalmente suporta apenas um dispositivo mestre (depende da implementação de hardware do dispositivo)
  • Nenhum protocolo de verificação de erros foi definido
  • Sem um padrão formal, validar a conformidade não é possível
  • Lida apenas com distâncias curtas em comparação com RS-232 , RS-485 ou CAN-bus . (Sua distância pode ser estendida com o uso de transceptores como RS-422 .)
  • Os opto-isoladores no caminho do sinal limitam a velocidade do clock para a transferência MISO devido aos atrasos adicionais entre o clock e os dados
  • Muitas variações existentes, tornando difícil encontrar ferramentas de desenvolvimento como adaptadores de host que suportam essas variações
  • O SPI não oferece suporte a hot swapping (adicionar nós dinamicamente).
  • As interrupções devem ser implementadas com sinais fora da banda ou falsificadas usando pesquisa periódica semelhante ao USB 1.1 e 2.0.
  • Algumas variantes, como SPI duplo , SPI quádruplo e barramentos seriais de três fios, definidos abaixo, são half-duplex.

Formulários

SPI Serial Memory da Atmel

A economia de espaço na placa em comparação com um barramento de E / S paralelo é significativa e conferiu à SPI um papel sólido em sistemas embarcados. Isso é verdade para a maioria dos processadores system-on-a-chip , tanto com processadores de 32 bits mais avançados , como os que usam ARM , MIPS ou PowerPC, quanto com outros microcontroladores, como AVR , PIC e MSP430 . Esses chips geralmente incluem controladores SPI capazes de funcionar no modo mestre ou escravo. Os controladores AVR programáveis ​​no sistema (incluindo os em branco) podem ser programados usando uma interface SPI.

Projetos baseados em chip ou FPGA às vezes usam SPI para se comunicar entre componentes internos; um imóvel no chip pode ser tão caro quanto seu primo a bordo.

A capacidade full-duplex torna o SPI muito simples e eficiente para aplicações de mestre único / escravo único. Alguns dispositivos usam o modo full-duplex de implementar, um fluxo de dados rápida eficiente para aplicações como áudio digital , processamento de sinal digital , ou canais de telecomunicações , mas a maioria off-the-shelf chips de furar a protocolos de pedido / resposta half-duplex.

SPI é usado para falar com uma variedade de periféricos, como

Para sistemas de alto desempenho, os FPGAs às vezes usam o SPI para fazer interface como um escravo para um host, como um mestre para os sensores ou para a memória flash usada para inicializar se eles forem baseados em SRAM.

Embora existam algumas semelhanças entre o barramento SPI e o protocolo JTAG (IEEE 1149.1-2013), eles não são intercambiáveis. O barramento SPI se destina a alta velocidade, inicialização on board de periféricos de dispositivo, enquanto o protocolo JTAG se destina a fornecer acesso de teste confiável aos pinos de E / S de um controlador externo com atraso de sinal menos preciso e parâmetros de inclinação. Embora não seja estritamente uma interface sensível ao nível, o protocolo JTAG suporta a recuperação de violações de configuração e retenção entre dispositivos JTAG, reduzindo a taxa de clock ou alterando os ciclos de trabalho do clock. Consequentemente, a interface JTAG não se destina a suportar taxas de dados extremamente altas.

SGPIO é essencialmente outra pilha de aplicativos (incompatível) para SPI projetada para atividades particulares de gerenciamento de backplane. SGPIO usa mensagens de 3 bits.

Padrões

O barramento SPI é um padrão de fato . No entanto, a falta de um padrão formal se reflete em uma ampla variedade de opções de protocolo. Diferentes tamanhos de palavras são comuns. Cada dispositivo define seu próprio protocolo, incluindo se ele oferece suporte a comandos. Alguns dispositivos são apenas para transmissão; outros são apenas para receber. As seleções de fichas às vezes são ativas-altas, em vez de ativas-baixas. Alguns protocolos enviam o bit menos significativo primeiro.

O SPI Bus foi originalmente definido pela Motorola . O documento de definição original era o Nó de Aplicativo AN991 da Motorola. Quando a Freescale saiu da Motorola, a responsabilidade pelo AN991 foi com a Freescale. Quando a NXP adquiriu a Freescale, a NXP também adquiriu a responsabilidade pelo AN991, que foi revisado pela última vez em janeiro de 2002 como AN991 / D e ainda serve como o documento de definição "oficial" para o SPI Bus.

Variações

Alguns dispositivos têm pequenas variações dos modos CPOL / CPHA descritos acima. O envio de dados do escravo para o mestre pode usar a transição oposta do clock como mestre para o escravo. Os dispositivos geralmente requerem tempo ocioso de clock extra antes do primeiro ou depois do último, ou entre um comando e sua resposta. Alguns dispositivos possuem dois relógios, um para ler dados e outro para transmiti-los ao dispositivo. Muitos dos relógios de leitura funcionam a partir da linha de seleção de chip.

Alguns dispositivos requerem um sinal de controle de fluxo adicional do escravo ao mestre, indicando quando os dados estão prontos. Isso leva a um protocolo de 5 fios em vez do 4 usual. Esse sinal de pronto ou habilitado costuma estar ativo-baixo e precisa ser habilitado em pontos-chave, como após comandos ou entre palavras. Sem tal sinal, as taxas de transferência de dados podem precisar ser reduzidas significativamente, ou os protocolos podem precisar ter bytes fictícios inseridos, para acomodar o pior caso para o tempo de resposta do escravo. Os exemplos incluem iniciar uma conversão ADC, endereçar a página certa da memória flash e processar o suficiente de um comando para que o firmware do dispositivo possa carregar a primeira palavra da resposta. (Muitos mestres SPI não suportam esse sinal diretamente e, em vez disso, dependem de atrasos fixos.)

Muitos chips SPI suportam apenas mensagens múltiplas de 8 bits. Esses chips não podem interoperar com os protocolos JTAG ou SGPIO , ou qualquer outro protocolo que requeira mensagens que não sejam múltiplos de 8 bits.

Existem também diferenças no nível do hardware. Alguns chips combinam MOSI e MISO em uma única linha de dados (SI / SO); isso às vezes é chamado de sinalização de 'três fios' (em contraste com o SPI normal de 'quatro fios'). Outra variação do SPI remove a linha de seleção de chip, gerenciando a entrada / saída da máquina de estado do protocolo usando outros métodos. Quem precisa de um conector externo para SPI define o seu próprio: UEXT , conector JTAG , soquete de cartão Secure Digital , etc. Os níveis de sinal dependem inteiramente dos chips envolvidos.

SafeSPI é um padrão da indústria para SPI em aplicações automotivas. Seu foco principal é a transmissão de dados de sensores entre diferentes dispositivos.

Ferramentas de desenvolvimento

Ao desenvolver ou solucionar problemas de sistemas usando SPI, a visibilidade no nível dos sinais de hardware pode ser importante.

Adaptadores de host

Existem várias soluções de hardware USB para fornecer computadores, executando Linux , Mac ou Windows , recursos mestre ou escravo SPI. Muitos deles também fornecem recursos de script ou programação (Visual Basic, C / C ++, VHDL, etc.).

Um adaptador host SPI permite que o usuário desempenhe o papel de mestre em um barramento SPI diretamente de um PC. Eles são usados ​​para sistemas embarcados, chips (FPGA, ASIC e SoC) e teste, programação e depuração de periféricos.

Os principais parâmetros do SPI são: a frequência máxima suportada para a interface serial, latência de comando a comando e o comprimento máximo para comandos SPI. É possível encontrar adaptadores SPI no mercado hoje que suportam interfaces seriais de até 100 MHz, com comprimento de acesso virtualmente ilimitado.

Sendo o protocolo SPI um padrão de fato, alguns adaptadores de host SPI também têm a capacidade de oferecer suporte a outros protocolos além do SPI tradicional de 4 fios (por exemplo, suporte ao protocolo SPI quad ou outro protocolo serial personalizado derivado de SPI).

Analisadores de protocolo

Os analisadores de protocolo SPI são ferramentas que amostram um barramento SPI e decodificam os sinais elétricos para fornecer uma visão de nível superior dos dados sendo transmitidos em um barramento específico.

Osciloscópios

A maioria dos fornecedores de osciloscópios oferece disparo baseado em osciloscópio e decodificação de protocolo para SPI. A maioria suporta SPI de 2, 3 e 4 fios. A capacidade de disparo e decodificação é normalmente oferecida como um extra opcional. Os sinais SPI podem ser acessados ​​por meio de canais de osciloscópio analógico ou com canais MSO digitais.

Analisadores lógicos

Ao desenvolver ou solucionar problemas do barramento SPI, o exame dos sinais de hardware pode ser muito importante. Analisadores lógicos são ferramentas que coletam, analisam, decodificam e armazenam sinais para que as pessoas possam visualizar as formas de onda de alta velocidade em seu lazer. Os analisadores lógicos exibem carimbos de data / hora de cada mudança de nível de sinal, o que pode ajudar a encontrar problemas de protocolo. A maioria dos analisadores lógicos tem a capacidade de decodificar sinais de barramento em dados de protocolo de alto nível e mostrar dados ASCII.

Termos relacionados

Controladores SPI inteligentes

Uma interface periférica serial enfileirada ( QSPI ; consulte também Quad SPI) é um tipo de controlador SPI que usa uma fila de dados para transferir dados através do barramento SPI. Ele tem um modo de envolvimento que permite transferências contínuas de e para a fila com atenção apenas intermitente da CPU. Consequentemente, os periféricos aparecem para a CPU como dispositivos paralelos mapeados na memória . Este recurso é útil em aplicações tais como o controlo de um conversor A / D . Outros recursos programáveis ​​no QSPI são seleção de chip e comprimento / atraso de transferência.

Os controladores SPI de diferentes fornecedores oferecem suporte a diferentes conjuntos de recursos; essas filas DMA não são incomuns, embora possam estar associadas a mecanismos DMA separados em vez do próprio controlador SPI, como o usado pela Porta serial com buffer multicanal ( MCBSP ). A maioria dos controladores master SPI integra suporte para até quatro seleções de chip, embora alguns exijam que seleções de chip sejam gerenciadas separadamente por meio de linhas GPIO.

Microfio

Fairchild Serial EEPROM com barramento de Microfio

Microfio, frequentemente soletrado μWire , é essencialmente um predecessor do SPI e uma marca comercial da National Semiconductor . É um subconjunto estrito de SPI: half-duplex e usando o modo SPI 0. Os chips de microfio tendem a precisar de taxas de clock mais lentas do que as versões SPI mais recentes; talvez 2 MHz vs. 20 MHz. Alguns chips Microwire também suportam um modo de três fios .

Microfio / Plus

Microwire / Plus é um aprimoramento do Microwire e apresenta comunicação full-duplex e suporte para os modos SPI 0 e 1. Não houve nenhuma melhoria especificada na velocidade do clock serial.

Barramentos seriais de três fios

Conforme mencionado, uma variante do SPI usa uma única linha de dados bidirecional (saída / entrada escravo, chamada SISO ou saída / entrada mestre, chamada MOMI) em vez de duas linhas unidirecionais (MOSI e MISO). Esta variante está restrita ao modo half duplex. Ele tende a ser usado para peças de baixo desempenho, como pequenos EEPROMs usados ​​apenas durante a inicialização do sistema e certos sensores, e Microfio. Poucos controladores mestre SPI suportam esse modo; embora muitas vezes possa ser facilmente alterado no software.

SPI duplo

Para instâncias onde a natureza full-duplex do SPI não é usada, uma extensão usa ambos os pinos de dados em uma configuração half-duplex para enviar dois bits por ciclo de clock. Normalmente, um byte de comando é enviado solicitando uma resposta no modo dual, após o qual a linha MOSI se torna SIO0 (serial I / O 0) e carrega bits pares, enquanto a linha MISO se torna SIO1 e carrega bits ímpares. Os dados ainda são transmitidos msbit primeiro, mas SIO1 carrega os bits 7, 5, 3 e 1 de cada byte, enquanto SIO0 carrega os bits 6, 4, 2 e 0.

Isso é particularmente popular entre os ROMs de SPI, que precisam enviar uma grande quantidade de dados e vem em duas variantes:

  • Os comandos de leitura dupla aceitam o envio e o endereço do mestre no modo único e retornam os dados no modo duplo.
  • Os comandos de E / S dupla enviam o comando no modo único e, a seguir, enviam o endereço e retornam os dados no modo duplo.

Quad SPI

Quad SPI ( QSPI ; consulte também Queued SPI) vai além do SPI duplo, adicionando mais duas linhas de E / S (SIO2 e SIO3) e envia 4 bits de dados por ciclo de clock. Novamente, ele é solicitado por comandos especiais, que habilitam o modo quádruplo após o próprio comando ser enviado em modo único.

SQI Tipo 1: Comandos enviados em uma única linha, mas endereços e dados enviados em quatro linhas

SQI Tipo 2: Comandos e endereços enviados em uma única linha, mas dados enviados / recebidos em quatro linhas

QPI / SQI

Estendendo ainda mais o quad SPI, alguns dispositivos suportam um modo "quad tudo", onde toda a comunicação ocorre em 4 linhas de dados, incluindo comandos. Isso é chamado de "QPI" (não deve ser confundido com Intel QuickPath Interconnect ) ou "serial quad I / O" (SQI)

Isso requer a programação de um bit de configuração no dispositivo e requer cuidado após a reinicialização para estabelecer a comunicação.

Taxa de dados dobrada

Além de usar várias linhas para E / S, alguns dispositivos aumentam a taxa de transferência usando a transmissão de taxa de dados dupla .

Barramento Intel Enhanced Serial Peripheral Interface

A Intel desenvolveu um sucessor para seu barramento Low Pin Count (LPC), que ela chama de Enhanced Serial Peripheral Interface Bus, ou eSPI. A Intel visa permitir a redução do número de pinos necessários nas placas-mãe em comparação com sistemas que usam LPC, ter mais rendimento disponível do que LPC, reduzir a tensão de trabalho para 1,8 volts para facilitar processos de fabricação de chips menores, permitir que periféricos eSPI compartilhem dispositivos flash SPI com o host (o barramento LPC não permitia que hubs de firmware fossem usados ​​por periféricos LPC), encapsulava os pinos fora de banda anteriores através do barramento eSPI e permitia que os projetistas do sistema compensassem o custo e o desempenho.

O barramento eSPI pode ser compartilhado com dispositivos SPI para salvar pinos ou separado do barramento SPI para permitir mais desempenho, especialmente quando os dispositivos eSPI precisam usar dispositivos flash SPI.

Este padrão define um sinal de Alerta # que é usado por um escravo eSPI para solicitar serviço do mestre. Em um design orientado para o desempenho ou um design com apenas um escravo eSPI, cada escravo eSPI terá seu pino Alerta # conectado a um pino Alerta # no mestre eSPI que é dedicado a cada escravo, permitindo que o mestre eSPI conceda baixa latência serviço porque o mestre eSPI saberá qual escravo eSPI precisa de serviço e não precisará consultar todos os escravos para determinar qual dispositivo precisa de serviço. Em um projeto de orçamento com mais de um escravo eSPI, todos os pinos de Alerta # dos escravos são conectados a um pino de Alerta # no mestre eSPI em uma conexão com fio OR , que exigirá que o mestre sondar todos os escravos para determinar quais precisam de serviço quando o sinal de Alerta # é puxado para baixo por um ou mais periféricos que precisam de serviço. Somente depois que todos os dispositivos forem atendidos, o sinal de Alerta # será elevado devido a nenhum dos escravos eSPI precisando de serviço e, portanto, puxando o sinal de Alerta # para baixo.

Esse padrão permite que os projetistas usem comunicações de 1, 2 ou 4 bits em velocidades de 20 a 66 MHz para permitir que os projetistas negociem desempenho e custo.

Todas as comunicações que estavam fora da banda do barramento LPC, como entrada / saída de uso geral (GPIO) e Barramento de gerenciamento do sistema (SMBus), são encapsuladas através do barramento eSPI por meio de ciclos de fios virtuais e ciclos de mensagens fora de banda, respectivamente em a fim de remover esses pinos dos designs da placa-mãe usando o eSPI.

Este padrão suporta ciclos de memória padrão com comprimentos de 1 byte a 4 kilobytes de dados, ciclos de memória curtos com comprimentos de 1, 2 ou 4 bytes que têm muito menos sobrecarga em comparação com os ciclos de memória padrão e ciclos de E / S com comprimentos de 1 , 2 ou 4 bytes de dados que também são de baixa sobrecarga. Isso reduz significativamente a sobrecarga em comparação com o barramento LPC, onde todos os ciclos, exceto o ciclo de leitura do hub de firmware de 128 bytes, gastam mais da metade de todo o throughput do barramento e o tempo em sobrecarga. O ciclo de memória padrão permite um comprimento de 1 byte a 4 kilobytes para permitir que seu overhead maior seja amortizado em uma transação grande. Os escravos eSPI podem iniciar versões de mestre de barramento de todos os ciclos de memória. Os ciclos de E / S do barramento mestre, que foram introduzidos pela especificação do barramento LPC, e o DMA estilo ISA, incluindo a variante de 32 bits introduzida pela especificação do barramento LPC, não estão presentes no eSPI. Portanto, os ciclos de memória do mestre de barramento são os únicos DMA permitidos neste padrão.

Os escravos eSPI têm permissão para usar o mestre eSPI como proxy para executar operações flash em um escravo de memória flash SPI padrão em nome do escravo eSPI solicitante.

O endereçamento de memória de 64 bits também é adicionado, mas só é permitido quando não há endereço de 32 bits equivalente.

O chipset Intel Z170 pode ser configurado para implementar este barramento ou uma variante do barramento LPC que não tem sua capacidade de DMA estilo ISA e está bloqueado para 24 MHz em vez dos 33 MHz padrão.

Veja também

Referências

links externos