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.

Linki zewnętrzne