Can4linux

can4linux är en öppen källkod CAN Linux-Kernel enhetsdrivrutin . Utvecklingen startade i mitten av 1990-talet för Philips 82C200 CAN-styrenhet fristående chip på ett ISA -kort AT-CAN-MINI. 1995 skapades den första versionen för att använda CAN-bussen med Linux för laboratorieautomatisering som ett projekt av Linux Lab Project vid FU Berlin .

Den ökande spridningen av CAN-fältbussteknologin för automatisering, särskilt i inbyggda enheter och tillväxten av Linux inom detta område leder till en växande betydelse av enhetsdrivrutiner som bas för högre lager CAN-protokoll som CANopen , J1939 och DeviceNet .

Förutom NXP SJA1000 som efterföljare till den första stödda CAN-kontrollern Philips 82C200 och Intel 82527, har utvecklingen av kraftfulla mikrokontroller med integrerade CAN-kontroller som kan köra Linux- operativsystemet intensifierats sedan 2005. Som exempel på denna utveckling tjänar Freescales ColdFire-processorer eller ARM-modeller från ATMEL och Freescale men även den fristående CAN-styrenheten MCP2515, ansluten via SPI Bus. En lista över CAN-styrenheter som stöds finns på can4linux-projektets webbplats.

I den senaste versionen finns ett virtuellt CAN-läge implementerat som tillåter applikationer att kommunicera utan CAN-hårdvara utan endast genom att använda enhetsdrivrutinen . Det här läget inkluderar redan stöd för det nya CAN-ramformatet som kallas CAN FD som tillåter dataramlängd upp till 64 byte.

Användande

Programvaran öppnar en CAN-enhetsbeskrivning och får tillbaka en filbeskrivning. Genom att använda den här filbeskrivningen används standardoperativsystemfunktioner som read() och write() för att utbyta CAN-ramar med andra CAN-noder på en CAN-buss.

Följande kod är ett exempel som sätter en CAN-ram på bussen och efteråt väntar på en CAN-ram som sänds av en annan CAN-nod. Fler exempel finns på can4linux-projektets webbplats.





 
 
 

 

   

     
     
    
    

       

           
       
    0  
      0
       

        
      
     0
 /* enkelt CAN-applikationsexempel  *  * används för Wikipedia-artikeln om can4linux  */  #include  <stdio.h>  #include  <fcntl.h>  #include  <unistd.h>  #include  <can4linux.h>  int  main  (  int  argc  ,  char  **  argv  )  {  int  fd  ;  canmsg_t  ram  ;  /* open(),  bithastighet kommer från parametrar vid proc/sys/dev/Can */  fd  =  open  (  "/dev/can0"  ,  O_RDWR  );  ram  .  id  =  100  ;  ram  .  längd  =  2  ;  ram  .  data  [  ]  =  5  ;  ram  .  data  [  1  ]  =  ;  skriv  (  fd  ,  &  ram  ,  1  );  /*! count är antalet ramar, inte byte */   read  (  fd  ,  &  frame  ,  1  );  /*! count är antalet ramar, inte byte */   printf  (  "mottaget CAN Frame Id %ld, DLC=%d \  n  "  ,  frame  .  id  ,  frame  .  length  );  återvända  ;  } 

can4linux kan kompileras på ett sätt som gör att mer än en process kan ha tillgång till samma CAN-styrenhetshårdvara för att läsa och skriva ramar på CAN-bussen. Förutom den verkliga applikationen kan andra processer som dataloggrar eller andra diagnosprocesser komma åt bussen.

externa länkar