Xavier NX pinmux 설정
NVIDIA/Xavier NX

Xavier NX pinmux 설정

Xavier NX는 기본적으로 확장 헤더에 40PIN이 달려있다. 기본적으로 I2C 및 UART 핀이 할당되어 있고, 다른 모든 핀(전원 및 접지 제외)은 GPIO로 할당된다.

 

https://jetsonhacks.com/nvidia-jetson-xavier-nx-gpio-header-pinout/

 

NVIDIA Jetson Xavier NX GPIO Header Pinout - JetsonHacks

JetsonHacks is a site devoted to developing on the NVIDIA Jetson Development Kits.

jetsonhacks.com

SPI와 같은 페리페럴을 사용하기 위해서 PINMUX 설정을 해야한다.

 

본 글은 device tree 상에서 spi3 pinmux 설정을 추가하는 방법에 대해 설명한다.

*엑셀 파일은 window에서 실행을 권장합니다.

 

Xavier NX Pinmux 참조 :

Jetson_Xavier_NX_Pinmux_Configuration_Template_v1.06.xlsm
1.00MB

 

1. 엑셀 파일을 다운로드 받은 후 Jetson_Xavier_NX_Module 탭으로 들어간다.

2. 설정하고자 하는 포트를 찾는다. (여기서는 SPI3)

 

3.  Customer Usage 행에서 화살표를 눌러 mux 하고자 하는 기능을 선택한다.

 

4. 우측 상단에 Generate DT File을 클릭하여 DTSI 파일을 생성합니다.

device tree 수정

1. 위에서 수행한 결과로 생성한 tegra19x-jetson_xavier_nx_module-pinmux.dtsi 파일을 메모장 등으로 열고 설정한 포트 (spi3*)를 찾습니다.

2. 작업하고자 하는 BSP 에서 hardware/nvidia/platform/t19x/jakku/kernel-dts/tegra194-p3668-0001-p3509-0000.dts를 열면 기본적으로 다음과 같은 내용이 있습니다.

/dts-v1/;
#include "common/tegra194-p3668-common.dtsi"
#include "common/tegra194-p3509-0000-a00.dtsi"

/ {
	nvidia,dtsfilename = __FILE__;
	nvidia,dtbbuildtime = __DATE__, __TIME__;

	compatible = "nvidia,p3449-0000+p3668-0001", "nvidia,p3509-0000+p3668-0001", "nvidia,tegra194";

	sdhci@3400000 {
		status = "disabled";
	};		
};

 

3. root 노드(/ {}) 아래에 tegra19x-jetson_xavier_nx_module-pinmux.dtsi 에서의 내용을 활용하여 pinmux 노드를 추가합니다.

&pinmux {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&cl_io_pinmux>;

	cl_io_pinmux: common {
		spi3_sck_py0{
			nvidia,pins = "spi3_sck_py0";
			nvidia,function = "spi3";
			nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
			nvidia,tristate = <TEGRA_PIN_DISABLE>;
			nvidia,enable-input = <TEGRA_PIN_ENABLE>;
			nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
			nvidia,lpdr = <TEGRA_PIN_DISABLE>;
		};

		spi3_miso_py1{
			nvidia,pins = "spi3_miso_py1";
			nvidia,function = "spi3";
			nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
			nvidia,tristate = <TEGRA_PIN_DISABLE>;
			nvidia,enable-input = <TEGRA_PIN_ENABLE>;
			nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
			nvidia,lpdr = <TEGRA_PIN_DISABLE>;
		};

		spi3_mosi_py2{
			nvidia,pins = "spi3_mosi_py2";
			nvidia,function = "spi3";
			nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
			nvidia,tristate = <TEGRA_PIN_DISABLE>;
			nvidia,enable-input = <TEGRA_PIN_ENABLE>;
			nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
			nvidia,lpdr = <TEGRA_PIN_DISABLE>;
		};

		spi3_cs0_py3{
			nvidia,pins = "spi3_cs0_py3";
			nvidia,function = "spi3";
			nvidia,pull = <TEGRA_PIN_PULL_UP>;
			nvidia,tristate = <TEGRA_PIN_DISABLE>;
			nvidia,enable-input = <TEGRA_PIN_ENABLE>;
			nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
			nvidia,lpdr = <TEGRA_PIN_DISABLE>;
		};
	};
};

 

4. 추가 한 뒤 아래 글을 참고하여 커널을 빌드합니다.

https://rorsi.tistory.com/73

 

Build NVIDIA Jetson kernel

https://rorsi.tistory.com/59 Jetpack BSP Download - emmc 본 문에서 진행하고 있는JETPACK 버전은 4.6.1 입니다. DevKit 버전이 아닌 캐리어 보드 기준입니다. A. Download & Set Jetpack BSP < 1 > 아래 사이트에서 SDK manager

rorsi.tistory.com

 

5. 시스템을 부팅한 후 다음 명령어를 사용하면 pinmux가 설정되었는지 확인할 수 있다.

su
cat /sys/kernel/debug/pinctrl/2430000.pinmux/pinmux-pins

 

'NVIDIA > Xavier NX' 카테고리의 다른 글

Xavier NX Endpoint / Root Complex Mode 확인  (0) 2023.07.01
Run from SSD  (0) 2023.02.12
Xavier NX driver build without flash  (0) 2023.01.28
Xavier NX build dtb without flash  (0) 2023.01.28