반응형

Configure a SocketCAN Interface

# ls /sys/class/net
can0  can1  eth0  lo
  • can0, can1을 사용할 수 있지만 활성화되어 있지는 않습니다.

 

# ifconfig -a
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:29

can1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:31

eth0      Link encap:Ethernet  HWaddr B2:06:10:A8:3D:F7
          inet addr:192.168.13.63  Bcast:192.168.13.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4122 errors:0 dropped:961 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:358370 (349.9 KiB)  TX bytes:0 (0.0 B)
          Interrupt:35

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
  • 사용 가능한 네트워크 인터페이스를 확인합니다

 

# ip link set can0 up type can bitrate 500000
  • can0 을 활성화 하려면 위와 같이 설정합니다.

 

# ip -details link show can0
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 minmtu 0 maxmtu 0
    can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
        bitrate 500000 sample-point 0.875
        tq 12 prop-seg 69 phase-seg1 70 phase-seg2 20 sjw 1 brp 1
        m_can: tseg1 2..256 tseg2 2..128 sjw 1..128 brp 1..512 brp_inc 1
        m_can: dtseg1 1..32 dtseg2 1..16 dsjw 1..16 dbrp 1..32 dbrp_inc 1
        clock 80000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

 

  • can0 세부 설정 정보 확인합니다

 

# ip link set can0 down
  • can0 비활성화 방법

 

SocketCAN : Example C code

 

#include <net/if.h>
#include <sys/ioctl.h>
#include <linux/can.h>
#include <linux/can/raw.h>
#include <unistd.h> 
#include <cstring> 
#include <iostream>
#include <cstdlib>

int main() 
{
    int s;
    struct sockaddr_can addr;
    struct ifreq ifr;
    struct can_frame frame;

    system("ip link set can0 up type can bitrate 500000"); 

    s = socket(PF_CAN, SOCK_RAW, CAN_RAW);

    strcpy(ifr.ifr_name, "can0");
    ioctl(s, SIOCGIFINDEX, &ifr);

    addr.can_family = AF_CAN;
    addr.can_ifindex = ifr.ifr_ifindex;

    bind(s, (struct sockaddr *)&addr, sizeof(addr));

    frame.can_id = 0x123; 
    frame.can_dlc = 4; 
    frame.data[0] = 0xFF; 
    frame.data[1] = 0xFF; 
    frame.data[2] = 0xFF; 
    frame.data[3] = 0xFF; 

    write(s, &frame, sizeof(struct can_frame));

    close(s);

    system("ip link set can0 down"); 
}
반응형

'임베디드 개발 노트' 카테고리의 다른 글

ARM assembly  (0) 2025.02.20
Basic #1  (0) 2024.08.26
ALSA  (0) 2023.12.21
Automotive SPICE (업데이트 中)  (0) 2023.06.20
CAN (업데이트 中)  (0) 2023.06.20

+ Recent posts