KAmodRPi CAN-FD (PL): Difference between revisions
From Kamamilabs.com - Wiki
No edit summary |
|||
(29 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
__jzpdf__ | __jzpdf__ | ||
===== Opis ===== | ====== Opis ====== | ||
<b> | <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: | [[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 | * 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;"| | ! style="text-align: center;"|Typ | ||
! style="text-align: center;"|Funkcja | ! style="text-align: center;"|Funkcja | ||
|- | |- | ||
| style="text-align: center;"|<b>RX<br> | | 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| | [[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: | '''<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: | '''<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: | '''<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: | '''<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: | '''<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: | '''<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: | ||
< | '''<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. | <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: | '''<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| | [[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: #0033ff">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: #0033ff">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: #0033ff">candump can0'''</pre style> | '''<pre style="color: #0033ff">candump can0'''</pre style> | ||
Line 390: | Line 394: | ||
'''<pre style="color: #0033ff">sudo ifconfig can1 down'''</pre style> | '''<pre style="color: #0033ff">sudo ifconfig can1 down'''</pre style> | ||
=====Test komunikacji trybie CAN FD===== | =====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: | 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><br> | ||
<center> | <center> | ||
[[File:KAmodCAN-FD_12.jpg|none| | [[File:KAmodCAN-FD_12.jpg|none|700px|thumb|center]] | ||
<br> | <br> | ||
</center> | </center> | ||
Line 404: | Line 408: | ||
Analogicznie postępujemy z drugą magistralą: | 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> | '''<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: | 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> | '''<pre style="color: #0033ff">cangen can0 -mv'''</pre style> | ||
<br> | |||
W oknie drugiego terminala wpisujemy polecenie: | W oknie drugiego terminala wpisujemy polecenie: | ||
'''<pre style="color: #0033ff">candump can1'''</pre style> | '''<pre style="color: #0033ff">candump can1'''</pre style> | ||
<br> | |||
Efekt jest widoczny na poniższym zrzucie ekranu: | |||
<br><br> | <br><br> | ||
<center> | <center> | ||
[[File:KAmodCAN-FD_f8.jpg|none|600px|thumb|center]] | [[File:KAmodCAN-FD_f8.jpg|none|600px|thumb|center]] |
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 |
|
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 |
|
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 |
|
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 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 |
|
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 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 |
|
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 |
|
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 |
|
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
- Karta katalogowa układu MCP2518
- Karta katalogowa układu MCP2542FD
- Artykuł na portalu MIKROKONTROLER.pl "Interfejs komunikacyjny CAN: podstawy"
- Repozytorium narzędzi Linux CAN
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.