Linux,Unix,BSD/Jetson

[jetson] Orin NX SPI pin 활성화 및 기본 설정

채윤아빠 2024. 4. 2. 20:46
728x90
반응형

개요

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" 핀으로 연결하여, 접속이 정상적으로 되는지 통신 시험을 수행합니다.


참고자료