O pino SS pode ser amarrado se apenas um dispositivo SPI for usado?

8

Li on-line que, para iniciar uma transação SPI em um dispositivo suportado por SPI, a linha SS (slave select, também conhecida como chip select) deve ser configurada como baixa para toda a transação e, em seguida, ficar alta na transação de ponta a ponta. Se eu criar um circuito contendo apenas um dispositivo SPI, precisarei baixar o comando SS line send e aumentar a linha ss toda vez ou posso amarrar a linha ss baixa e enviar comandos ilimitados? O dispositivo que estou usando é o chip de som ISD1700 .

Nick Alexeev
fonte
3
Em geral, sim, o pino SS informa ao dispositivo escravo quando a transação inicia e termina. Sem ele, não há nada para garantir que fique sincronizado. Pode funcionar, mas se ficar fora de sincronia, não a recuperará.
Kevin White
4
@kevinWhite, na verdade, muitos dispositivos SPI precisam dessa transição SS para iniciar uma máquina de estado interna. A folha de dados do seu dispositivo específico deve fornecer a resposta, mas se você já a possui, por que não experimentá-la?
Akohlsmith
1
@akohlsmith - Eu concordo, estou dizendo que você precisa do SS, não que possa fugir sem ele. Mesmo os dispositivos que não exigem a execução de operações internas podem ficar fora de sincronismo com o mestre. O único fabricante que viu que recomenda não usar o SS é o Analog Devices para alguns de seus dispositivos, onde eles têm várias funções atribuídas aos pinos, de modo que o SS pode não estar disponível. Não vejo como isso pode ser confiável e ouvi reclamações em que o dispositivo exige uma redefinição para voltar à sincronização.
Kevin White
Eu concordo com @akohlsmith. E se você quiser responder à pergunta eu votarei. Aqui está o meu argumento: eu me comunico periodicamente com um dispositivo por SPI. Mas, há um recurso acionado por interrupção que também precisa do SPI para o mesmo dispositivo. Usando o pino SS, devo poder interromper a transação SPI atual sem finalizá-la. Dando-me acesso ao dispositivo SPI mais rapidamente ao atender a interrupção.
St2000

Respostas:

14

[@Kevin e @akohlsmith devem postar seus comentários como respostas.
Isso é para expandir seus comentários. ]

O SPI 1 não prescreve o comportamento exato do SS (linha 2 de seleção de escravos ). Esse comportamento depende da implementação de cada dispositivo individual. Eu vi dispositivos que podem operar com o SS permanentemente aserted. Eu também vi dispositivos que exigem arestas caindo e subindo no SS.

Embora não diga isso explicitamente que o SS deve ser alternado,
o guia de design (p.31) diz que o SS inicia e termina a transação SPI. Seria prudente supor que o SS precisa ser alternado para que a transação do SPI seja concluída.

1 SPI é mais um costume do que um padrão.
2 CS (seleção de chip) é outro nome para a seleção de escravos.

Nick Alexeev
fonte
6
Esta é uma resposta muito boa. Muitos / a maioria dos dispositivos de destino SPI são totalmente dependentes da linha SPI_CS para inicializar a máquina de estado de captura de bits interna à peça para sincronizar entre o iniciador e os dispositivos de destino. Existem alguns dispositivos que são capazes de sincronizar novamente simplesmente reconhecendo os padrões de sincronização ou código de operação on-the-fly na linha de sinal MOSI. Mas eles são minoria e recomenda-se que qualquer pessoa que projete um sistema usando dispositivos SPI forneça um SPI_CS para cada dispositivo de destino, mesmo que isso signifique o uso de circuitos extras e / ou GPIOs com o dispositivo iniciador para fornecer esse recurso.
Michael Karas
Não há necessidade de adicionar outra resposta, a sua captura o que @kevinwhite e eu estávamos dizendo. :-)
akohlsmith
5

Depende inteiramente do dispositivo escravo.

Se o protocolo para o dispositivo escravo incluir algum tipo de enquadramento, seja com pacotes de comprimento fixo, bytes de início / parada ou um cabeçalho que especifique o tamanho do pacote, o dispositivo escravo poderá operar sem uma seleção de chip. Eu tenho um chip de memória flash SPI na placa em que estou trabalhando no qual parece estar perfeitamente feliz com ou sem o chip selecionado. Pode ser conectado permanentemente a 0V (ativado) sem problemas.

Isso realmente nos causou alguns problemas, porque um contratado havia configurado algumas das E / S de baixo nível, incluindo o SPI, e nós (e eles!) Não percebemos que não tinham o chip select funcionando. Não foi até que eu tive que estender o trabalho de SPI para adicionar outro dispositivo SPI no mesmo barramento que eu descobri que na verdade não tínhamos chips selecionados!

Por outro lado, muitos dispositivos escravos precisam de seleções de chips para enquadrar os dados, e o envio de mais bits / bytes do que o pacote esperado sem liberar a seleção de chips no final será visto como uma transferência inválida e rejeitada. Os DACs geralmente carregam o novo valor na saída do chip, selecione a borda ascendente. Os ADCs da mesma forma costumam usar a transferência SPI para iniciar (e às vezes cronometrar) a conversão; portanto, eles precisam que o chip selecione a borda descendente como seu gatilho.

Sua folha de dados não diz nada sobre como direcionar seu chip em particular sobre o SPI, e não estou motivado o suficiente para pesquisá-lo no Google. Exercício deixado para o leitor ...;)

Graham
fonte
Eu só vou amarrar o SS baixo e rezar para que ele funcione, pois a folha de dados do dispositivo que obtive da internet apenas afirma que (de acordo com a tabela de definição de pinos na folha de dados) o SS é usado para ativar o dispositivo. Ele também afirma que, se o SS for alto, as outras linhas SPI estarão no estado de alta impedância. dedos cruzados.
@ Mike Descobri alguma motivação esta manhã, então pesquisei no Google "ISD1700". Os dois primeiros links foram dois arquivos PDF. O primeiro foi a folha de dados à qual você vinculou; e o segundo foi o guia de design, que diz exatamente como dirigir o chip. O guia de design diz (seção 10.2, página 31): "Uma transação SPI é iniciada na extremidade descendente do pino SS". Portanto, não, a folha de dados diz que você não pode se safar do que está planejando. E não quero ser muito irritante aqui, mas se você tivesse JFGI e lesse os dois principais links que surgiram, poderia ter respondido sua própria pergunta.
Graham
3

Sem saber nada específico sobre o dispositivo escravo SPI, não, você não pode simplesmente amarrar o SS baixo.

Muitos dispositivos usam a ponta principal do SS para redefinir sua lógica interna para o início de uma nova transação. Por exemplo, as memórias podem interpretar os dois primeiros bytes como endereço e os bytes subsequentes como dados. Algumas memórias não executam a gravação física até que a SS seja desassociada.

Para alguns dispositivos com o protocolo certo, você pode se safar dele. No entanto, ele não funcionará com a maioria dos dispositivos por aí.

Olin Lathrop
fonte
Vários anos atrasado neste. E estou aqui porque também estava procurando respostas. Informações muito boas que você adicionou ao Olin e boas informações de outras pessoas também. Eu acho que o problema foi principalmente com a interpretação das palavras 'seleção de chip' ou 'seleção de escravos' - que, se alguém fosse forçado a assumir alguma coisa, a suposição simplesmente significaria ativar esse dispositivo e desligar todos os outros dispositivos escravos que, de outra forma, poderiam interferir nas comunicações entre escravo e mestre. Uma "suposição" justa e lógica. É bom que este tópico seja esclarecido aqui neste tópico.
Kenny
Outra pergunta a seguir deste tópico poderia ser ----- se o pino de seleção / habilitação de chip não deve ser permanentemente 'ativado', então exatamente quando o dispositivo escravo spi deve ser ativado e desativado? Por exemplo - desabilitamos o dispositivo escravo após a conclusão de cada comando enviado ao escravo?
Kenny