Actions

KAmodRPi CAN-FD (PL): Difference between revisions

From Kamamilabs.com - Wiki

No edit summary
 
(32 intermediate revisions by the same user not shown)
Line 1: Line 1:
__jzpdf__
__jzpdf__
===== Opis =====
====== Opis ======
<b>KAmod CAN-FD </b> jest kompletnym interfejsem magistrali CAN bazującym na zaawansowanym kontrolerze CAN typu MCP2518FD. Zastosowany układ odpowiada za formowanie prawidłowych ramek wysyłanych na magistralę, oraz buforowanie danych przesłanych do, oraz z magistrali CAN. Dzięki tym cechom może współpracować niemal z dowolnym komputerkiem SBC lub mikrokontrolerem. Komunikacja po stronie CAN może odbywać się z prędkością do 1 Mbps w trybie CAN 2.0 lub do 8 Mbps w trybie CAN FD. Komunikacja z kontrolerem odbywa się poprzez 4-przewodowy interfejs SPI (MISO, MOSI, SCK, CE) oraz dodatkowy sygnał przerwania (INT). Wszystkie sygnały są doprowadzone do 40 stykowego złącza w taki sposób, że 2 moduły mogą działać jednocześnie z jednym komputerkiem Raspberry Pi 5.
<b>[https://kamami.pl/moduly-komunikacyjne/1189248--kamodrpi-can-fd-interfejs-can-kompatybilny-z-can-20-oraz-can-fd-dla-raspberry-pi-i-nie-tylko-5906623481477.html KAmodRPi CAN-FD] </b> jest kompletnym interfejsem magistrali CAN bazującym na zaawansowanym kontrolerze CAN typu MCP2518FD. Zastosowany układ odpowiada za formowanie prawidłowych ramek wysyłanych na magistralę, oraz buforowanie danych przesłanych do, oraz z magistrali CAN. Dzięki tym cechom może współpracować niemal z dowolnym komputerkiem SBC lub mikrokontrolerem. Komunikacja po stronie CAN może odbywać się z prędkością do 1 Mbps w trybie CAN 2.0 lub do 8 Mbps w trybie CAN FD. Komunikacja z kontrolerem odbywa się poprzez 4-przewodowy interfejs SPI (MISO, MOSI, SCK, CE) oraz dodatkowy sygnał przerwania (INT). Wszystkie sygnały są doprowadzone do 40 stykowego złącza w taki sposób, że 2 moduły mogą działać jednocześnie z jednym komputerkiem Raspberry Pi 5.
<center>
<center>
[[File:KAmodCAN-FD.jpg|none|800px|thumb|center]]
[[File:KAMOD_CAN_FD_1.jpg|none|900px|thumb|center]]
</center>
</center>
===== Podstawowe parametry =====
===== Podstawowe parametry =====
* Interfejs magistrali CAN, kompatybilny z CAN 2.0 oraz CAN FD
* Interfejs magistrali CAN, kompatybilny z CAN 2.0 oraz CAN FD
Line 13: Line 14:
* Dołączany rezystor terminujący 120 Ω
* Dołączany rezystor terminujący 120 Ω
* Diody LED sygnalizujące poprawne zasilanie oraz komunikację
* Diody LED sygnalizujące poprawne zasilanie oraz komunikację
* Kompatybilny z płytkami Raspberry Pi 5 oraz Raspberry Pi Zero
* Kompatybilny z płytkami Raspberry Pi 5 oraz innymi z rodziny Raspberry Pi
* Możliwość dołączenia dwóch modułów do jednego komputerka (komunikacja poprzez jeden interfejs SPI z oddzielnymi liniami CE0/CE1)
* Możliwość dołączenia dwóch modułów do jednego komputerka (komunikacja poprzez jeden interfejs SPI z oddzielnymi liniami CE0/CE1)
* Linie magistrali CAN dołączane poprzez złącze Phoenix MC 3,81 mm
* Linie magistrali CAN dołączane poprzez złącze Phoenix MC 3,81 mm
Line 175: Line 176:
</center>
</center>
Urządzenia w magistrali CAN, jak sama nazwa wskazuje, są połączone w topologii magistrali. Jest to jedna szyna, bez rozgałęzień, w której można wskazać dwa końce. Każdy koniec magistrali powinien być wyposażony w terminator magistrali – w przypadku magistrali CAN jest to rezystor o wartości <b>120 Ω</b>.
Urządzenia w magistrali CAN, jak sama nazwa wskazuje, są połączone w topologii magistrali. Jest to jedna szyna, bez rozgałęzień, w której można wskazać dwa końce. Każdy koniec magistrali powinien być wyposażony w terminator magistrali – w przypadku magistrali CAN jest to rezystor o wartości <b>120 Ω</b>.
Na płytce modułu znajduje się odpowiedni rezystor, który można dołączyć poprzez odpowiednie ustawienie zworki <b>J4<b>:
Na płytce modułu znajduje się odpowiedni rezystor, który można dołączyć poprzez odpowiednie ustawienie zworki <b>J4</b>:
:* zwarcie szpilek 1-2, oznacza, że rezystor terminujący 120 Ω jest dołączony pomiędzy liniami CANL i CANH (jak na rysunku);
:* zwarcie szpilek 1-2, oznacza, że rezystor terminujący 120 Ω jest dołączony pomiędzy liniami CANL i CANH (jak na rysunku);
:* zwarcie szpilek 2-3, lub usunięcie zworki powoduje odłączenie rezystora terminującego.
:* zwarcie szpilek 2-3, lub usunięcie zworki powoduje odłączenie rezystora terminującego.
Line 196: Line 197:
|}
|}
</center>
</center>
W trakcie prób i testów komunikacji poprzez CAN, może istnieć potrzeba odcinania dostępu do magistrali, aby testowana aplikacja nie zakłócała komunikacji innych urządzeń. Moduł KAmod CAN-FD zawiera transceiver typu <b>MCP2542FD</b>, który dostosowuje strumień danych z kontrolera CAN do parametrów elektrycznych magistrali. Szybkim sposobem odcięcia dostępu do magistrali, bez modyfikacji okablowania, jest wyłączenie transceivera – ustawienie trybu uśpienia standby. Za pomocą szpilek <b>J6</b> można w łatwy sposób włączyć/wyłączyć transceiver:
W trakcie prób i testów komunikacji poprzez CAN, może istnieć potrzeba odcinania dostępu do magistrali, aby testowana aplikacja nie zakłócała komunikacji innych urządzeń. Moduł KAmod CAN-FD zawiera transceiver typu <b>MCP2542FD</b>, który dostosowuje strumień danych z kontrolera CAN do parametrów elektrycznych magistrali. Szybkim sposobem odcięcia dostępu do magistrali, bez modyfikacji okablowania, jest wyłączenie transceivera – ustawienie trybu uśpienia ''standby''. Za pomocą szpilek <b>J6</b> można w łatwy sposób włączyć/wyłączyć transceiver:
:* zwarcie szpilek 1-2: transceiver aktywny (jak na rysunku),
:* zwarcie szpilek 1-2: transceiver aktywny (jak na rysunku),
:* zwarcie szpilek 2-3: transceiver w trybie uśpienia standby.
:* zwarcie szpilek 2-3: transceiver w trybie uśpienia ''standby''.
<center>
<center>
[[File:KAmodCAN-FD_7.jpg|none|500px|thumb|center]]
[[File:KAmodCAN-FD_7.jpg|none|500px|thumb|center]]
Line 258: Line 259:
{| class="wikitable"  style="width: 1000px;"
{| class="wikitable"  style="width: 1000px;"
|-
|-
! style="text-align: center;"|Złącze
! style="text-align: center;"|Typ
! style="text-align: center;"|Funkcja
! style="text-align: center;"|Funkcja
|-
|-
| style="text-align: center;"|<b>RX<br>TC<br>V</b>
| style="text-align: center;"|<b>RX<br>TX<br>V</b>
| style="text-align: left;"|
| style="text-align: left;"|
* RX – sygnalizacja odczytu danych z magistrali CAN
* RX – sygnalizacja odczytu danych z magistrali CAN
Line 268: Line 269:
|}
|}
</center>
</center>
Diody LED <b>RX</b> i <b>TX</b> sygnalizują stan aktywny – czyli niski stan logiczny (stan dominujący na magistrali CAN), odpowiednio na wyjściu i wejściu transceivera CAN. W przypadku przesyłania danych na magistralę, będą migały obie diody – TX oraz RX, ponieważ dane są jednocześnie odczytywane przez transceiver. Dioda V sygnalizuje obecność napięcia kontrolera CAN.
Diody LED <b>RX</b> i <b>TX</b> sygnalizują stan aktywny – czyli niski stan logiczny (stan dominujący na magistrali CAN), odpowiednio na wyjściu i wejściu transceivera CAN. W przypadku przesyłania danych na magistralę, będą migały obie diody – TX oraz RX, ponieważ dane są jednocześnie odczytywane przez transceiver. Dioda '''V''' sygnalizuje obecność napięcia kontrolera CAN.
<center>
<center>
[[File:KAmodCAN-FD_10.jpg|none|500px|thumb|center]]
[[File:KAmodCAN-FD_10.jpg|none|500px|thumb|center]]
<br>
<br>
</center>
</center>
=====Wymiary=====
=====Wymiary=====
Wymiary modułu interfejsu KAmod CAN-FD to 65x30 mm, i wysokość ok. 25 mm. Moduł jest kompatybilny z płytkami Raspberry Pi 5 oraz Raspberry Pi Zero.
Wymiary modułu interfejsu KAmod CAN-FD to 65x30 mm, i wysokość ok. 25 mm. Moduł jest kompatybilny z płytkami Raspberry Pi 5 oraz Raspberry Pi Zero.
<center>
<center>
[[File:KAmodCAN-FD_11.jpg|none|500px|thumb|center]]
[[File:KAmodCAN-FD_11.jpg|none|600px|thumb|center]]
<br>
<br>
</center>
</center>
===== Linki=====
===== Linki=====
*[https://wiki.kamamilabs.com/images/f/fc/MCP2518.pdf Karta katalogowa układu MCP2518]
*[https://wiki.kamamilabs.com/images/f/fc/MCP2518.pdf Karta katalogowa układu MCP2518]
Line 301: Line 304:
=====Instalowanie pakietu narzędzi dla interfejsu CAN=====
=====Instalowanie pakietu narzędzi dla interfejsu CAN=====
Uruchamiamy okno terminala, np. za pomocą klawiszy ''Ctrl+Alt+T'', a następnie wpisujemy komendę:<br>
Uruchamiamy okno terminala, np. za pomocą klawiszy ''Ctrl+Alt+T'', a następnie wpisujemy komendę:<br>
'''<pre style="color: blue">sudo apt-get install can-utils</pre>'''  
'''<pre style="color: #0033ff">sudo apt-get install can-utils</pre>'''  


Czekamy do zakończenia i potwierdzamy wszystkie zapytania.
Czekamy do zakończenia i potwierdzamy wszystkie zapytania.
Line 307: Line 310:
=====Konfigurowanie interfejsu CAN=====
=====Konfigurowanie interfejsu CAN=====
Uruchamiamy okno terminala, np. za pomocą klawiszy ''Ctrl+Alt+T''. W programie do edycji plików tekstowych nano otwieramy plik config.txt, wpisując komendę:<br>
Uruchamiamy okno terminala, np. za pomocą klawiszy ''Ctrl+Alt+T''. W programie do edycji plików tekstowych nano otwieramy plik config.txt, wpisując komendę:<br>
'''<pre style="color: blue">sudo nano /boot/firmware/config.txt</pre>'''  
'''<pre style="color: #0033ff">sudo nano /boot/firmware/config.txt</pre>'''  
(we wcześniejszych wersjach systemu Raspbian, plik ''config.txt'' jest tu: /boot/config.txt)
(we wcześniejszych wersjach systemu Raspbian, plik ''config.txt'' jest tu: <code>/boot/config.txt</code>)
<br><br>
<br><br>
Sprawdzamy, czy linia o treści:
Sprawdzamy, czy linia o treści:
'''<pre style="color: blue">dtparam=spi=on</pre>'''  
'''<pre style="color: #0033ff">dtparam=spi=on</pre>'''  
nie ma znaku # jeśli tak, to usuwamy znak #
nie ma znaku # jeśli tak, to usuwamy znak #
<br><br>
<br><br>
Na końcu pliku dopisujemy:
Na końcu pliku dopisujemy:
'''<pre style="color: blue">dtoverlay=mcp251xfd,spi0-0,oscillator=40000000,interrupt=25</pre>'''  
'''<pre style="color: #0033ff">dtoverlay=mcp251xfd,spi0-0,oscillator=40000000,interrupt=25</pre>'''  
Wpis ten odnosi się do ustawienia zworek na płytce modułu (J7: 1-2; J8: 1-2)
Wpis ten odnosi się do ustawienia zworek na płytce modułu (J7: 1-2; J8: 1-2)
<br><br>
<br><br>
Jeśli zamierzamy dołączyć dwa moduły interfejsu CAN, to należy dopisać kolejną linię:<br>
Jeśli zamierzamy dołączyć dwa moduły interfejsu CAN, to należy dopisać kolejną linię:<br>
'''<pre style="color: blue">dtoverlay=mcp251xfd,spi0-1,oscillator=40000000,interrupt=24</pre>'''  
'''<pre style="color: #0033ff">dtoverlay=mcp251xfd,spi0-1,oscillator=40000000,interrupt=24</pre>'''  
Wpis ten odnosi się do ustawienia zworek na płytce modułu (J7: 2-3; J8: 2-3)<br><br>
Wpis ten odnosi się do ustawienia zworek na płytce modułu (J7: 2-3; J8: 2-3)<br><br>
<center>
<center>
Line 325: Line 328:
<br>
<br>
</center>
</center>
Zapisujemy zmiany naciskając 'Ctrl+O' i potwierdzając klawiszem 'Enter', a następnie zamykamy edytor naciskając 'Ctrl+X'
Zapisujemy zmiany naciskając ''Ctrl+O'' i potwierdzając klawiszem ''Enter'', a następnie zamykamy edytor naciskając ''Ctrl+X''


=====Restartowanie systemu=====
=====Restartowanie systemu=====
Restartujemy system, np. za pomocą polecenia:<br>
Restartujemy system, np. za pomocą polecenia:<br>
'''<pre style="color: blue">sudo reboot'''</pre style>
'''<pre style="color: #0033ff">sudo reboot'''</pre style>


=====Sprawdzenie konfiguracji=====
=====Sprawdzenie konfiguracji=====
Uruchamiamy okno terminala, np. za pomocą klawiszy ''Ctrl+Alt+T''. Wpisujemy polecenie:
Uruchamiamy okno terminala, np. za pomocą klawiszy ''Ctrl+Alt+T''. Wpisujemy polecenie:
<code>dmesg | grep spi</code><br>
'''<pre style="color: #0033ff">dmesg | grep spi</pre style>
 
które wyświetli informacje dotyczące interfejsu SPI zebrane w czasie uruchamiania systemu:
które wyświetli informacje dotyczące interfejsu SPI zebrane w czasie uruchamiania systemu:
<br><br>
<br><br>
Line 340: Line 344:
<br>
<br>
</center>
</center>
<br>Jeśli wszystko zostało prawidłowo skonfigurowane powinniśmy zobaczyć dwa wpisy (lub jeden, jeśli zamontowano tylko jeden moduł): ''mcp251xfd spi0.0 oraz mcp251xfd spi0.0. ''co oznacza, że kontrolery CAN zostały prawidłowo zainicjowane – ''successfully initialized''. <br><br>
<br>Jeśli wszystko zostało prawidłowo skonfigurowane powinniśmy zobaczyć dwa wpisy (lub jeden, jeśli zamontowano tylko jeden moduł): ''mcp251xfd spi0.0 oraz mcp251xfd spi0.1. ''co oznacza, że kontrolery CAN zostały prawidłowo zainicjowane – ''successfully initialized''. <br><br>
Teraz należy wpisać polecenie: <br>
Teraz należy wpisać polecenie: <br>
'''<pre style="color: blue">ifconfig -a'''</pre style>
'''<pre style="color: #0033ff">ifconfig -a'''</pre style>
które listę dostępnych interfejsów sieciowych – Ethernet, Wi-Fi oraz właśnie CAN:
które wyświetli listę dostępnych interfejsów sieciowych – Ethernet, Wi-Fi oraz właśnie CAN:
<br><br>
<br><br>
<center>
<center>
Line 354: Line 358:
<br><br>
<br><br>
<center>
<center>
[[File:KAmodCAN-FD_f6_0.jpg|none|600px|thumb|center]]
[[File:KAmodCAN-FD_f6_0.jpg|none|700px|thumb|center]]
<br>
<br>
</center>
</center>


Uruchamiamy okno terminana, np. za pomocą klawiszy Ctrl+Alt+T. Aktywujemy magistralę CAN poleceniem:
Uruchamiamy okno terminana, np. za pomocą klawiszy ''Ctrl+Alt+T''. Aktywujemy magistralę CAN poleceniem:
'''<pre style="color: blue">sudo ip link set can0 up type can bitrate 1000000'''</pre style>
'''<pre style="color: #0033ff">sudo ip link set can0 up type can bitrate 1000000'''</pre style>
gdzie:
gdzie:
can0 - to numer interfejsu, dla drugiego modułu będzie can1
''can0'' - to numer interfejsu, dla drugiego modułu będzie ''can1''<br>
bitrate 1000000 - oznacza prędkość komunikacji, w tym przypadku ustawiamy 1 Mbps
''bitrate 1000000'' - oznacza prędkość komunikacji, w tym przypadku ustawiamy 1 Mbps


Dla drugiego modułu należy wpisać analogiczne polecenie:
Dla drugiego modułu należy wpisać analogiczne polecenie:
'''<pre style="color: blue">sudo ip link set can1 up type can bitrate 1000000'''</pre style>
'''<pre style="color: #0033ff">sudo ip link set can1 up type can bitrate 1000000'''</pre style>


Teraz otwieramy drugi terminal – w jednym oknie będziemy obserwować dane odebrane za pomocą jednego interfejsu CAN (np. can0), a w drugim oknie będziemy wysyłać ramki danych za pomocą drugiego interfejsu CAN (np. can1).
Teraz otwieramy drugi terminal – w jednym oknie będziemy obserwować dane odebrane za pomocą jednego interfejsu CAN (np. ''can0''), a w drugim oknie będziemy wysyłać ramki danych za pomocą drugiego interfejsu CAN (np. ''can1'').
W pierwszym oknie wpisujemy polecenie:
W pierwszym oknie wpisujemy polecenie:
'''<pre style="color: blue">candump can0'''</pre style>
'''<pre style="color: #0033ff">candump can0'''</pre style>
które sprawia, że interfejs can0 wyświetla w terminalu wszystkie odebrane dane.
które sprawia, że interfejs can0 wyświetla w terminalu wszystkie odebrane dane.


W drugim oknie wpisujemy polecenie:
W drugim oknie wpisujemy polecenie:
'''<pre style="color: blue">cansend can1 456#214234'''</pre style>
'''<pre style="color: #0033ff">cansend can1 456#214234'''</pre style>


Efekt widać na poniższych zrzutach ekranów:
Efekt widać na poniższych zrzutach ekranów:
Line 387: Line 391:
<br><br>
<br><br>
Aby zmienić parametry komunikacji należy najpierw dezaktywować magistrale CAN poleceniami
Aby zmienić parametry komunikacji należy najpierw dezaktywować magistrale CAN poleceniami
'''<pre style="color: blue">sudo ifconfig can0 down
'''<pre style="color:#0033ff">sudo ifconfig can0 down'''</pre style>
sudo ifconfig can1 down'''</pre style>
'''<pre style="color: #0033ff">sudo ifconfig can1 down'''</pre style>
 
=====Test komunikacji w trybie CAN FD=====
Standard CAN2.0 pozwala na przesłanie do 8 bajtów danych z prędkością do 1 Mbps. Standard CAN FD (Controller Area Network Flexible Data-Rate) pozwala na przesyłanie do 64 bajtów danych w jednej ramce, poprzez zwiększenie szybkości komunikacji wewnątrz ramki - w czasie przesyłania danych, do 8 Mbps:
<br><br>
<center>
[[File:KAmodCAN-FD_12.jpg|none|700px|thumb|center]]
<br>
</center>
Moduł KAmod CAN-FD jest kompatybilny ze standardem CAN FD. Aby przetestować moduł w tym trybie należy wykonać następujące czynności.<br><br>


=====Test komunikacji trybie CAN FD=====
Uruchamiamy okno terminana, np. za pomocą klawiszy Ctrl+Alt+T. Aktywujemy magistralę CAN poleceniem:
'''<pre style="color: #0033ff">sudo ip link set can0 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd on'''</pre style>
<br>
Analogicznie postępujemy z drugą magistralą:
'''<pre style="color: #0033ff">sudo ip link set can1 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd on'''</pre style>
<br>
Teraz użyjemy narzędzia do generowania losowych ramek CAN – cangen. W oknie pierwszego terminala wpisujemy polecenie:
'''<pre style="color: #0033ff">cangen can0 -mv'''</pre style>
<br>
W oknie drugiego terminala wpisujemy polecenie:
'''<pre style="color: #0033ff">candump can1'''</pre style>
<br>
Efekt jest widoczny na poniższym zrzucie ekranu:
<br><br>
<center>
[[File:KAmodCAN-FD_f8.jpg|none|600px|thumb|center]]
<br>
</center>
Wśród wygenerowanych ramek widać takie, które nie niosą żadnych danych, tylko sam identyfikator oraz takie, które niosą 20 bajtów danych – zgodnie z możliwościami CAN FD.

Latest revision as of 08:24, 2 November 2024

Opis

KAmodRPi CAN-FD jest kompletnym interfejsem magistrali CAN bazującym na zaawansowanym kontrolerze CAN typu MCP2518FD. Zastosowany układ odpowiada za formowanie prawidłowych ramek wysyłanych na magistralę, oraz buforowanie danych przesłanych do, oraz z magistrali CAN. Dzięki tym cechom może współpracować niemal z dowolnym komputerkiem SBC lub mikrokontrolerem. Komunikacja po stronie CAN może odbywać się z prędkością do 1 Mbps w trybie CAN 2.0 lub do 8 Mbps w trybie CAN FD. Komunikacja z kontrolerem odbywa się poprzez 4-przewodowy interfejs SPI (MISO, MOSI, SCK, CE) oraz dodatkowy sygnał przerwania (INT). Wszystkie sygnały są doprowadzone do 40 stykowego złącza w taki sposób, że 2 moduły mogą działać jednocześnie z jednym komputerkiem Raspberry Pi 5.

Podstawowe parametry
  • Interfejs magistrali CAN, kompatybilny z CAN 2.0 oraz CAN FD
  • Bazuje na kontrolerze CAN typu MCP2518FD
  • Komunikacja poprzez interfejs SPI z maksymalnym taktowaniem 20 MHz
  • Interfejs SPI działający z napięciem 3,3 V lub 5 V
  • Prędkość komunikacji (bit rate): 125 kbps...1 Mbps (500 kbps…8 Mbps w trybie FD)
  • Dołączany rezystor terminujący 120 Ω
  • Diody LED sygnalizujące poprawne zasilanie oraz komunikację
  • Kompatybilny z płytkami Raspberry Pi 5 oraz innymi z rodziny Raspberry Pi
  • Możliwość dołączenia dwóch modułów do jednego komputerka (komunikacja poprzez jeden interfejs SPI z oddzielnymi liniami CE0/CE1)
  • Linie magistrali CAN dołączane poprzez złącze Phoenix MC 3,81 mm
  • Zabezpieczenie przed przepięciami na liniach magistrali CAN
  • Zasilanie 5 V, 100 mA
  • Wymiary płytki 65x30 mm, wysokość ok. 25 mm
Wyposażenie standardowe
Kod Opis
KAmod CAN-FD Zmontowany i uruchomiony moduł


Schemat elektryczny
Złącze sterujące
Złącze Funkcja
J1

Szpilki goldpin 1x6, 2,54 mm

  • Wyprowadzone sygnały sterujące kontrolera CAN
  • Wejście zasilania

Kontroler CAN typu MCP2518FD jest sterowany poprzez interfejs SPI. Poprzez SPI odbywa się konfigurowanie parametrów pracy oraz przesyłanie danych do i z kontrolera. Dodatkowo kontroler udostępnia kilka dodatkowych sygnałów - przerwań, które pozwalają szybko reagować na określone zdarzenia. Wszystkie linie działają z napięciem 3,3 V, ale opcjonalnie można je skonfigurować do pracy z napięciem 5 V.
Funkcje sygnałów na złączu J1 są następujące:

  • szpilki nr 1 i 2: +5V - wejście zasilania o napięciu 4,5...5,5 V;
  • szpilka nr 3: VIO – opcjonalne wejście zasilania dla napięcia 3,3...5 V, jeśli sygnały sterujące mają działać z napięciem wyższym niż 3,3 V;
  • szpilka nr 4: GND – masa zasilania i sygnałowa;
  • szpilka nr 5: TINT – wyjście przerwania INT0 (TX Interrupt output), aktywne w stanie niskim;
  • szpilka nr 6: CE – wejście wyboru układu interfejsu SPI (SPI chip select input), aktywne w stanie niskim;
  • szpilka nr 7: RINT – wyjście przerwania INT1 (RX Interrupt output), aktywne w stanie niskim;
  • szpilka nr 8: SCK – wejście sygnału zegarowego interfejsu SPI kontrolera CAN (SPI clock input);
  • szpilka nr 9: SOF – wyjście sygnalizujące start ramki (Start of Frame output);
  • szpilka nr 10: MISO – wyjście danych SPI kontrolera CAN (SPI data output);
  • szpilka nr 11: INT – główne wyjście przerwania, aktywne w stanie niskim;
  • szpilka nr 12: MOSI – wejście danych SPI kontrolera CAN (SPI data input);
Złącze GPIO w standardzie Raspberry Pi
Złącze Funkcja
J2

Złącze goldpin 2x20, 2,54 mm

  • Wyprowadzone sygnały sterujące kontrolera CAN, dołączone do odpowiednich styków złącza GPIO
  • Wejście zasilania, dołączone do odpowiednich styków złącza GPIO

Sygnały sterujące kontrolerem CAN zostały doprowadzone do odpowiednich styków złącza J2 (oraz równolegle do złącza J1), które jest kompatybilne ze standardem złącza GPIO płytek Raspberry Pi. Dzięki temu moduł KAmod CAN-FD można łatwo dołączyć do SBC Raspberry Pi. Rozmieszczenie sygnałów sterujących na złączu GPIO jest następujące:

  • pozycja nr 2 oznaczona „3V3” - zwarcie szpilek 3-4 oznacza, że szeregowy interfejs sterujący jest dostosowany do napięcia 3,3 V, które jest dostarczane ze zintegrowanego na płytce stabilizatora napięcia;
  • styki 2 i 4: +5V – zasilanie 5 V doprowadzone ze złącza GPIO;
  • styki 6, 9, 14, 20, 25, 30, 34, 39 – masa GND doprowadzona ze złącza GPIO;
  • styk 18: GPIO24 – może być połączony z sygnałem INT (zależy od ustawienia zworki J7);
  • styk 22: GPIO25 – może być połączony z sygnałem INT (zależy od ustawienia zworki J7);
  • styk 24: GPIO08 – może być połączony z sygnałem CE (zależy od ustawienia zworki J8);
  • styk 26: GPIO07 – może być połączony z sygnałem CE (zależy od ustawienia zworki J8);
  • styk 19: GPIO10 – połączony z sygnałem MOSI - wejście danych SPI kontrolera CAN;
  • styk 19: GPIO09 – połączony z sygnałem MISO - wyjście danych SPI kontrolera CAN;
  • styk 19: GPIO11 – połączony z sygnałem SCK - wejście zegarowe SPI kontrolera CAN;


Podłączenie dwóch modułów interfejsu CAN
Złącze Funkcja
J7, J8

Szpilki goldpin + jumper 1x3, 2,54 mm

  • Wybór kanału interfejsu SPI dla kontrolera CAN (sygnały CE0/CE1 na złączu GPIO)
  • Wybór wejścia dla przerwania INT z kontrolera CAN (sygnały GPIO24/GPIO25 na złączu GPIO)

Moduł KAmod CAN-FD jest sterowany poprzez interfejs szeregowy SPI, który może obsługiwać kilka kontrolerów w jednej aplikacji. Każdy kontroler powinien mieć przypisaną dla siebie linię wyboru CE (Chip Enable). Na złączu GPIO Raspberry Pi są dostępne dwie linie CE – CE0 oraz CE1. Za pomocą zworki J8 można wybrać, z której linii CE będzie korzystał kontroler CAN na płytce modułu KAmod CAN-FD:

  • zwarcie szpilek 1-2 J8: ustawia linię CE0, jako linię wyboru kontrolera (jak na rysunku),
  • zwarcie szpilek 2-3 J8: ustawia linię CE1, jako linię wyboru kontrolera.

Kontroler CAN typu MCP2518FD, do prawidłowego działania wymaga obsługi przerwania ustawianego stanem na linii INT. Aby umożliwić działanie dwóch kontrolerów CAN, sygnał INT można dołączyć do jednego z dwóch styków złącza GPIO, za pomocą zworki J7:

  • zwarcie szpilek 1-2 J7: sygnał INT połączony z linią GPIO25 (jak na rysunku),
  • zwarcie szpilek 2-3 J7: sygnał INT połączony z linią GPIO24.



Złącze magistrali CAN
Złącze Funkcja
J3 - CAN

Phoenix MC 3,81 mm

  • Złącze magistrali CAN

Złącze magistrali CAN zawiera 3 styki: CANL, CANH oraz GND. Ich rozmieszczenie jest opisane na płytce modułu, styk GND to styk środkowy. Każdy styk należy dołączyć do magistrali CAN zgodnie z oznaczeniem. Sygnał GND powinien być dołączony do wspólnej masy zasilania urządzeń połączonych magistralą CAN.


Przebiegi napięć na magistrali CAN pokazuje poniższy rysunek:


Dołączenie rezystora terminującego
Złącze Funkcja
J4

Szpilki goldpin + jumper 1x3, 2,54 mm

  • Dołączenie rezystora terminującego 120 Ω

Urządzenia w magistrali CAN, jak sama nazwa wskazuje, są połączone w topologii magistrali. Jest to jedna szyna, bez rozgałęzień, w której można wskazać dwa końce. Każdy koniec magistrali powinien być wyposażony w terminator magistrali – w przypadku magistrali CAN jest to rezystor o wartości 120 Ω. Na płytce modułu znajduje się odpowiedni rezystor, który można dołączyć poprzez odpowiednie ustawienie zworki J4:

  • zwarcie szpilek 1-2, oznacza, że rezystor terminujący 120 Ω jest dołączony pomiędzy liniami CANL i CANH (jak na rysunku);
  • zwarcie szpilek 2-3, lub usunięcie zworki powoduje odłączenie rezystora terminującego.


Wyłączenie transceivera magistrali CAN
Złącze Funkcja
J6

Szpilki goldpin + jumper 1x3, 2,54 mm

  • Włączenie/wyłączenie transceivera magistrali CAN

W trakcie prób i testów komunikacji poprzez CAN, może istnieć potrzeba odcinania dostępu do magistrali, aby testowana aplikacja nie zakłócała komunikacji innych urządzeń. Moduł KAmod CAN-FD zawiera transceiver typu MCP2542FD, który dostosowuje strumień danych z kontrolera CAN do parametrów elektrycznych magistrali. Szybkim sposobem odcięcia dostępu do magistrali, bez modyfikacji okablowania, jest wyłączenie transceivera – ustawienie trybu uśpienia standby. Za pomocą szpilek J6 można w łatwy sposób włączyć/wyłączyć transceiver:

  • zwarcie szpilek 1-2: transceiver aktywny (jak na rysunku),
  • zwarcie szpilek 2-3: transceiver w trybie uśpienia standby.


Monitorowanie strumieni danych TX i RX
Złącze Funkcja
J5

Szpilki goldpin + jumper 1x3, 2,54 mm

  • Monitorowanie strumieni danych nadawanych i odbieranych z magistrali CAN

Na złączu J5 modułu KAmod CAN-FD, wyprowadzone są sygnały strumieni danych wysyłanych z kontrolera i do kontrolera CAN. Są to zwykłe sygnały logiczne, dlatego można je łatwo monitorować i rejestrować np. za pomocą analizatora logicznego. Poziom napięcia sygnałów odpowiada napięciu VIO. Monitorowanie tych sygnałów może być przydatne na etapie uruchamiania aplikacji i wyszukiwania błędów. Rozmieszczenie sygnałów jest następujące:

  • szpilka nr 1: G – masa sygnałów,
  • szpilka nr 2: R – strumień danych odebranych z magistrali CAN,
  • szpilka nr 3: T – strumień danych wysyłanych do magistrali CAN z kontrolera.


Zasilanie i napięcie sygnałów sterujących VIO
Złącze Funkcja
J1

Szpilki goldpin 2x6, 2,54 mm

  • Wejście zasilania
  • Ustawienie napięcia sygnałów sterujących VIO

Zastosowany w module KAmod CAN-FD transceiver CAN (MCP2542FD) wymaga zasilania o napięciu z zakresu 4,5...5,5 V, które należy dołączyć do złącza J1, do styków +5V i GND. Natomiast zasilanie kontrolera CAN (MCP2518FD), może być niższe – musi zawierać się w zakresie 3...5,5 V. Napięcie sygnałów sterujących na złączu J1 będzie takie samo, jak napięcie zasilania kontrolera.

Kontroler CAN jest zasilany napięciem 3,3 V z wbudowanego w moduł stabilizatora napięcia. Napięcie to jest wyprowadzone na styku VIO złącza J1. Podając na styk VIO napięcie wyższe niż 3 V, np. 5 V, można uzyskać wyższe napięcie sygnałów sterujących – np. 5V.

Funkcje styków zasilania na złączu J1 są następujące:

  • szpilki nr 1 i 2: +5V - wejście zasilania o napięciu 4,5...5,5 V;
  • szpilka nr 3: VIO – opcjonalne wejście zasilania dla napięcia 3,3...5 V, jeśli sygnały sterujące mają działać z napięciem wyższym niż 3,3 V;
  • szpilka nr 4: GND – masa zasilania i sygnałowa;


Diody sygnalizacyjne
Typ Funkcja
RX
TX
V
  • RX – sygnalizacja odczytu danych z magistrali CAN
  • TX – sygnalizacja nadawania danych na magistralę
  • V – sygnalizacja napięcia kontrolera CAN

Diody LED RX i TX sygnalizują stan aktywny – czyli niski stan logiczny (stan dominujący na magistrali CAN), odpowiednio na wyjściu i wejściu transceivera CAN. W przypadku przesyłania danych na magistralę, będą migały obie diody – TX oraz RX, ponieważ dane są jednocześnie odczytywane przez transceiver. Dioda V sygnalizuje obecność napięcia kontrolera CAN.


Wymiary

Wymiary modułu interfejsu KAmod CAN-FD to 65x30 mm, i wysokość ok. 25 mm. Moduł jest kompatybilny z płytkami Raspberry Pi 5 oraz Raspberry Pi Zero.


Linki

Uruchomienie modułu z komputerkiem Raspberry Pi 5

Uruchomienie interfejsu CAN z połączeniu z komputerkiem Raspberry Pi 5 wymaga wykonania następujących kroków.

Odblokowanie interfejsu SPI

Uruchamiamy program do konfiguracji Raspberry Pi – Raspberry Pi Configuration
Wybieramy zakładkę Interfaces, a tam przełączamy w pozycję aktywną przełącznik przy SPI. Zapisujemy i zamykamy program.



Instalowanie pakietu narzędzi dla interfejsu CAN

Uruchamiamy okno terminala, np. za pomocą klawiszy Ctrl+Alt+T, a następnie wpisujemy komendę:

sudo apt-get install can-utils

Czekamy do zakończenia i potwierdzamy wszystkie zapytania.

Konfigurowanie interfejsu CAN

Uruchamiamy okno terminala, np. za pomocą klawiszy Ctrl+Alt+T. W programie do edycji plików tekstowych nano otwieramy plik config.txt, wpisując komendę:

sudo nano /boot/firmware/config.txt

(we wcześniejszych wersjach systemu Raspbian, plik config.txt jest tu: /boot/config.txt)

Sprawdzamy, czy linia o treści:

dtparam=spi=on

nie ma znaku # jeśli tak, to usuwamy znak #

Na końcu pliku dopisujemy:

dtoverlay=mcp251xfd,spi0-0,oscillator=40000000,interrupt=25

Wpis ten odnosi się do ustawienia zworek na płytce modułu (J7: 1-2; J8: 1-2)

Jeśli zamierzamy dołączyć dwa moduły interfejsu CAN, to należy dopisać kolejną linię:

dtoverlay=mcp251xfd,spi0-1,oscillator=40000000,interrupt=24

Wpis ten odnosi się do ustawienia zworek na płytce modułu (J7: 2-3; J8: 2-3)


Zapisujemy zmiany naciskając Ctrl+O i potwierdzając klawiszem Enter, a następnie zamykamy edytor naciskając Ctrl+X

Restartowanie systemu

Restartujemy system, np. za pomocą polecenia:

sudo reboot
Sprawdzenie konfiguracji

Uruchamiamy okno terminala, np. za pomocą klawiszy Ctrl+Alt+T. Wpisujemy polecenie:

dmesg | grep spi

które wyświetli informacje dotyczące interfejsu SPI zebrane w czasie uruchamiania systemu:



Jeśli wszystko zostało prawidłowo skonfigurowane powinniśmy zobaczyć dwa wpisy (lub jeden, jeśli zamontowano tylko jeden moduł): mcp251xfd spi0.0 oraz mcp251xfd spi0.1. co oznacza, że kontrolery CAN zostały prawidłowo zainicjowane – successfully initialized.

Teraz należy wpisać polecenie:

ifconfig -a

które wyświetli listę dostępnych interfejsów sieciowych – Ethernet, Wi-Fi oraz właśnie CAN:


Test komunikacji

Najprostszy test komunikacji można wykonać mając dwa moduły interfejsu CAN KAmod CAN-FD podłączone do jednego komputerka Raspberry Pi 5. Jednak analogicznie będzie przebiegał test z dwoma komputerkami wyposażonymi w interfejs KAmod CAN-FD.


Uruchamiamy okno terminana, np. za pomocą klawiszy Ctrl+Alt+T. Aktywujemy magistralę CAN poleceniem:

sudo ip link set can0 up type can bitrate 1000000

gdzie: can0 - to numer interfejsu, dla drugiego modułu będzie can1
bitrate 1000000 - oznacza prędkość komunikacji, w tym przypadku ustawiamy 1 Mbps

Dla drugiego modułu należy wpisać analogiczne polecenie:

sudo ip link set can1 up type can bitrate 1000000

Teraz otwieramy drugi terminal – w jednym oknie będziemy obserwować dane odebrane za pomocą jednego interfejsu CAN (np. can0), a w drugim oknie będziemy wysyłać ramki danych za pomocą drugiego interfejsu CAN (np. can1). W pierwszym oknie wpisujemy polecenie:

candump can0

które sprawia, że interfejs can0 wyświetla w terminalu wszystkie odebrane dane.

W drugim oknie wpisujemy polecenie:

cansend can1 456#214234

Efekt widać na poniższych zrzutach ekranów:



Polecenie cansend can1 456#214234 powoduje wysłanie ramki CAN o identyfikatorze 456 z 3 bajtami danych: 21, 42 i 34. W standardzie CAN 2.0B identyfikator ma długość 29 bitów, a ramka może zawierać do 8 bajtów danych. Polecenie candump can0 monitoruje stan magistrali i wyświetla wszystkie odebrane ramki danych. Aby przerwać działanie tego procesu należy nacisnąć Ctrl+C.

Aby zmienić parametry komunikacji należy najpierw dezaktywować magistrale CAN poleceniami

sudo ifconfig can0 down
sudo ifconfig can1 down
Test komunikacji w trybie CAN FD

Standard CAN2.0 pozwala na przesłanie do 8 bajtów danych z prędkością do 1 Mbps. Standard CAN FD (Controller Area Network Flexible Data-Rate) pozwala na przesyłanie do 64 bajtów danych w jednej ramce, poprzez zwiększenie szybkości komunikacji wewnątrz ramki - w czasie przesyłania danych, do 8 Mbps:


Moduł KAmod CAN-FD jest kompatybilny ze standardem CAN FD. Aby przetestować moduł w tym trybie należy wykonać następujące czynności.

Uruchamiamy okno terminana, np. za pomocą klawiszy Ctrl+Alt+T. Aktywujemy magistralę CAN poleceniem:

sudo ip link set can0 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd on


Analogicznie postępujemy z drugą magistralą:

sudo ip link set can1 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd on


Teraz użyjemy narzędzia do generowania losowych ramek CAN – cangen. W oknie pierwszego terminala wpisujemy polecenie:

cangen can0 -mv


W oknie drugiego terminala wpisujemy polecenie:

candump can1


Efekt jest widoczny na poniższym zrzucie ekranu:


Wśród wygenerowanych ramek widać takie, które nie niosą żadnych danych, tylko sam identyfikator oraz takie, które niosą 20 bajtów danych – zgodnie z możliwościami CAN FD.