Frekuensi SPI apa yang didukung Raspberry Pi?

22

Apa SPI frekuensi yang didukung Raspberry Pi?

Selain itu:

  • Apakah mereka semua didukung oleh driver SPI bootc.net ?
  • Adakah hal tambahan yang harus saya waspadai ketika mencoba berkomunikasi dengan beberapa chip lain melalui SPI?
alias
sumber

Jawaban:

21

Raspberry Pi SPI bekerja pada kecepatan clock APB, yang setara dengan kecepatan clock inti, 250 MHz. Ini dapat dibagi dengan angka genap dari 2 hingga 65536 untuk kecepatan yang diinginkan. Lembar data menentukan bahwa pembagi harus memiliki kekuatan dua, tetapi ini tidak benar . Angka ganjil dibulatkan ke bawah, dan 0 (atau 1) setara dengan 65536. Oleh karena itu pembagi yang lebih kecil dari 2 tidak mungkin.

Hal ini membuat rentang frekuensi antara 3,814 kHz hingga 125 MHz, dengan 32768 langkah di antaranya.

(Ada banyak informasi yang salah mengenai masalah ini, tetapi hasil ini telah diverifikasi oleh eksperimen. Harap sebarkan.)

Nakedible
sumber
1
Saya pikir jawaban ini seharusnya ada di atas.
Jon Watte
Apa kau yakin tentang ini? Gordon menegaskan bahwa, meski Anda dapat memberinya angka genap, hanya kekuatan dua yang benar-benar membuat perbedaan: Memahami SPI pada Raspberry Pi | Gordons Projects
scruss
3
Saya menguji ini dengan osiloskop. Saya pikir masalah dengan Gordon adalah bahwa ia menggunakan driver kernel, yang mengatur kecepatan clock, bukannya langsung memerintahkan prosesor tanpa menggunakan driver kernel.
Nakedible
2
Forum-Utas ini menyediakan informasi lebih lanjut untuk membuktikan jawaban Nakedible: raspberrypi.org/phpBB3/…
Nippey
5

SPI dapat dijalankan pada kecepatan clock inti atau dibagi ke bawah untuk periferal yang lebih lambat. Jam inti adalah 250 MHz. Pembagi dapat diatur ke kekuatan dua - dari 2 ^ 0 sampai 2 ^ 16. Ini berarti bahwa frekuensi SPI dari 3,8 kHz ke 250 MHz didukung.

Sumber:

Maria Zverina
sumber
1
Mungkin - Farhad mengambil sumber dari lembar data untuk BCM2835 yang merupakan SoC sebenarnya untuk RPi sementara referensi saya adalah untuk BCM2708 yang hanya merupakan bagian dari SoC. Sumber mungkin menyatu ... tapi sekali lagi mereka mungkin tidak. Jadi saya pikir lebih baik untuk melestarikan sumber alternatif untuk saat ini.
Maria Zverina
1
Oh dan area51 mencantumkan kami memiliki 1,7 jawaban per pertanyaan dan menyatakan "2,5 jawaban per pertanyaan baik, hanya 1 jawaban per pertanyaan yang memerlukan beberapa pekerjaan. Di situs yang sehat, pertanyaan menerima beberapa jawaban dan jawaban terbaik dipilih ke atas." :-)
Maria Zverina
1
Jawaban salah: 2 ^ 0 tidak didukung, dan pembagi tidak perlu menjadi kekuatan dua.
Nakedible
1
@Nakedible dapatkah Anda memberikan sumber untuk pernyataan Anda?
Maria Zverina
1
Lembar data bcm2835 mengkonfirmasi titik 2 ^ 0. raspberrypi.org/wp-content/uploads/2012/02/... Ini juga dikonfirmasi oleh definisi di perpustakaan bcm2835. open.com.au/mikem/bcm2835 Sedangkan untuk non power dua pembagi, datasheet errata menyebutkan bahwa mungkin beberapa dari dua yang dimaksud. elinux.org/BCM2835_datasheet_errata Ini juga diposting di beberapa forum yang kelipatan dari 2 tampaknya berfungsi. Semua ini juga telah dikonfirmasi dengan menguji output SPI pada perangkat keras nyata. Lihat jawaban saya di bawah ini yang menentukan ini dengan tepat.
Nakedible
4

The datasheet dari BCM2835 mengatakan sebagai berikut pada halaman 120: Nilai dari jam register blok SPI mengandung.

BC Clock Divider SCLK = Core Clock / CDIV Jika CDIV diatur ke 0, pembagi adalah 65536. Pembagi harus memiliki kekuatan 2. Angka ganjil dibulatkan ke bawah. Tingkat clock SPI maksimum adalah dari jam APB.

Saya tidak dapat menemukan referensi berapa frekuensi maksimum bus APB, saya pikir itu adalah bagian dari dokumentasi ARM11 dan bukan SoC ini.

FarhadA
sumber
1
Terima kasih untuk referensi; Saya yakin halamannya 156? Lebar CDIV tampaknya 16b, jadi mulai dari 1 hingga 65536. "Core clock" mungkin adalah 700MHz? Jadi kita akan mendapatkan rentang dari ~ 10,7 kHz hingga batas APB misterius?
aliasvel
1
Terima kasih banyak, tapi saya khawatir jam ini bukan jam inti. Ini adalah bus APB: "APB dirancang untuk akses kontrol bandwidth rendah, misalnya antarmuka register pada periferal sistem. Bus ini memiliki alamat dan fase data yang mirip dengan AHB, tetapi daftar sinyal dengan kompleksitas rendah yang sangat berkurang (misalnya tidak ada semburan ). Ini harus mendukung sinyal 32bit dan 66MHz. "
FarhadA
4

Saya telah menguji dengan seperti yang terlihat di http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html dan mengubah kecepatan.

Kecepatan maksimum ketika tes lulus adalah 15MHz = 15000KHz: Lihat hasil:

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

Tes di 16MHz gagal. André

andré
sumber
1
Milik saya berjalan ok pada 32MHz = 32.000KHz. Saya telah melihatnya disebutkan di sini bahwa ini adalah batas praktis juga. Saya menjalankan firmware RPi terbaru di Raspbian hard float jika itu membuat perbedaan.
dodgy_coder
RPi 3 berhasil menjalankan pengujian pada 60MHz.
Vlad