From cc1fe67ee12be263e95f9261878b91ff62d5b958 Mon Sep 17 00:00:00 2001 From: Gautham Srinivasan Date: Tue, 12 Aug 2025 18:38:02 +0000 Subject: [PATCH] add support for jetson thor Add pin changes for jetson thor --- .../board/nvidia/jetson_thor.py | 41 ++++++ .../microcontroller/tegra/t264/__init__.py | 0 .../microcontroller/tegra/t264/pin.py | 118 ++++++++++++++++++ src/board.py | 3 + src/digitalio.py | 2 + src/microcontroller/__init__.py | 2 + src/microcontroller/pin.py | 2 + 7 files changed, 168 insertions(+) create mode 100644 src/adafruit_blinka/board/nvidia/jetson_thor.py create mode 100644 src/adafruit_blinka/microcontroller/tegra/t264/__init__.py create mode 100644 src/adafruit_blinka/microcontroller/tegra/t264/pin.py diff --git a/src/adafruit_blinka/board/nvidia/jetson_thor.py b/src/adafruit_blinka/board/nvidia/jetson_thor.py new file mode 100644 index 0000000..7c4a34d --- /dev/null +++ b/src/adafruit_blinka/board/nvidia/jetson_thor.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: 2025 Gautham Srinivasan for NVIDIA +# +# SPDX-License-Identifier: MIT +"""Pin definitions for Jetson Thor.""" + +from adafruit_blinka.microcontroller.tegra.t264 import pin + +SDA = pin.SDA +SCL = pin.SCL +SDA_1 = pin.SDA_1 +SCL_1 = pin.SCL_1 + +D4 = pin.L06 +D5 = pin.AD01 +D6 = pin.AD00 +D7 = pin.K03 +D8 = pin.K02 +D9 = pin.K00 +D10 = pin.K01 +D11 = pin.J07 +D12 = pin.DD04 +D13 = pin.AE00 +D16 = pin.M05 +D17 = pin.M04 +D18 = pin.V06 +D19 = pin.W01 +D20 = pin.W00 +D21 = pin.V07 +D22 = pin.F07 +D23 = pin.DD03 +D24 = pin.U07 +D25 = pin.U00 +D26 = pin.AE01 +D27 = pin.M00 + +CE1 = D7 +CE0 = D8 +MISO = D9 +MOSI = D10 +SCLK = D11 +SCK = D11 diff --git a/src/adafruit_blinka/microcontroller/tegra/t264/__init__.py b/src/adafruit_blinka/microcontroller/tegra/t264/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/adafruit_blinka/microcontroller/tegra/t264/pin.py b/src/adafruit_blinka/microcontroller/tegra/t264/pin.py new file mode 100644 index 0000000..63b72fc --- /dev/null +++ b/src/adafruit_blinka/microcontroller/tegra/t264/pin.py @@ -0,0 +1,118 @@ +# SPDX-FileCopyrightText: 2025 Gautham Srinivasan for NVIDIA +# +# SPDX-License-Identifier: MIT + +"""Tegra T264 pin names""" +import atexit +from Jetson import GPIO + +GPIO.setmode(GPIO.TEGRA_SOC) +GPIO.setwarnings(False) # shh! + + +class Pin: + """Pins dont exist in CPython so...lets make our own!""" + + IN = 0 + OUT = 1 + LOW = 0 + HIGH = 1 + PULL_NONE = 0 + PULL_UP = 1 + PULL_DOWN = 2 + + id = None + _value = LOW + _mode = IN + + def __init__(self, bcm_number): + self.id = bcm_number + + def __repr__(self): + return str(self.id) + + def __eq__(self, other): + return self.id == other + + def init(self, mode=IN, pull=None): + """Initialize the Pin""" + if mode is not None: + if mode == self.IN: + self._mode = self.IN + GPIO.setup(self.id, GPIO.IN) + elif mode == self.OUT: + self._mode = self.OUT + GPIO.setup(self.id, GPIO.OUT) + else: + raise RuntimeError("Invalid mode for pin: %s" % self.id) + if pull is not None: + if self._mode != self.IN: + raise RuntimeError("Cannot set pull resistor on output") + if pull == self.PULL_UP: + GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_UP) + elif pull == self.PULL_DOWN: + GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) + else: + raise RuntimeError("Invalid pull for pin: %s" % self.id) + + def value(self, val=None): + """Set or return the Pin Value""" + if val is not None: + if val == self.LOW: + self._value = val + GPIO.output(self.id, val) + return None + if val == self.HIGH: + self._value = val + GPIO.output(self.id, val) + return None + raise RuntimeError("Invalid value for pin") + return GPIO.input(self.id) + + # pylint: disable=no-method-argument + @atexit.register + def cleanup(): + """Clean up pins""" + print("Exiting... \nCleaning up pins") + GPIO.cleanup() + + # pylint: enable=no-method-argument + + +# Cannot be used as GPIO +SDA = Pin("GP16_I2C8_DAT") # I2C4 +SCL = Pin("GP81_I2C9_CLK") +SDA_1 = Pin("GP14_I2C2_DAT") # I2C2 +SCL_1 = Pin("GP13_I2C2_CLK") + +# Jetson Thor +L06 = Pin("GP130") +M04 = Pin("GP136_UART9_RTS_N") +V06 = Pin("GP184_DAP2_CLK") +M00 = Pin("GP132_PWM9") +F07 = Pin("GP257_PWM2") +DD03 = Pin("GP21") +U07 = Pin("GP177") +K01 = Pin("GP117_SPI1_MOSI") +K00 = Pin("GP116_SPI1_MISO") +U00 = Pin("GP170") +J07 = Pin("GP115_SPI1_CLK") +K02 = Pin("GP118_SPI1_CS0_N") +K03 = Pin("GP119_SPI1_CS1_N") +AD01 = Pin("GP211_CAN2_DIN") +AD00 = Pin("GP210_CAN2_DOUT") +DD04 = Pin("GGP22_SOCKET_ID_STRA") +AE00 = Pin("GP215_CAN3_DOUT") +W01 = Pin("GP187_DAP2_FS") +M05 = Pin("GP137_UART9_CTS_N") +AE01 = Pin("GP216_CAN3_DIN") +W00 = Pin("GP186_DAP2_DIN") +V07 = Pin("GP185_DAP2_DOUT") + +i2cPorts = ( + (7, SCL, SDA), + (1, SCL_1, SDA_1), +) + +# ordered as spiId, sckId, mosiId, misoId +spiPorts = ((K02, J07, K01, K00),) diff --git a/src/board.py b/src/board.py index f926dd0..3d4d0d7 100644 --- a/src/board.py +++ b/src/board.py @@ -206,6 +206,9 @@ elif board_id == ap_board.JETSON_AGX_ORIN: elif board_id in (ap_board.JETSON_ORIN_NX, ap_board.JETSON_ORIN_NANO): from adafruit_blinka.board.nvidia.jetson_orin_nx import * +elif board_id == ap_board.JETSON_THOR: + from adafruit_blinka.board.nvidia.jetson_thor import * + elif board_id == ap_board.CLARA_AGX_XAVIER: from adafruit_blinka.board.nvidia.clara_agx_xavier import * diff --git a/src/digitalio.py b/src/digitalio.py index 31c650c..04437dc 100644 --- a/src/digitalio.py +++ b/src/digitalio.py @@ -47,6 +47,8 @@ elif detector.chip.T194: from adafruit_blinka.microcontroller.tegra.t194.pin import Pin elif detector.chip.T234: from adafruit_blinka.microcontroller.tegra.t234.pin import Pin +elif detector.chip.T264: + from adafruit_blinka.microcontroller.tegra.t264.pin import Pin elif detector.chip.S905: from adafruit_blinka.microcontroller.amlogic.s905.pin import Pin elif detector.chip.S905X: diff --git a/src/microcontroller/__init__.py b/src/microcontroller/__init__.py index cedd126..3c927fc 100644 --- a/src/microcontroller/__init__.py +++ b/src/microcontroller/__init__.py @@ -77,6 +77,8 @@ elif chip_id == ap_chip.T194: from adafruit_blinka.microcontroller.tegra.t194 import * elif chip_id == ap_chip.T234: from adafruit_blinka.microcontroller.tegra.t234 import * +elif chip_id == ap_chip.T264: + from adafruit_blinka.microcontroller.tegra.t264 import * elif chip_id == ap_chip.S905: from adafruit_blinka.microcontroller.amlogic.s905 import * elif chip_id == ap_chip.S905X: diff --git a/src/microcontroller/pin.py b/src/microcontroller/pin.py index 4016f95..6dbf9be 100644 --- a/src/microcontroller/pin.py +++ b/src/microcontroller/pin.py @@ -66,6 +66,8 @@ elif chip_id == ap_chip.T194: from adafruit_blinka.microcontroller.tegra.t194.pin import * elif chip_id == ap_chip.T234: from adafruit_blinka.microcontroller.tegra.t234.pin import * +elif chip_id == ap_chip.T264: + from adafruit_blinka.microcontroller.tegra.t264.pin import * elif chip_id == ap_chip.S905: from adafruit_blinka.microcontroller.amlogic.s905.pin import * elif chip_id == ap_chip.S905X: -- 2.49.0