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.