Category (Click)
개발보드 덕질하기

Waveshare RP2350-CAN 핸즈온

 차완기 - @7/9/2025, 11:40:00 PM

깡통 아니고 CAN

my-first-robot 프로젝트에서 사용하는 GIM6010-8 모터는 CAN 통신을 사용합니다.
STM32F103처럼 CAN이 붙어있는 MCU라면 별 생각 없이 Peripheral 딸깍(?) 하면 모두 해결되는 반면, 프로젝트에서 사용하기로 한 RP2350은 CAN이 붙어있지 않아 방법을 찾아야 했습니다.
조금 찾아보니 PIO 채널 하나를 활용해 CAN을 구현하는 예시가 있었는데, 귀하디 귀한 PIO를 여기에 사용하기는 조금 아깝다는 생각이 들어 CAN 통신칩을 사용하기로 했습니다. 여기에 PIO 안쓰면 어디다 쓰냐
어떤걸 사용해볼까 하다가 일단 맛부터 보자는 생각에 아두이노쪽 맛집인 MCP2515를 사용하기로 했습니다. 우선 모듈을 구하기 쉬웠고, 결정적으로 포스팅에서 소개하는 일체형 개발보드가 있었기 때문이긴 합니다. 새 개발보드 못참죠 ㅎㅎㅎ
AliExpress에서 제품을 구매했습니다.
헤더핀을 납땜한 후 사진을 찍어봤습니다.
사실 RP2350이 출시했을 당시 Pimoroni의 Pico Plus 2를 구매했었는데요, 납땜만 하고 방치해두던게 기억나서 같이 찍어봤습니다. 자세히 보면 MCU의 크기가 서로 다르죠. RP2350은 GPIO핀이 30개인 RP2350A, 48개인 RP2350B 모델 두 가지 맛으로 나뉘기 때문입니다. 이번에 구매한 RP2350-CAN에 들어간게 작은 A타입이고 오른쪽에 커다란게 바로 B타입입니다.
개발보드만 따로 보면 이런 느낌입니다. 만드는 김에 디버깅용 SWD 커넥터좀 JST로 달아주지 하는 생각이 드네요 ㅋㅋ..
핀아웃은 위와 같습니다.
내장된 CAN 컨트롤러는 SPI 1번 채널에 연결되어 있습니다.
Waveshare - RP235-CAN Schematic [링크]
Wiki의 Schematic을 확인해보니 CAN 트렌시버로는 SIT65HVD230를 사용하고 있습니다.

RP2350-CAN 테스트

전원을 위한 USB, 디버거, CAN Analyzer를 붙이고 펌웨어로 넘어갑니다.

FW

제조사 Wiki에서 제공중인 데모가 있기는 한데, 라이브러리에 핀 번호가 하드코딩되어 있는것이 그렇게 마음에 들지는 않더라고요. 다른 라이브러리 뭐 없나 하고 찾아보던 중 pico-mcp2515 를 찾게 되었습니다.
문제는 이녀석 C++라,, 라이브러리 때문에 잘 하지도 못하는 C++를 사용하고 싶지는 않으니 Fork한 후 C로 Wrapped된 라이브러리를 만들었습니다.
pico-mcp2515-c-wrapped
varofla
my-first-robot 프로젝트에 곧바로 사용할 예정이라, 겸사겸사 RTOS를 세팅하고 간단한 테스트 코드를 작성했습니다. CAN 버스에서 데이터를 읽은 후 새 데이터가 있으면 그걸 CAN ID만 변경해 무지개반사하는 코드입니다.

CAN Analyzer

PC에서 CAN 데이터를 바로 분석할 수 있으면 편리할 것 같아, CAN Analyzer도 구매했습니다. Makerbase의 CANable V2.0 Pro 라는 녀석입니다.
조금 찾아보니 오픈소스 CAN 어댑터인 CANable 2.0의 클론인 것 같습니다. 자세한건 CAN에 익숙해질 때 즈음 알게되겠죠.
CANable - Overview [링크]
Windows에서 cangaroo라는 오픈소스 소프트웨어를 통해 어댑터를 사용하는 예시가 많았는데, 제 환경(macOS+Parallels Windows 11 ARM64)에서는 랜덤하게 어댑터 연결이 불가능해 Linux Ubuntu에서 테스트하게 되었습니다.
cangaroo가 Linux도 지원한다고는 하지만, 설치 파일이 잘 보이지 않는게 뭔가 직접 빌드하라는것 같았습니다. 따라서 마찬가지로 오픈소스 유틸인 can-utils를 사용했습니다.
$ sudo apt install -y can-utils $ sudo slcand -o -c -s4 /dev/ttyACM0 can0 # -s4: 125kbs $ sudo ifconfig can0 up $ candump can0 # 수신 $ cansend can0 001#0011223344556677 # 송신
Bash
복사
잘 작동하는것 같네요.

마무리

앞서 잠시 언급했듯이 로봇을 만드는 프로젝트를 위해 구매한 개발보드입니다.
CAN을 처음 접하다 보니 끝없는 삽질의 시작이 아닐까 하는 걱정이 있었는데, 정말 잘 작동해 다행입니다. 잘 만들어진 라이브러리 덕분이겠죠. 사실 Parallels로 가상화된 Windows 11 ARM64에서 cangaroo 연결이 계속 안되서 삽질하기는 했습니다 ㅋㅋ..
라이브러리를 둘러보며 CAN의 개념을 조금 정리한 뒤, 실제 로봇에 사용될 모터를 돌리는 포스팅으로 돌아오겠습니다