Research Institute
  • STMicroelectronics bxCAN 소개
    2024년 10월 06일 18시 29분 09초에 업로드 된 글입니다.
    작성자: IIIIIIIIIIIIIIIIIIIIl

    bxCAN이란?

    다양한 제조사에서 만들고 있는 다양한 CAN 모듈이 존재하지만 저비용, 일반 유저가 접근하기 쉬운 STM32 bxCAN 모듈을 대상으로 주요 기능을 다루도록 하겠습니다. 다른 제조사에서 만든 모듈의 경우에도 유사한 구조를 나타내고 있어 하나의 모듈만 잘 이해하여도 다른 제조사에서 만든 CAN 모듈을 이해할 수 있습니다. STM32 칩에서 CAN 통신을 지원하는 칩의 경우 bxCAN 컨트롤러가 마이크로컨트롤러에 내장되어 있으며 CAN 프로토콜 2.0A와 2.0B 표준을 지원합니다. 최대 통신 속도 1 Mb/s를 지원하며 표준 ID와 확장 ID를 사용하는 메시지를 모두 지원하며 3개의 전송 메일박스를 갖추고 있어 전송 메시지의 우선 순위를 소프트웨어로 제어할 수 있습니다. 수신 측면에서는 수신 FIFO가 있으며 필터링 기능을 통해 특정 ID의 메시지만 수신하거나 수신하지 않도록 설정할 수 있습니다. bxCAN은 아래와 같은 주요 기능을 가지고 있습니다.

    Feature Details
    Supported Protocol CAN protocol version 2.0 A, B
    Bit Rates Up to 1 Mbit/s
    Time-Triggered Communication Option


    - Disable automatic retransmission mode
    - 16-bit free-running timer
    - Time stamp sent in last two data bytes
    Transmission


    - Three transmit mailboxes
    - Configurable transmit priority
    - Time stamp on SOF transmission
    Reception




    - Two receive FIFOs with three stages
    - Scalable filter banks:
       – 28 filter banks shared between CAN1 and CAN2 in connectivity line devices
       – 14 filter banks in other STM32F10xxx devices
    - Identifier list feature
    - Configurable FIFO overrun
    - Time stamp on SOF reception
    Management

    - Maskable interrupts
    - Software-efficient mailbox mapping at a unique address space
    Dual CAN


    - CAN1: Master bxCAN for managing communication between a Slave bxCAN and the 512-byte SRAM memory
    - CAN2: Slave bxCAN, with no direct access to the SRAM memory (the two bxCAN cells share the 512-byte SRAM memory)
    The two bxCAN cells share the 512-byte SRAM memory

    [표2] bxCAN 주요 기능

     

    bxCAN 구조 분석

    아래 그림은 STM32F105/107 시리즈의 인터페이스 칩에 대한 Dual CAN block diagram (connectivity devices)으로 그림에는 두 개의 CAN 컨트롤러가 포함되어 있습니다. CAN1은 마스터 장치로 그림에 있는 " Memory Access Controller"는 CAN1에 의해 제어됩니다. 따라서 CAN2는 메모리 영역에 직접 접근할 수 없으며 CAN2를 사용할 때는 반드시 CAN1 외부 장치의 클럭을 활성화해야 합니다. 각 영역별 구조는 아래와 같습니다.

    • CAN 2.0B active core
      bxCAN 모듈은 CAN 메시지의 송신과 수신을 자율적으로 처리하며 하드웨어는 CAN 2.0A 표준 식별자(11비트)와 CAN 2.0B 확장 식별자(29비트)를 모두 지원합니다.
    • Tx mailboxes
      소프트웨어에서는 메시지를 설정하기 위해 세 개의 송신 mailboxes가 제공됩니다. 전송 스케줄러가 어떤 mailboxes를 먼저 전송할지 결정합니다.
    • Acceptance filters
      bxCAN은 소프트웨어가 필요한 수신 메시지를 선택하고 나머지를 폐기하기 위해 28개의 scalable/configurable identifier filter 뱅크를 제공합니다. 해당 필터는 CAN 모듈마다 다른 개수를 가지고 있습니다.
    • Receive FIFO
      두 개의 수신 FIFO를 사용하여 들어오는 메시지를 저장하고 각 FIFO에는 세 개의 메시지를 저장할 수 있습니다.
    • Control, status and configuration registers
      - CAN 매개변수 구성 (예: 전송 속도)
      - 송신 요청
      - 수신 처리
      - 인터럽트 관리
      - 진단 정보 획득

    Dual CAN block diagram (connectivity devices)

     

    operating modes

    bxCAN은 3가지 운영 모드를 가지고 있습니다. initialization, normal, Sleep 모드를 가지고 있습니다. 하드웨어 reset 후 bxCAN은 전력 소비를 줄이기 위해 Sleep mode에 있으며 CANTX에서 internal pull-up이 활성화됩니다. CAN_MCR 레지스터의 INRQ 또는 SLEEP bits를 설정하여 bxCAN이 initialization 또는 Sleep mode로 들어가도록 요청합니다. 모드가 설정되면 bxCAN은 CAN_MSR 레지스터의 INAK 또는 SLAK bits를 설정하여 이를 확인하고 internal pull-up이 비활성화됩니다. INAK 또는 SLAK가 설정되지 않으면 bxCAN은 normal mode에 있습니다. normal mode에 들어가기 전에 bxCAN은 항상 CAN bus와 synchronize해야 합니다. synchronize하기 위해 bxCAN은 CAN bus가 idle 상태가 될 때까지 기다리며 오실리스코프 같은 장비를 활용하여 CANRX에서 점검을 진행하면 11개의 연속적인 recessive bits가 모니터링됩니다. 모드별 자세한 내용은 아래 글과 그림에서 확인할 수 있습니다.

    • Initialization mode : 소프트웨어 초기화는 하드웨어가 Initialization mode에 있을 때 수행할 수 있습니다.Initialization mode 모드에 들어가는 방법은 CAN_MCR 레지스터의 INRQ 비트를 설정하고 하드웨어가 CAN_MSR 레지스터의 INAK 비트를 설정한 뒤 확인되면 들어갈 수 있습니다.  Initialization mode를 종료하려면 소프트웨어가 INRQ 비트를 지워야 합니다. bxCAN은 하드웨어가 INAK 비트를 지운 후 Initialization mode를 종료할 수 있습니다. Initialization Mode에 있는 동안 CAN 버스로의 모든 메시지 전송이 중지되며 CAN 버스 출력 CANTX는 recessive(높음) 상태가 됩니다.  CAN Controller를 초기화하려면 소프트웨어가 Bit Timing(CAN_BTR)과 CAN 옵션(CAN_MCR) 레지스터를 설정해야 합니다. CAN 필터 뱅크와 관련된 레지스터(모드, 스케일, FIFO 할당, 활성화 및 필터 값)를 초기화하려면 소프트웨어가 FINIT 비트(CAN_FMR)를 설정해야 합니다. 필터 초기화는 초기화 모드 외부에서도 수행할 수 있습니다.
    • normal mode : Normal mode로 들어가기 위한 요청은 CAN_MCR 레지스터의 INRQ 비트를 삭제하면 들어갈 수 있습니다. CAN 버스에서 데이터 전송과 동기화되면 Normal mode로 들어가며  Normal mode로의 전환은 하드웨어가 CAN_MSR 레지스터의 INAK 비트를 지움으로써 확인합니다. 필터 값의 초기화는 Initialization Mode와 독립적이지만 필터가 활성화되지 않은 상태에서 이루어져야 합니다. 필터의 스케일과 모드 구성은 Normal Mode로 들어가기 전에 설정해야 합니다.
    • Sleep mode: 전력 소비를 줄이기 위해 bxCAN은 Sleep mode라는 저전력 모드를 가지고 있습니다. Sleep mode 모드에 들어가는 방법은 CAN_MCR 레지스터의 SLEEP 비트를 설정하여 들어갈 수 있습니다. 해당 모드에서는 bxCAN 클록이 중지되지만 소프트웨어는 여전히 bxCAN 메일박스에 접근할 수 있습니다.  Sleep mode에 있을 때 INRQ 비트를 설정하여 초기화 모드에 들어가기를 요청하면 SLEEP 비트도 지워야 합니다. CAN 버스 활동이 감지되면, 하드웨어는 CAN_MCR 레지스터의 AWUM 비트가 설정된 경우 SLEEP 비트를 지워 깨어나기 시퀀스를 자동으로 수행합니다. AWUM 비트가 지워진 경우 Sleep mode에서 벗어나기 위해 웨이크업 인터럽트가 발생할 때 SLEEP 비트를 삭제해야 합니다.
     

    bxCAN 운영모드

     

     

    Test mode

    Test mode는 CAN_BTR 레지스터의 SILM 및 LBKM 비트를 설정하여 사용할 수 있습니다. 해당 비트들은 bxCAN이 Initialization mode에 있을 때 설정해야 합니다. Test mode가 선택된 후 Normal mode에 들어가기 위해서는 CAN_MCR 레지스터의 INRQ 비트를 리셋해야 합니다.

     

    Silent mode

    Silent mode는 CAN_BTR 레지스터의 SILM 비트를 설정하여 사용할 수 있습니다. Silent mode에서는 bxCAN이 유효한 데이터 프레임과 유효한 원격 프레임을 수신할 수 있지만 CAN 버스에 recessive 비트만 전송하며 전송을 시작할 수 없습니다. 만약 bxCAN이 dominant 비트(ACK 비트, 과부하 플래그, 활성 오류 플래그)를 전송해야 할 경우 내부적으로 reroute되어 CAN Core가 이 dominant 비트를 모니터링하게 됩니다. 이때 CAN 버스는 여전히 recessive 상태일 수 있습니다. Silent mode는 dominant 비트를 전송하지 않고도 CAN 버스의 트래픽을 분석하는 데 사용할 수 있습니다.

    Loop back mode

    Loop Back Mode는 CAN_BTR 레지스터의 LBKM 비트를 설정하여 사용할 수 있습니다. Loop Back Mode에서는 자체 전송한 메시지를 수신한 메시지로 처리하고 수신 허용 필터를 통과하면 이를 Receive mailbox에 저장합니다.

     

    Loop back combined with silent mode

     
    Loop Back mode와 Silent mode를 결합하여 사용이 가능하며 CAN_BTR 레지스터의 LBKM 및 SILM 비트를 설정하여 사용할 수 있습니다. 이 모드는 Loop Back mode처럼 테스트할 수 있지만 CANTX 및 CANRX 핀에 연결된 실행 중인 CAN 시스템에 영향을 주지 않습니다.
     
     
     
     

    참고자료

    STM32F105/107 - PDF Documentation

    댓글