Can4linux
can4linux to sterownik urządzenia Open Source CAN Linux-Kernel . Prace nad samodzielnym chipem kontrolera CAN Philips 82C200 rozpoczęto w połowie lat 90. na ISA AT-CAN-MINI. W 1995 roku powstała pierwsza wersja wykorzystująca magistralę CAN z Linuksem do automatyzacji laboratoriów jako projekt Linux Lab Project na FU Berlin .
Rosnące rozpowszechnienie technologii magistrali CAN w automatyzacji, zwłaszcza w urządzeniach wbudowanych , oraz rozwój Linuksa w tej dziedzinie prowadzi do rosnącego znaczenia sterowników urządzeń jako podstawy dla protokołów wyższych warstw CAN, takich jak CANopen , J1939 i DeviceNet .
Oprócz NXP SJA1000 jako następcy pierwszego obsługiwanego kontrolera CAN Philips 82C200 i Intel 82527, od 2005 roku zintensyfikowano prace nad potężnymi mikrokontrolerami ze zintegrowanymi kontrolerami CAN, które są w stanie obsługiwać system operacyjny Linux . Jako przykłady tego rozwoju służą firmy Freescale Procesory ColdFire czy modele ARM firm ATMEL i Freescale, ale także samodzielny kontroler CAN MCP2515, połączony magistralą SPI . Lista obsługiwanych kontrolerów CAN jest dostępna na stronie projektu can4linux.
W najnowszej wersji zaimplementowano wirtualny tryb CAN, który pozwala aplikacjom komunikować się bez sprzętu CAN, ale tylko za pomocą warstwy oprogramowania sterownika urządzenia . Ten tryb obejmuje już obsługę nowego formatu ramek CAN o nazwie CAN FD, który umożliwia długość ramek danych do 64 bajtów.
Stosowanie
Oprogramowanie aplikacyjne otwiera deskryptor urządzenia CAN i zwraca deskryptor pliku. Używając tego deskryptora pliku, standardowe funkcje systemu operacyjnego, takie jak read()
i write()
są używane do wymiany ramek CAN z innymi węzłami CAN na szynie CAN.
Poniższy kod jest przykładem, który umieszcza ramkę CAN na magistrali, a następnie czeka na ramkę CAN przesłaną przez inny węzeł CAN. Więcej przykładów jest dostępnych na stronie projektu can4linux.
0
0
0
/* przykład prostej aplikacji CAN * * użyte w artykule Wikipedii na temat can4linux */ #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <can4linux.h> int main ( int argc , char ** argv ) { int fd ; ramka canmsg_t ; /* open(), szybkość transmisji pochodzi z parametrów w proc/sys/dev/Can */ fd = open ( "/dev/can0" , O_RDWR ); rama . identyfikator = 100 ; rama . długość = 2 ; rama . dane [ ] = 5 ; rama . dane [ 1 ] = ; napisz ( fd , & ramka , 1 ); /* ! liczba to liczba ramek, a nie bajt */ odczyt ( fd , & ramka , 1 ); /* ! liczba to liczba ramek, a nie bajt */ printf ( " odebrano identyfikator ramki CAN %ld, DLC=%d \ n " , frame.id , frame.length ); powrót ; }
can4linux można skompilować w sposób, który umożliwia więcej niż jednemu procesowi dostęp do tego samego sprzętu kontrolera CAN w celu odczytu i zapisu ramek na szynie CAN. Oprócz rzeczywistej aplikacji inne procesy, takie jak rejestratory danych lub inne procesy diagnostyczne, mogą uzyskać dostęp do magistrali.