개요
NVIDIA Jetson Orin NX 개발 보드의 40pin header에서 SPI를 사용할 수 있도록 활성화하고, 간단하게 "loopback" 시험을 하여 활성화한 SPI 장치가 정상적으로 동작하는지 확인하는 방법을 알아 보도록 하겠습니다.
시험 환경
- Jetson : NVIDIA Jetson Orin NX 16G
- Carrier board : P3768 compatible custom board
40pin header 설정 (Jetson-IO)
40pin header 확장에 대한 설정을 하기 위해서는 "Jetson-IO"를 실행하여, 관련 정보를 수정합니다.
"Jetson-IO"는 Jetpack에 기본으로 포함되어 있고, 다음과 같이 실행합니다.
$ sudo /opt/nvidia/jetson-io/jetson-io.py
다음은 "Jetson-IO"를 실행하면 표시되는 기본 항목입니다. 화살표 키를 이용하여 항목들간에 이동하여 선택할 수 있습니다.
| Select one of the following: |
| |
| Configure Jetson 40pin Header |
| Configure Jetson 24pin CSI Connector |
| Configure Jetson M.2 Key E Slot |
| Exit |
위 항목들 중에서 "Configure Jetson 40pin Header" 메뉴를 선택하면, 아래와 같이 현재 설정된 정보를 표시합니다.
| 3.3V ( 1) .. ( 2) 5V |
| i2c8 ( 3) .. ( 4) 5V |
| i2c8 ( 5) .. ( 6) GND |
| unused ( 7) .. ( 8) uarta |
| GND ( 9) .. ( 10) uarta |
| unused ( 11) .. ( 12) unused |
| unused ( 13) .. ( 14) GND |
| unused ( 15) .. ( 16) unused |
| 3.3V ( 17) .. ( 18) unused |
| unused ( 19) .. ( 20) GND |
| unused ( 21) .. ( 22) unused |
| unused ( 23) .. ( 24) unused |
| GND ( 25) .. ( 26) unused |
| i2c2 ( 27) .. ( 28) i2c2 |
| unused ( 29) .. ( 30) GND |
| unused ( 31) .. ( 32) unused |
| unused ( 33) .. ( 34) GND |
| unused ( 35) .. ( 36) unused |
| unused ( 37) .. ( 38) unused |
| GND ( 39) .. ( 40) unused |
| |
| |
| |
| |
| Jetson 40pin Header: |
| |
| Configure for compatible hardware |
| Configure header pins manually |
| Back |
위 화면에서 "Configure header pins manually"를 선택하면, 아래와 같이 추가 설정 정보가 표시됩니다. "spi1" 항목을 선택해 놓습니다.
| Select desired functions (for pins): |
| |
| [ ] aud (7) |
| [ ] extperiph3_clk (29) |
| [ ] extperiph4_clk (31) |
| [ ] i2s2 (12,35,38,40) |
| [ ] pwm1 (15) |
| [ ] pwm5 (33) |
| [ ] pwm7 (32) |
| [*] spi1 (19,21,23,24,26) |
| [ ] spi3 (13,16,18,22,37) |
| [ ] uarta-cts/rts (11,36) |
| |
| Back |
위 화면에서 "Back" 항목을 선택하면, 아래와 같은 화면이 나오는데 "Save pin changes"를 선택하여, 수정한 내용을 저장합니다.
| Jetson 40pin Header: |
| |
| Export as Device-Tree Overlay |
| Save pin changes |
| Discard pin changes |
아래 최종 항목들에서 "Save and reboot to reconfigure pins"를 선택하여, 변경한 설정을 저장합니다.
| Select one of the following: |
| |
| Re-configure Jetson 40pin Header |
| Configure Jetson 24pin CSI Connector |
| Configure Jetson M.2 Key E Slot |
| Save and reboot to reconfigure pins |
| Save and exit without rebooting |
| Discard all pin changes |
| Exit |
아래와 같이 재부팅 여부를 묻는 화면에서 "" 키를 눌러 시스템이 재시작되도록 합니다.
| |
| Configuration saved to file |
| /boot/kernel_tegra234-p3767-0000-p3768-0000-a0-user-custom.dtb. |
| |
| Press any key to reboot the system now or Ctrl-C to abort |
| |
시스템이 재시작된 이후에 "spidev"를 "modeprobe" 명령을 이용하여 활성화합니다.
$ sudo modeprobe spidev
$ ls /dev/spi*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev2.0 /dev/spidev2.1
SPI "loopback" 시험
"spidev_test.c" 소스를 받아, 다음과 같이 컴파일 합니다. (https://forums.developer.nvidia.com/t/264469)
$ gcc spidev_test.c -o spidev_test
40pin header의 19, 21번 핀을 점퍼선을 이용하여 연결합니다.
그리고 다음과 같이 "loopback" 시험을 실행하여 데이터를 정상적으로 주고 받는지 확인합니다.
$ sudo ./spidev_test -v -D /dev/spidev0.0
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@....▒..................▒.
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@....▒..................▒.
위와 같이 데이터를 정상적으로 주고 받으면, "SPI" 접속을 위한 기본적인 준비가 완료됩니다.
이후 실제 장비를 "SPI" 핀으로 연결하여, 접속이 정상적으로 되는지 통신 시험을 수행합니다.
참고자료
- "How to set gpio for spi?":https://forums.developer.nvidia.com/t/238990/
- "Can’t read spi messages on Jetson Agx Orin":https://forums.developer.nvidia.com/t/264469
- "NVIDIA Jetson AGX Orin Setup Guide":https://docs.viam.com/get-started/installation/prepare/jetson-agx-orin-setup/
- "Jetson/TX2 SPI - elinux":https://elinux.org/Jetson/TX2_SPI
- "Configuring the Jetson Expansion Headers":https://docs.nvidia.com/jetson/archives/r35.1/DeveloperGuide/text/HR/ConfiguringTheJetsonExpansionHeaders.html
'Linux,Unix,BSD > Jetson' 카테고리의 다른 글
[jetson] GStreamer를 이용한 영상 파일 x265 인코딩 (0) | 2024.04.09 |
---|---|
[Jetson] AGX Orin eMMC에 새로운 L4T 플래싱하기 (0) | 2024.01.30 |
[Jetson] Orin NX에 JetPack + DeepStream 6.3 설치하기 (0) | 2023.12.05 |
[jetson] PyQt5 설치하기 (0) | 2023.11.26 |
[jetson] NvDsInferContext: Failed to parse classification attributes using custom parse function (0) | 2023.11.24 |