MCP2515 & TJA1050 모듈 설정

CAN 모듈을 라즈베리파이로 검증하기 위해 CAN 컨트롤러 MCP2515와 트랜시버 TJA1050가 포함된 CAN BUS 모듈 구입하여, 라즈베리파이에 아래 이미지와 같이 연결하였다.

라즈베리파이와 CAN 버스 모듈을 아래 블로그를 참고하여 연결하였으며, 라즈베리파이의 핀 설정은 아래 이미지와 같다. 아래 왼쪽 이미지를 참고하여 MCP2515 모듈과 라즈베리파이 각 핀에 연결하도록 한다.

참고로, 여기서 사용하는 CAN 모듈의 TJA1050 트랜시버는  5V에서 동작하기 때문에 아래 블로그는 CAN 트랜시버를 다른 칩셋으로 교체하여 테스트를 진행하였다.

 

Raspberry Pi - CAN Bus communicatie (GPIO)

Het is mogelijk een raspberry pi te gebruiken met een CAN Bus interface, met CAN Bus kan je datalijnen gebruiken tot ca. 5000m

domoticx.com

라즈베리파이는 CAN 모듈에게 3.3V 전압 이상을 제공할 수 없기 때문에, 아래 라즈베리파이 가이드 문서를 참고하여 TJA1050 트랜시버가 5V 전압을 사용할 수 있게 기존 3.3V 전압을 끊고 와이어로 5V 전압을 사용하도록 하였다.

 

[quick-guide] CAN bus on raspberry pi with MCP2515 - Raspberry Pi Forums

saper_2 wrote:So, you don't see/can't access can0 from ifconfig/ip ? Looking at your circuit, I see (potential) problem: not translating MOSI & CE from RPi . If you power MC2515 from 5V then it's acceptable logic levels are higher (usually Vin(hi)_min=~3,5

www.raspberrypi.org

라즈베리파이에서 CAN 컨트롤러를 사용하기 위해 dts에 spi 인터페이스를 아래와 같이 추가하도록 한다.

$ sudo vi /boot/config.txt
...
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25
dtoverlay=spi-bcm2835-overlay
...

dts 설정하고 재부팅하였을 때, 정상적으로 CAN 모듈과 라즈베리파이가 연결되었다면 아래 이미지와 같이 SPI 인터페이스와 CAN 모듈이 인식된 것을 확인할 수 있다.

CAN 컨트롤러가 정상적으로 로딩되었다면, SPI로 CAN 모듈을 사용할 수 있으며 아래 명령어로 500kbps 비트레이트의 CAN 인터페이스를 활성화 시킬수 있다.

sudo ip link set can0 up type can bitrate 500000

CAN 인터페이스를 활성화 시키면 ifconfig 명령어를 사용하여 can0 인터페이스가 생성된 것을 확인할 수 있다. 이렇게 ip 명령어를 사용하여 CAN 인터페이스를 생성할 수 있지만, 부팅할 때마다 매번 위 명령어를 실행하는 것이 번거롭기 때문에 /etc/interfaces 파일을 아래와 같이 수정하도록 한다.

$ sudo vi /etc/network/interfaces
...

auto can0
iface can0 inet manual
    pre-up /sbin/ip link set can0 type can bitrate 500000 triple-sampling on restart-ms 100
    up /sbin/ifconfig can0 up
    down /sbin/ifconfig can0 down

마지막으로 CAN 유틸리티를 설치하여 CAN 인터페이스를 이용하여 데이터를 보내거나 덤프할 수 있다. 이것은 추후 STM32와 통신하는 과정에서 디버깅으로 많이 사용할 것 같다. 설치는 아래와 같다.

$ sudo apt install can-utils

위 구성으로 라즈베리파이는 CAN 통신을 위한 준비 과정은 완료 되었는데, STM32에 연결할 CAN 트랜시버가 오지 않아서 아직 테스트를 못하고 있다. 빨리 와서 테스트 해봐야 하는데...