Quais frequências SPI o Raspberry Pi suporta?

22

Quais frequências SPI o Raspberry Pi suporta?

Além disso:

  • Todos eles são suportados pelo driver SPI bootc.net ?
  • Existem coisas adicionais sobre as quais devo ter cuidado ao tentar me comunicar com outro chip via SPI?
akavel
fonte

Respostas:

21

O Raspberry Pi SPI é executado na velocidade do clock do APB, que é equivalente à velocidade do clock do núcleo, 250 MHz. Isso pode ser dividido por qualquer número par de 2 a 65536 para a velocidade desejada. A folha de dados especifica que o divisor deve ter uma potência de dois, mas isso está incorreto . Os números ímpares são arredondados para baixo e 0 (ou 1) é equivalente a 65536. Portanto, um divisor menor que 2 é impossível.

Isso faz com que a faixa de freqüência seja de 3,814 kHz a 125 MHz, com 32768 etapas no meio.

(Houve muita desinformação sobre esse assunto, mas esses resultados foram verificados por experimentação. Por favor, espalhe a notícia.)

Nakedible
fonte
1
Eu acho que essa resposta deveria estar no topo.
precisa saber é o seguinte
Você tem certeza disso? Gordon afirma que, embora você possa alimentá-lo com qualquer número par, apenas potências de dois realmente fazem a diferença: Entendendo o SPI no Raspberry Pi | Projetos de Gordon
scruss
3
Eu testei isso com um osciloscópio. Acho que o problema com Gordon é que ele usa o driver do kernel, que controla a velocidade do relógio, em vez de comandar diretamente o processador sem usar o driver do kernel.
Nakedible
2
Este tópico do fórum fornece mais informações para provar a resposta do Nakedible: raspberrypi.org/phpBB3/…
Nippey
5

O SPI pode ser executado na velocidade do clock principal ou dividido em periféricos mais lentos. O clock do núcleo é de 250 MHz. O divisor pode ser definido com qualquer potência de dois - de 2 ^ 0 até 2 ^ 16. Isso significa que as frequências SPI de 3,8 kHz a 250 MHz são suportadas.

Fontes:

Maria Zverina
fonte
1
Talvez - Farhad está adquirindo folhas de dados para BCM2835, que é o SoC real para RPi, enquanto minha referência é para o BCM2708, que é apenas parte do SoC. As fontes podem convergir ... mas, novamente, talvez não. Então, acho melhor preservar fontes alternativas por enquanto.
Maria Zverina
1
Ah e area51 nos lista como tendo 1,7 respostas por pergunta e afirma "2,5 respostas por pergunta são boas, apenas 1 resposta por pergunta precisa de algum trabalho. Em um site saudável, as perguntas recebem várias respostas e a melhor resposta é votada para o topo". :-)
Maria Zverina 28/06
1
Resposta incorreta: 2 ^ 0 não é suportado e o divisor não precisa ser uma potência de dois.
Nakedible
1
@ Nakedible você pode fornecer fonte para suas declarações?
Maria Zverina
1
A folha de dados bcm2835 confirma o ponto 2 ^ 0. raspberrypi.org/wp-content/uploads/2012/02/… Isso também é confirmado por define na biblioteca bcm2835. open.com.au/mikem/bcm2835 Quanto à falta de energia de dois divisores, a errata da folha de dados menciona que possivelmente múltiplos de 2 foram feitos. elinux.org/BCM2835_datasheet_errata Isso também foi publicado em algum fórum em que qualquer múltiplo de 2 parece funcionar. Tudo isso também foi confirmado testando a saída SPI em hardware real. Veja minha resposta abaixo, que especifica isso exatamente.
Nakedible 01/11/12
4

A folha de dados do BCM2835 diz o seguinte na página 120: O valor do registro de relógio do bloco SPI contém.

BC Clock Divider SCLK = Relógio Principal / CDIV Se CDIV estiver definido como 0, o divisor é 65536. O divisor deve ter uma potência de 2. Números ímpares arredondados para baixo. A taxa máxima de clock do SPI é do clock do APB.

Não consigo encontrar nenhuma referência ao que é a frequência máxima do barramento APB, acho que faz parte da documentação do ARM11 e não deste SoC.

FarhadA
fonte
1
Obrigado pela referência; Eu acredito que a página é 156? CDIV parece ter 16b de largura, então vai de 1 a 65536. "Core clock" é provavelmente o 700MHz? Então teríamos alcance de ~ 10,7kHz até o misterioso limite de APB?
akavel
1
De nada, mas receio que este relógio não seja o relógio principal. É o barramento APB: "O APB foi projetado para acessos de controle de baixa largura de banda, por exemplo, interfaces de registro nos periféricos do sistema. Esse barramento tem uma fase de endereço e dados semelhante ao AHB, mas uma lista de sinais de complexidade muito reduzida e reduzida (por exemplo, sem rajadas) ). Ele precisa suportar sinais de 32 bits e 66 MHz. "
FarhadA
4

Eu testei com o como visto em http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html e alterei a velocidade.

A velocidade máxima quando o teste foi aprovado é 15MHz = 15000KHz: Veja o resultado:

spi mode: 0
bits per word: 8
max speed: 15000000 Hz (15000 KHz)

FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

O teste em 16MHz falhou. André

andré
fonte
1
O meu funcionou bem em 32MHz = 32.000KHz. Já vi aqui mencionado que esse também é o limite prático. Estou executando o firmware RPi mais recente no hard float Raspbian, se isso faz diferença.
Dodgy_coder 27/08
Tendo o RPi 3 executando esse teste a 60MHz com sucesso.
Vlad