Powrót

Jaka jest największa szybkość SPI w Arduino z AVR?

Czy AVR może faktycznie wysyłać dane po SPI z prędkością 8 Mb/s (dla zegara 16 MHz) oraz 10 Mb/s (dla 20 megaherców)? Odpowiedź znajdziemy w artykule. Przy okazji pokażę jak ogromnie ważnym narzędziem w warsztacie elektronika jest analizator logiczny.

W dokumentacji ARM można wyczytać, że maksymalna prędkość komunikacji po SPI to częstotliwość taktowania CPU dzielona przez dwa. Czy to prawda? Przyjrzyjmy się bliżej temu zagadnieniu

Co będzie potrzebne?

Arduino UNO i analizator logiczny lub oscyloskop, najlepiej cyfrowy. Ze względu na to, że wielu amatorów nie posiada oscyloskopu w testach posłużę się analizatorem logicznym, którego zakup nie nadwyręży budżetu amatora (najtańszy analizator można kupić za około 50 zł).

Pierwszy program testowy

#include <SPI.h>

#define SPI_SS  10

void setup() {
  // put your setup code here, to run once:
  pinMode( SPI_SS, OUTPUT);

  // initialize SPI:
  SPI.begin();
  SPI.setDataMode( SPI_MODE1 );
  SPI.setClockDivider(SPI_CLOCK_DIV2);


void loop() {
  // put your main code here, to run repeatedly:

  digitalWrite( SPI_SS, LOW );
  for (uint8_t x = 0; x < 10; x++) {
    SPI.transfer( x );
  }
  digitalWrite( SPI_SS, HIGH );

  delay(100);
}

Prościej chyba się nie da. Program wysyła 10 bajtów po SPI z maksymalną dostępną prędkością, co 100 ms. Dane zarejestrowane przez analizator pokazano na rysunku 1. Pomiar czasu trwania aktywnego sygnału SS (czerwona elipsa) daje wynik blisko 21 μs. Widać też niepokojące przerwy pomiędzy transmisjami (pomarańczowa elipsa).

Rysunek 1

Jaka jest częstotliwość zegarowa SPI? Z rysunku 2 łatwo wywnioskować, że 8 MHz, tak jak deklaruje producent.

Rysunek 2

Jaka jest rzeczywista przepływność danych? Z rysunku 3 można wyliczyć, że niewiele ponad 5,1 Mb/s.

Rysunek 3

Wyjaśnię jeszcze obliczenia 1/(0,0000155656)*8*10. 1/x to wzór przeliczający czas na częstotliwość, 0,0000155656 to 15,5656μs wyrażone w sekundach, *8 bo jeden bajt ma 8 bitów, *10 bo transmitowane jest 10 bajtów.

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze październikowym czasopisma Zrozumieć Elektronikę (ZE 10/2023). Pełna wersja czasopisma umieszczona jest pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 10/2023 znajduje się tutaj.

 

SaS, ZE
sas.ze@vp.pl

 

Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (Cappuccino = 10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać:
– jeśli jeden numer ZE – CAPPUCINO (10 zł),
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiadomość dla Twórcy” i tu wpisać, który numer lub numery mamy wysłać na podany adres e-mailowy.