본문으로 바로가기

STM32 bxCAN

category ComputerScience & Embedded/NUCLEO & CAN Tranceiver 2025. 3. 1. 20:16

STM32 bxCAN Introduction

STM32의 bxCAN(basic extended CAN) 모듈은 CAN 메시지의 송수신을 완전히 자동으로 처리

bxCAN 의 세부 명세는 레퍼런스 메뉴얼에서 추가적으로 확인

 

bxCAN의 주요 특징

  • CAN1(마스터)과 CAN2(슬레이브) 두 개의 CAN 컨트롤러 제공
  • CAN 프로토콜 2.0 A와 B 버전 지원 (표준 및 확장 CAN 네트워크 모두 사용 가능)
  • 최대 1Mbps의 비트레이트 지원 (클럭 설정에 따라 다름)
  • 3개의 송신 메일박스 제공 (한 번에 3개의 CAN 메시지 전송 가능)
  • 각 컨트롤러마다 3단계의 2개 수신 FIFO 제공
  • CAN1과 CAN2가 공유하는 28개의 필터 뱅크

 

bxCAN으로 할 수 있는 작업

  • 비트레이트, 비트 타이밍 등의 CAN 파라미터 설정
  • 메시지 전송 및 수신 처리
  • 수신은 하드웨어가 자동으로 처리 (필터링, FIFO로 데이터 이동)
  • 인터럽트 관리
    • 전송 완료 인터럽트
    • 수신 인터럽트
    • 에러 인터럽트
  • CAN 버스의 진단 정보 확인

 

듀얼 CAN 구조

NUCLEO-F446RE는 듀얼 CAN을 지원하며, CAN1과 CAN2 두 개의 CAN 컨트롤러를 포함

  • CAN1 (마스터)
  • CAN2 (슬레이브)

그러나, CAN 통신은 마스터-슬레이브 기반이 아닌 멀티마스터 방식

CubeMX 및 참고 매뉴얼에서는 CAN1을 마스터, CAN2를 슬레이브라고 표현하는데, 이는 CAN2의 기능적 제약 때문(혼동 주의!)

 

CAN1(마스터)과 CAN2(슬레이브)

  • CAN2는 SRAM에 직접 접근할 수 없어 슬레이브로 지칭
  • CAN2를 사용하려면 반드시 CAN1을 먼저 활성화해야 함
  • 두 컨트롤러 모두 CAN 2.0 A/B 사양 기반으로 동작

 

송수신 구조

기능 CAN1 (마스터) CAN2 (슬레이브)
TX Mailboxes 3개 3개
Receive FIFO FIFO0, FIFO1 (각 3개 메시지 저장 가능) FIFO0, FIFO1 (각 3개 메시지 저장 가능)
Filter Bank 28개 필터 뱅크 (각 2개 필터 포함) 공유 (CAN1 활성화 필요)
Transmission Scheduler 메시지 우선순위 결정 후 전송 동일
Interrupt Control 지원 지원
  • 송신(Tx) 메일박스 구조
    • CAN1과 CAN2 각각 3개의 송신 메일박스 보유
    • 한 번에 최대 3개의 메시지 전송 가능
    • 전송 스케줄러가 메시지 우선순위 관리
  • 수신(Rx) FIFO 구조
    • 각 컨트롤러마다 2개의 수신 FIFO (FIFO0, FIFO1) 보유
    • 각 FIFO는 최대 3개의 CAN 메시지 저장 가능
    • FIFO 오버런: 수신 FIFO가 최대 3개의 메시지를 저장할 수 있으며, 4번째 메시지가 도착하면 오버런(Overrun) 발생
  • Acceptance Filtering
    • CAN 메시지를 설정된 규칙에 따라 필터링하는 기능
    • 총 28개의 필터 뱅크 보유 (각각 2개의 필터 포함)
    • CAN1과 CAN2가 공유하며, CAN2가 사용하려면 CAN1이 활성화되어야 함

bxCAN Test Mode

 

 

  • Silent Mode
    • CAN 버스에 영향을 주지 않고 메시지를 수신하는 테스트
    • Bus에서 데이터를 듣기만 하고 송신하지 않음. Sniffer 역할 가능
  • Loopback Mode
    • 자체적으로 메시지를 송수신하여 CAN 통신이 정상적으로 동작하는지 테스트
    • Bus에 송신 가능하지만, Bus에서 데이터 수신은 불가능. Self-Test 용도
  • Silent + Loopback Mode
    • 외부 네트워크 영향을 받지 않으면서 내부적으로 메시지 송수신을 검증
    • Bus와 완전히 분리되어 내부 테스트만 가능

 

1) Silent Mode (침묵 모드)

특징

  • CAN_TX가 TX 엔진과 분리되어 있으며, 항상 논리적 '1' (Recessive Bit) 유지됨.
  • 즉, CAN Bus를 방해하지 않고 항상 Recessive 상태를 유지함.
  • 수신(Rx)은 정상적으로 동작하며, CAN Bus에서 전송되는 데이터를 읽을 수 있음.
  • CAN_TX는 내부적으로 Rx로 루프백되어 송신한 데이터를 수신할 수 있음.
  • CAN Bus의 트래픽을 분석하는 "Sniffer" 용도로 활용 가능.

요약

CAN Bus에 영향을 주지 않음 (Recessive Bit 유지)

Bus에서 데이터를 수신 가능

자체 송신한 데이터를 내부적으로 수신 가능

네트워크 분석(Sniffer) 용도로 사용 가능

 

2) Loop Back Mode (루프백 모드)

특징

  • CAN_TX는 정상적으로 동작하여 CAN Bus에 데이터를 전송할 수 있음.
  • 하지만 Bus에서 데이터를 수신할 수 없음 (CAN_RX가 Bus에서 분리됨).
  • 대신, 자신이 송신한 데이터가 내부적으로 CAN_RX로 루프백됨.
  • 주로 자기 테스트(Self-Test) 용도로 사용됨.

요약

CAN Bus에 데이터를 송신 가능

자체 송신한 데이터를 내부적으로 수신 가능

CAN Bus에서 다른 노드의 데이터를 수신 불가

Self-Test 용도로 사용됨

 

3) Silent + Loop Back Mode (침묵 + 루프백 모드)

특징

  • CAN_TX 및 CAN_RX 모두 CAN Bus에서 분리됨 → 완전히 독립적인 상태.
  • 송신한 데이터가 내부적으로 Rx로 루프백됨.
  • 하지만 CAN Bus의 데이터를 수신할 수 없음.
  • 즉, 완전히 독립된 상태에서 자체 테스트를 수행하는 용도.

요약

CAN Bus에 데이터를 송신할 수 없음

CAN Bus에서 데이터를 수신할 수 없음

자체 송신한 데이터를 내부적으로 수신 가능

완전히 독립적인 상태에서 Self-Test 가능

 

반응형