Can4linux

Från Wikipedia, den fria encyklopedin
Hoppa till navigation Hoppa till sökning

can4linux är en CAN -enhetsdrivrutin med öppen källkod för Linux -kärnan . Utvecklingen började i mitten av 1990-talet för CAN-kontrollmodulen Philips 82C200 på en ISA- kort AT-CAN-MINI. Den första versionen skapades runt 1995 som en del av Linux Lab -projektet vid Free University of Berlin för att kunna använda CAN -bussen i laboratorieautomatiseringen under Linux.

På grund av den ökande spridningen av CAN inom automationsteknik, särskilt i det inbäddade området, där Linux också har använts alltmer sedan millennieskiftet, används enhetsdrivrutiner som grund för högre CAN-baserade protokoll som CANopen , J1939 och DeviceNet . ökad betydelse.

Förutom NXP SJA1000 som efterträdare till Philips 82C200 CAN-styrenheten och Intel 82527 skapades allt fler anpassningar för så kallade integrerade CAN-styrenheter i högpresterande mikrokontroller som Linux-portar fanns för från 2005 och framåt. Freescale ColdFire-processorer eller ARM-derivat från ATMEL [1] och Freescale [2] men också den fristående CAN-styrenheten MCP2515, [3] anslutna via SPI- bussen, fungerar som exempel.

En lista finns på can4linux -projektsidan. [4]

Den senaste versionen stöder ett virtuellt CAN -driftläge där applikationer utan särskild CAN -hårdvara endast kan utbyta meddelanden via CAN -drivrutinen. I detta driftläge är ramformatet för CAN FD [5] redan implementerat, vilket tillåter datalängder på upp till 64 byte.

använda sig av

Programvaran öppnar en CAN -enhetsbeskrivning och tar emot en filbeskrivning. Detta används för att utbyta CAN -ramar med andra deltagare på CAN -bussen med standardoperativsystemets funktioner read() och write() .

Följande kod är ett exempel som skickar en ram och sedan väntar på en ram från en annan bussdeltagare. Ytterligare exempel finns på projektsidan. [6]

 / * enkelt CAN -applikationsexempel
*
* används för Wikipedia -artikeln om can4linux
* /
#inkludera <stdio.h>
#inkludera <fcntl.h>
#inkludera <unistd.h>

#inkludera <can4linux.h>

int main ( int argc , char ** argv )
{
    int fd ;
    canmsg_t ram ;

    fd = open ( " / dev / can0" , O_RDWR );

    ram . id = 100 ;
    ram . längd = 2 ;
    ram . data [ 0 ] = 5 ;
    ram . data [ 1 ] = 0 ;
    skriva ( fd , & ram , 1 ); / *! count innehåller antal ramar, inte byte * /

    läs ( fd , & ram , 1 ); / *! count innehåller antal ramar, inte byte * /
    printf ( "mottaget CAN Frame ID% ld, DLC =% d \ n " , frame . id , frame . length );
    returnera 0 ;
}

can4linux kan översättas så att olika processer kan läsa och skriva till samma CAN -styrenhet. På detta sätt, för. B. Förutom själva applikationen kan en oberoende diagnostisk process övervaka bussen.

Se även

webb-länkar

Individuella bevis

  1. ATMEL SAM9263
  2. Freescale i.MX35 familj
  3. Stand Alone CAN MCP2515
  4. can4linux -projektsida
  5. CAN FD -specifikation (PDF; 624 kB)
  6. Online can4linux-exempel