STM32 bxCAN

hyeony·2025년 5월 20일

임베디드

목록 보기
6/10
post-thumbnail

1. bxCAN peripheral & loop-back mode

STM32 마이크로컨트롤러는 CAN 통신을 위한 하드웨어 모듈로 bxCAN(basic extended CAN)을 내장하고 있다. 이 모듈은 CAN 2.0A/B 프로토콜을 완전히 지원하며, 차량 네트워크나 산업용 제어 시스템 등에서 폭넓게 활용된다.

가. Loop-back Mode를 이용한 기본 Tx/Rx 테스트

1) Loop-back Mode?

Loop-back Mode는 CAN 컨트롤러 하나만으로 통신 테스트를 할 수 있는 동작 모드이다. 송신된 메시지가 내부적으로 수신 경로로 다시 전달되며, 실제 CAN tranceiver나 다른 노드가 없어도 Tx ↔ Rx 기능을 자체적으로 검증할 수 있다.

2) 테스트 목적

  • 외부 회로 없이 내부 송수신 테스트 가능
  • 펌웨어 초기 개발 단계에서 peripheral 기능 점검에 유용

나. bxCAN의 기본 구조 및 주요 기능

STM32의 bxCAN은 HW 수준에서 CAN 프로토콜을 처리하며, 다음과 같은 주요 기능을 제공한다.

1) HW 구성 요소

  • 송신 메일박스(Tx Mailbox): 3개
    → 각 메일박스는 하나의 CAN 메시지를 보관할 수 있으며, 동시에 최대 3개의 송신 대기 메시지 등록 가능

  • 수신 FIFO(Rx FIFO0, FIFO1): 각 FIFO는 최대 3개의 메시지 저장 가능

  • Filter Bank: 총 28개 제공, ID 기반 수신 필터링 가능

2) 자동화 기능 및 인터럽트 처리

  • 자동 수신 필터링 및 FIFO 적재
  • 전송 완료, 수신 완료, 에러 발생 시 인터럽트 트리거
  • 수신 ISR에서는 FIFO에서 메시지를 읽기만 하면 됨

다. STM32의 듀얼 CAN 구조: CAN1과 CAN2

일부 STM32 MCU는 두 개의 CAN 컨트롤러(CAN1, CAN2)를 제공한다. 이들은 모두 CAN 2.0A/B specification을 충실히 구현하지만, STM32의 내부 메모리 연결 구조에 따라 다음과 같이 구분된다.

1) Master/Slave 용어의 의미

① CAN1(Master bxCAN)
SRAM에 직접 접근 가능하며, 필터 뱅크 제어 권한 보유

② CAN2(Slave bxCAN)
SRAM 접근 불가, 일부 기능(CAN 필터 등) 사용을 위해 CAN1의 초기화가 필요

참고로, 여기서 Master/Slave 구분은 CAN 프로토콜 상의 개념이 아닌, STM32 내부 구조에 따른 용어이다. CAN은 Multi-master 방식으로 동작한다.

라. Acceptance Filtering (수신 필터링)

bxCAN은 HW 수준에서 식별자(ID)를 기준으로 수신 메시지를 필터링하는 기능을 제공한다.

1) Filter Bank 구조

  • 총 28개의 Filter Bank 제공
  • 각 Filter Bank는 듀얼 16비트 또는 싱글 32비트 필터 모드로 구성 가능
  • 모든 Filter Bank는 CAN1과 CAN2가 공유하며, 설정은 CAN1을 통해 이루어짐

2) 동작 방식

  • 설정된 필터 규칙에 따라 수신 메시지를 필터링
  • 허용된 메시지만 Rx FIFO에 적재됨
  • 필터를 사용하지 않으면 모든 메시지를 수신할 수 있음

마. Transmission Scheduler

송신 시 여러 개의 메시지가 동시에 대기할 수 있으므로, HW는 우선순위 기반 전송 스케줄러를 통해 메시지를 관리한다.

1) 전송 우선순위 결정 방식

메시지 식별자(ID)가 작을수록 우선순위가 높다. 동일 시점에 여러 메시지가 대기 중이면, 우선순위가 가장 높은 메시지가 먼저 전송된다.

2) 전송 절차

  • 사용자가 메시지를 메일박스에 등록
  • 스케줄러가 우선순위 평가
  • 해당 메시지가 CAN 프로토콜의 Arbitration 과정에 참여
  • Arbitration win

바. bxCAN self test mode

STM32의 bxCAN 컨트롤러는 다음과 같이 3가지 테스트 모드를 지원한다.

  • Silent Mode
  • Loop Back Mode
  • Silent + Loop Back Mode

이러한 모드들은 실제 네트워크에 연결하기 전, 내부 통신 기능 점검 및 디버깅을 위한 용도로 제공된다.

1) Silent Mode

Silent Mode는 bxCAN이 버스를 방해하지 않고 수신만 가능하도록 설정되는 모드이다.

① 특징

  • CAN_TX 핀은 전송 엔진과 분리됨 → 항상 logic 1(recessive) 상태 유지
  • 따라서 버스 상태를 dominant로 바꾸지 않음 → 버스를 건드리지 않음
  • 수신 경로(RX)는 활성화 상태 → 버스 상의 모든 메시지를 수신 가능
  • 스니퍼(sniffer)처럼 동작 → 수동적인 트래픽 분석 용도로 활용 가능

② 내부 동작

  • 송신 메시지는 내부적으로 Rx로 루프백되며, 외부로는 전송되지 않음
  • CAN 컨트롤러는 자체 전송은 못 하지만, 수신은 정상 처리

2) Loop Back Mode

Loop Back Mode는 CAN 컨트롤러의 송수신 기능을 내부 루프백을 통해 자가 테스트하는 데 사용된다.

① 특징

  • CAN_TX는 정상 동작하며, 메시지를 외부 CAN 버스로도 보냄
  • 동시에, 해당 메시지를 내부적으로 Rx로 루프백시킴
  • 하지만 버스 상의 다른 노드의 메시지는 수신 불가
    → CAN_RX가 버스에서 분리되어 있기 때문

② 용도

  • Self-test 기능
  • 코드 및 메일박스 구성, 인터럽트 핸들링 등을 실제 프레임 없이 점검 가능

3) Silent + Loop Back Mode

이 모드는 위의 두 모드의 특성을 결합한 형태이다.

① 특징

  • CAN_TX와 CAN_RX 모두 외부 버스와 분리
  • 메시지는 외부로 나가지 않고, 자체적으로 내부 루프백
  • 버스 감시도 하지 않음, 전송도 하지 않음
  • 완전히 독립된 테스트 환경 구성 가능

② 용도

  • 버스에 연결되지 않은 상태에서의 송수신 검증

<참고 자료>
Kiran Nayak, Mastering Microcontroller: Timers, PWM, CAN, Low Power(MCU2), Udemy, 2025.05.

profile
Chung-Ang Univ. EEE.

0개의 댓글