CAN/CAN 기초

CAN FD 및 최신 CAN XL 기술 심화 분석

임베디드 친구 2025. 3. 12. 09:17
728x90
반응형

CAN FD 및 최신 CAN XL 기술 심화 분석

1. CAN FD란?

1.1 CAN FD의 개념

CAN FD(Flexible Data-Rate)는 기존의 CAN(Controller Area Network) 프로토콜을 확장한 통신 방식으로, 데이터 속도와 프레임 크기를 증가시켜 성능을 향상시킨 기술입니다. 기존 CAN과 비교하여 다음과 같은 차이점이 있습니다.

  • 데이터 속도 증가: 기존 CAN에서는 최대 1 Mbps의 속도를 제공했으나, CAN FD에서는 8 Mbps까지 속도를 증가시킬 수 있습니다.
  • 확장된 데이터 페이로드: 기존 CAN의 데이터 필드는 최대 8바이트였지만, CAN FD는 최대 64바이트까지 확장할 수 있습니다.
  • 기존 CAN 네트워크와 호환 가능: CAN FD는 기존 CAN 네트워크와 일부 호환되며, 하위 호환성을 유지하면서도 더 높은 성능을 제공합니다.

1.2 CAN FD의 주요 특징

  • 가변 데이터 속도(Flexible Data-Rate): 데이터 페이로드가 증가함에 따라 속도를 동적으로 변경할 수 있습니다.
  • 신뢰성 높은 데이터 전송: ECC(Error Correction Code) 및 CRC(Cyclic Redundancy Check)를 활용하여 오류 검출 기능을 강화하였습니다.
  • 효율적인 대역폭 활용: 데이터 프레임 크기를 늘려 하나의 메시지에 더 많은 정보를 포함할 수 있어 통신 효율이 증가합니다.

1.3 CAN FD 프레임 구조

CAN FD 프레임은 기존 CAN 프레임과 유사하지만, 몇 가지 차이점이 존재합니다.

  • FDF (Flexible Data-Rate Format) 비트 추가: CAN FD 프레임에서는 기존 CAN과 구별할 수 있도록 FDF 비트를 추가하였습니다.
  • BRS (Bit Rate Switching) 비트 사용: 속도 변경을 위한 BRS 비트가 도입되어 데이터 페이로드 전송 속도를 증가시킬 수 있습니다.
  • CRC 필드 강화: 데이터 길이가 증가함에 따라 CRC 검사를 위한 필드가 확장되었습니다.

2. ESP32에서 MCP2517FD를 이용한 CAN FD 구현

2.1 CAN FD의 활용 사례

CAN FD는 다양한 산업 분야에서 활용되며, 특히 자동차 및 산업 자동화 시스템에서 중요한 역할을 합니다.

  • 자동차 전자 시스템: ADAS(Advanced Driver Assistance Systems), ECU(Electronic Control Unit) 간의 고속 통신
  • 산업 자동화: 로봇 제어, 공장 자동화 시스템에서 신속한 데이터 전송
  • 의료 기기: 실시간 데이터 전송이 필요한 의료 기기 네트워크

2.2 ESP32 IDF에서 MCP2517FD를 이용한 CAN FD 송수신 예제

ESP32 자체는 CAN FD를 지원하지 않지만, MCP2517FD 같은 외부 CAN FD 컨트롤러를 SPI 인터페이스를 통해 제어할 수 있습니다.

CAN FD 설정 및 초기화 코드 (ESP32 + MCP2517FD)

#include <stdio.h>
#include "driver/spi_master.h"
#include "driver/gpio.h"
#define SPI_HOST HSPI_HOST
#define PIN_NUM_MISO 19
#define PIN_NUM_MOSI 23
#define PIN_NUM_CLK  18
#define PIN_NUM_CS   5

spi_device_handle_t spi;

void setup_can_fd() {
    spi_bus_config_t buscfg = {
        .miso_io_num = PIN_NUM_MISO,
        .mosi_io_num = PIN_NUM_MOSI,
        .sclk_io_num = PIN_NUM_CLK,
        .quadwp_io_num = -1,
        .quadhd_io_num = -1
    };

    spi_device_interface_config_t devcfg = {
        .clock_speed_hz = 10000000, // 10MHz
        .mode = 0,
        .spics_io_num = PIN_NUM_CS,
        .queue_size = 7
    };

    spi_bus_initialize(SPI_HOST, &buscfg, SPI_DMA_CH_AUTO);
    spi_bus_add_device(SPI_HOST, &devcfg, &spi);
    printf("CAN FD (MCP2517FD) 초기화 완료\n");
}

CAN FD 메시지 송신 코드

void send_can_fd_message() {
    uint8_t tx_data[64] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
    spi_transaction_t t = {
        .length = sizeof(tx_data) * 8,
        .tx_buffer = tx_data,
    };
    spi_device_transmit(spi, &t);
    printf("CAN FD 메시지 송신 완료\n");
}

CAN FD 메시지 수신 코드

void receive_can_fd_message() {
    uint8_t rx_data[64];
    spi_transaction_t t = {
        .length = sizeof(rx_data) * 8,
        .rx_buffer = rx_data,
    };
    spi_device_transmit(spi, &t);
    printf("CAN FD 메시지 수신 완료: ");
    for (int i = 0; i < 8; i++) {
        printf("0x%X ", rx_data[i]);
    }
    printf("\n");
}

3. CAN XL(Extra Long) 개념과 기존 CAN과의 차이점

3.1 CAN XL 개요

CAN XL(Extra Long)은 CAN FD보다 더욱 확장된 기능을 제공하는 차세대 CAN 프로토콜입니다.

3.2 CAN XL과 기존 CAN의 차이점

  • 더 긴 데이터 페이로드: 최대 2048바이트까지 데이터 전송이 가능합니다.
  • 향상된 속도: 10 Mbps 이상의 속도를 지원
  • 하이브리드 네트워크 지원: 기존 CAN 및 CAN FD와 함께 사용될 수 있도록 설계

4. CAN XL이 자동차 이더넷과 경쟁하는 방식

비교 항목 CAN XL 자동차 이더넷
속도 최대 10 Mbps 이상 100 Mbps ~ 1 Gbps
데이터 페이로드 최대 2048바이트 제한 없음
실시간 성능 매우 우수 우수하지만 일부 지연 가능
비용 상대적으로 저렴 상대적으로 고가

5. 결론

CAN FD와 CAN XL은 기존 CAN 프로토콜의 한계를 극복하면서도, 자동차 및 산업 자동화에서 더욱 강력한 성능을 제공하는 차세대 통신 기술입니다. ESP32는 CAN FD를 직접 지원하지 않지만, MCP2517FD 같은 외부 컨트롤러를 사용하여 CAN FD를 구현할 수 있습니다. 향후 CAN XL이 자동차 및 산업 자동화 분야에서 더 많은 역할을 할 것으로 예상됩니다.

728x90
반응형