[목차]
https://makeutil.tistory.com/134 - Jetson 나노에서 MCP251X CAN 사용하기 (설치) #1/2
https://makeutil.tistory.com/135 - Jetson 나노에서 MCP251X CAN 사용하기 (시험) #2/2
Jetson Nano에서 CAN통신을 하는방법을 찾아야 하는 순간이 왔다.
Jetson AGX나 TX의 경우는 CAN Interface를 포함하고 있어서 dtb만 변경하면 간단하게 사용할 수 있었다. 그러나... Nano에는 CAN을 지원하지 않으므로 외부로 제공되는 I/O (40 Pin)으로 구현할 수 있어야 한다.
Jetson Nano의 외부 헤더 40핀은 라즈베리랑 동일한 인터페이스를 제공하고 있으므로, MKDEV의 라즈베리파이에서 사용했던 SPI CAN을 사용하면 되겠다는 생각으로 실험을 진행하였다.
라즈베리파이랑 크게 차이가 나지 않겠지라고 말이다. 결론을 이야기하자면 크게 차이나지는 않지만, 관련 자료를 확하는데 까지 너무 많은 시행착오를 거친것 같다.
우선 결론을 먼저 말하자면, 크로스 컴파일 하지말고 네이티브로 바로 설치하는것이 가장 현명한 방법이라는 것이다. 물론, Jetson의 리눅스 소스를 받아 직접 처리하는 방법도 있지만, 이는 임베디드 시스템에 아니아니, Jetson과 같은 배포본에 익숙하지 않은 개발자라면 상당히 자괴감이 발생될 수 있다. 필자 역시 임베디드쪽은 오래 해왔으나 Jetson과 같은 배포본은 만지고 싶지 않다. 뭔가 만들다가 만 배포본의 느낌이 너무 심하고 관련하여 커뮤니티는 활성화 되어있지만, 공식적인 자료를 구할 수 없는 경우는 중국에서 나온 저가형 AP를 사용했을 때 이외엔 없었기 때문에... 개발을 진행하다 막혔을 때 난감함은 말로 표현하기가 어려워 질 수 있다.
이렇게 불평하고 있지만, 어쨋거나 필자에게는 이번이 세번째 Jetson을 이용한 개발과제이며 완벽하게 정리되었다. 시간이 걸려서 그렇지 시간을 들이면 되지 않는일은 없는것 같다.
정리하면 다음과 같다. 내용이 길어질것 같아 2편으로 나누어 기록을 하려한다.
① MKDEV CAN-HAT 모듈을 Jetson 40Pin에 연결한다.
② Seeed-Sudio의 Device Tree Overlays 패키지를 장치에 다운로드 한다.
③ Jetson Community의 jetson-mcp251x.dts 파일을 다운로드 한다.
④ 다운로드한 Jetson-mcp251x.dts파일을 Seeed에서 제공하는 소스패키지 트리의 overlay/jetsonnano
디렉터리에 붇혀 넣는다.
- jetson-mcp251x.dts
⑤ seeed 프로젝트를 빌드한다.
- make all_jetsonnano
⑥ 기존 두개의 dtoverlay 파일을 삭제하거나 이름을 변경해서 적용되지 않도록 설정한다.
- /boot/tegra210-p3448-0000-p3449-0000-a01-mcp251x.dtbo
- /boot/tegra210-p3448-0000-p3449-0000-a02-mcp251x.dtbo
⑦ jetson.io를 실행하여 SPI1을 사용할 수 있도록 설정한다.
⑧ 리부팅 CAN 장치가 표시되어있는지 확인한다.
⑨ CAN장치를 활성화 한다.
⑩ CAN Utility를 이용하여 데이터를 송수신 시험을 진행한다.
자 그럼 진행해 보도록 하자.
1. MKDEV CAN MODULE
모든 기본 디렉터리는 Jetson 일반사용자(ubuntu)의 home 디렉터리에서 작업을 진행한다.
1.1. SPI 핀 할당
MKDEV의 MCP2515 CAN-HAT 모듈은 3.3V 전원을 공급받는다. 따라서 전원은 3.3v(이하 3v3)을 이용한다. 기존 라즈베리파이의 IO를 그대로 사용할 거니까 다음과 같다. 아래와 같이 Jetson에 연결해준다.
01 - VCC 3.3
06 - GND
19 - MOSI
21 - MISO
23 - CLK
24 - CS
31 - INT (31은 가이드에 따라서 설정해주었으며, DTB에서 변경할 수 있다.)
1.2. 핀을 변경하려면..
이론적으로는 SPI가 2개 제공되고 있고, CS로 0,1 구분이 가능하므로 SPI 장치는 4개 까지 장착이 가능하다. 핀맵을 변경하려면, 이후 제시하는 jetson.io와 dtb에서 적당하게 설정하여야 한다. 해당 방법은 생략하기로...
2. Device Tree Overlay 빌드
2.1. Seeed-Studio의 Device-Tree Overlay 패지를 다운로드 한다.
git clone https://github.com/Seeed-Studio/seed-linux-dtoverlays
또는,
웹브라우저에서 해당 주소로 접근한 다음, zip 파일로 다운로드 후 압축을 해제한다.
2.2. 본문에 첨부된 경로에서 dts 파일을 다운로드하여 overlay 디렉터리에 복사한다.
Jetson nano의 홈디렉터리에서 아래의 명령을 이용하여 jetson-mcp251x.dts 파일을 다운로드 받는다. 만약, 위의 링크에서 다운로드가 되지 않으면 필자가 포함해둔 파일을 이용하도록 하자.
$ wget https://forums.developer.nvidia.com/short-url/oDZ0n1XjrFqdTExOZVVLf8Gh1D7.dts
$ mv short-url/oDZ0n1XjrFqdTExOZVVLf8Gh1D7.dts jetson-mcp251x.dts
$ cp -a ~/jetson-mcp251x.dts ~/seeed-linux-dtoverlays-master/overlays/jetsonnano/jetson-mcp251x.dts
2.3. 빌드
빌드를 위해서 패키지 디렉터리에서 아래와 같이 make를 이용하여 빌드를 실행해준다.
$ cd ~/seeed-linux-dtoverlays-master/
$ make all_jetsonnano
3. 설치
기존 Device Tree Overlay(dtbo)파일을 제거하고 빌드된 jetson-mcp2515.dtb0 파을을 /boot 디렉터리로 옮긴다.
3.1. 기존파일 제거 또는 백업
필자는 두개의 파일을 백업했다. 독자께서는 지우셔도 된다. 해당 dtbo파일이 있으면 우리가 포함할 jetson-mcp2515x와 io충돌이 발생하여 문제가 되기 때문에 처리하는 내용이다. 혹시 안쓰면 복구할려고 백업해둔 것이다.
$ sudo mv /boot/tegra210-p3448-0000-p3449-0000-a01-mcp251x.dtbo /boot/tegra210-p3448-0000-p3449-0000-a01-mcp251x.dtbo.origin
$ sudo mv /boot/tegra210-p3448-0000-p3449-0000-a02-mcp251x.dtbo /boot/tegra210-p3448-0000-p3449-0000-a02-mcp251x.dtbo.origin
3.2. 새로 빌드된 dtbo 파일 설치
새로 빌드된 dtbo 파일을 /boot 디렉터리에 복사해 둔다.
$ sudo cp -a ~/seeed-linux-dtoverlays-master/overlays/jetsonnano/jetson-mcp251x.dtbo /boot/
3.3. 마지막으로 테스트를 위해서 몇가지 도구를 설치해 둔다.
아래는 can 테스트에 이용될 유틸리티이므로 미리 설치해 두자.
$ sudo apt-get install can-utils
여기까지 왔다면 이제 테스트 할 준비는 완료 되었고, 다음은 GPIO 설정 해주고 리부팅을 해주면 된다.
해당 부분은 다음 시간에 하는 것으로... 기록을 남길 생각이 없었다가 갑자기 기록을 남길때면, 기존에 했던 부분들을
다시 확인해야 하기 때문에 적은글 보다 시간이 많이 소요된다... 적은게 별거 없는데 몇시간이 지나버렸다. 어쨋든,
독자 여러분들께 도움이 되었으면...
최근댓글