Powrót

Szybkość SPI w Arduino na ARM

Faktem jest, że można doprowadzić do sytuacji, iż 32-bitowy ARM 48 MHz będzie wolniejszy niż 8-bitowy AVR 16 MHz. Nie jest to łatwe, ale Arduino skutecznie poradzi sobie z takim nietypowym zadaniem… Wymiana mikrokontrolera na szybszy nie zawsze spowoduje szybsze działanie programu.

W ZE 10/2023 pojawił się artykuł wyjaśniający mit szybkości interfejsu SPI w AVR. W przeciwieństwie do AVR, w STM32 faktycznie można osiągnąć katalogowe szybkości transmisji. Zastanawiało mnie czy Arduino z STM32 jest w stanie je osiągnąć. To skłoniło mnie do dokładniejszego zbadania tegoż zagadnienia tak z czystej ciekawości, bo intuicyjnie odczuwałem, że „para pójdzie w gwizdek”. Jednak niektóre testy bardzo mnie zaskoczyły.

Co będzie potrzebne?

Płytka NUCLEO/Discovery (artykuł oparłem na NUCLEO 071RB, ale może to być dowolna inna obsługiwana przez Arduino). Zainstalowany pakiet ArduinoIDE (w testach używałem 2.2.1), CubeIDE (używałem 1.9.0) oraz oscyloskop cyfrowy lub analizator logiczny (w testach użyłem analizatora LA2016).

Testy z Arduino

Program:

#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() {
  const uint8_t buffer[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
  digitalWrite(SPI_SS, LOW);
  SPI.transfer((uint8_t*)buffer, sizeof(buffer));
  digitalWrite(SPI_SS, HIGH);
 
  delay(1);
}

Sposób podłączenia analizatora do płytki NUCLEO pokazuje rysunek 1 i fotografia tytułowa.

Rysunek 1

 

Wynik testów w analizatorze

Na rysunku 2 zaznaczono czas transmisji wyznaczony sygnałem wyboru układu (SS – kanał 0) wynoszący 19us.

Rysunek 2

Markerami na rysunku 3 zmierzono czas transmisji ośmiu bitów (235 ns) oraz przerwy między transmisjami wynoszące 1,28 us. Jak widać przerwy są ponad pięć razy dłuższe od samej transmisji. Czyli, zgodnie z powiedzeniem „para idzie w gwizdek”.

Rysunek 3

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze grudniowym czasopisma Zrozumieć Elektronikę (ZE 12/2023). Pełna wersja czasopisma umieszczona jest pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 12/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.