Jakie częstotliwości SPI obsługuje Raspberry Pi?

22

Jakie częstotliwości SPI obsługuje Raspberry Pi?

Dodatkowo:

  • Czy wszystkie są obsługiwane przez sterownik SPI bootc.net ?
  • Czy są jakieś dodatkowe rzeczy, na które powinienem uważać, próbując komunikować się z innym chipem za pośrednictwem SPI?
akavel
źródło

Odpowiedzi:

21

Raspberry Pi SPI działa z częstotliwością taktowania APB, co odpowiada szybkości taktowania rdzenia, 250 MHz. Można to podzielić na dowolną liczbę parzystą od 2 do 65536 dla żądanej prędkości. Arkusz danych określa, że ​​dzielnik musi mieć potęgę dwóch, ale jest to niepoprawne . Liczby nieparzyste są zaokrąglane w dół, a 0 (lub 1) odpowiada 65536. Dzielnik mniejszy niż 2 jest zatem niemożliwy.

To sprawia, że ​​zakres częstotliwości wynosi od 3,814 kHz do 125 MHz, z krokiem 32768 pomiędzy nimi.

(Było wiele dezinformacji w tej sprawie, ale wyniki te zostały zweryfikowane przez eksperymenty. Proszę rozpowszechniać informacje.)

Nagi
źródło
1
Myślę, że ta odpowiedź powinna być na górze.
Jon Watte
Jesteś tego pewien? Gordon zapewnia, że ​​chociaż można go podać dowolną liczbę parzystą, tylko potęgi dwóch mają znaczenie: Zrozumienie SPI na Raspberry Pi | Gordons Projects
scruss
3
Przetestowałem to za pomocą oscyloskopu. Myślę, że problem z Gordonem polega na tym, że używa sterownika jądra, który zmienia szybkość zegara, zamiast bezpośrednio sterować procesorem bez użycia sterownika jądra.
Nakedible
2
Ten wątek na forum zawiera dodatkowe informacje potwierdzające odpowiedź Nakedible: raspberrypi.org/phpBB3/…
Nippey
5

Interfejs SPI można uruchamiać z częstotliwością taktowania rdzenia lub podzielić na wolniejsze urządzenia peryferyjne. Zegar rdzenia wynosi 250 MHz. Dzielnik można ustawić na dowolną potęgę dwóch - od 2 ^ 0 aż do 2 ^ 16. Oznacza to, że obsługiwane są częstotliwości SPI od 3,8 kHz do 250 MHz.

Źródła:

Maria Zverina
źródło
1
Być może - Farhad pozyskuje dane z arkusza danych dla BCM2835, który jest rzeczywistym SoC dla RPi, podczas gdy moje referencje dotyczą BCM2708, który jest tylko częścią SoC. Źródła mogą się zbiegać ... ale z drugiej strony mogą nie. Myślę więc, że lepiej zachować na razie alternatywne źródła.
Maria Zverina,
1
Aha, area51 podaje nam 1,7 odpowiedzi na pytanie i stwierdza: „2,5 odpowiedzi na pytanie jest dobre, tylko 1 odpowiedź na pytanie wymaga trochę pracy. W zdrowej witrynie pytania otrzymują wiele odpowiedzi, a najlepszą odpowiedź głosuje się na górę”. :-)
Maria Zverina
1
Niepoprawna odpowiedź: 2 ^ 0 nie jest obsługiwane, a dzielnik nie musi być potęgą dwóch.
Nakedible
1
@Nakedible czy możesz podać źródło swoich wyciągów?
Maria Zverina,
1
Arkusz danych bcm2835 potwierdza punkt 2 ^ 0. raspberrypi.org/wp-content/uploads/2012/02/... Potwierdzają to również definicje w bibliotece bcm2835. open.com.au/mikem/bcm2835 Jeśli chodzi o brak mocy dwóch dzielników, w arkuszu danych errata wspomniano, że prawdopodobnie oznaczono wielokrotność 2. elinux.org/BCM2835_datasheet_errata Zostało to również opublikowane na forum, że dowolna wielokrotność 2 wydaje się działać. Wszystko to zostało również potwierdzone przez testowanie wyjścia SPI na prawdziwym sprzęcie. Zobacz moją odpowiedź poniżej, która dokładnie to określa.
Nakedible
4

Datasheet od BCM2835 mówi następujących na stronie 120: Wartość rejestru zegara bloku SPI zawiera.

BC Clock Divider SCLK = Core Clock / CDIV Jeśli CDIV jest ustawiony na 0, dzielnikiem jest 65536. Dzielnikiem musi być potęga 2. Dziwne liczby zaokrąglone w dół. Maksymalna częstotliwość zegara SPI jest zgodna z zegarem APB.

Nie mogę znaleźć żadnego odniesienia do maksymalnej częstotliwości magistrali APB, myślę, że jest to część dokumentacji ARM11, a nie tego SoC.

FarhadA
źródło
1
Dzięki za referencje; Uważam, że strona to 156? CDIV wydaje się mieć szerokość 16b, więc zmienia się z 1 na 65536. „Zegar rdzenia” to prawdopodobnie 700 MHz? Czylibyśmy mieli zasięg od ~ 10,7 kHz do tajemniczego limitu APB?
akavel
1
Proszę bardzo, ale obawiam się, że ten zegar nie jest zegarem podstawowym. Jest to szyna APB: „APB został zaprojektowany do dostępu do kontroli niskiej przepustowości, na przykład interfejsów rejestru na peryferiach systemowych. Ta magistrala ma adres i fazę danych podobne do AHB, ale znacznie zmniejszoną listę sygnałów o niskiej złożoności (na przykład bez impulsów ). Musi obsługiwać sygnały 32-bitowe i 66 MHz. ”
FarhadA
4

Przetestowałem z jak widać na http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html i zmieniłem prędkość.

Maksymalna prędkość po przejściu testu wynosi 15 MHz = 15000 KHz: Zobacz wynik:

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

Test przy 16 MHz nie powiódł się. André

andré
źródło
1
Mój działał dobrze przy 32 MHz = 32 000 KHz. Widziałem już tutaj wspomniane , że jest to również praktyczny limit. Używam najnowszego oprogramowania układowego RPi na dysku twardym Raspbian, jeśli to robi różnicę.
dodgy_coder
Udane uruchomienie RPi 3 przy 60 MHz.
Vlad