From: Stephen Warren Date: Thu, 15 Aug 2019 15:51:40 +0000 (-0600) Subject: Add SPI controller support for Jetson boards X-Git-Tag: 2.3.1^2~1 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/f454d3a956255a95477f7cb2c3aeab49dda1a05c?ds=sidebyside Add SPI controller support for Jetson boards Add spiPorts[] to each Tegra's pin.py, and add SPI pin names to each Jetson's board definition file. Every Jetson board supports the regular SPI port on the 40-pin GPIO expansion connector. Jetson Nano also supports a second SPI port. Note: The user must still take manual action to: 1) Reprogram Jetson's pinmux to route the SPI signals to the 40-pin GPIO expansion connector; by default these pins are configured as GPIO. Documentation on this topic is available on the Jetson download site. 2) Instantiate an spidev device in device tree, which will then trigger the creation of the /dev/spidevN.0 device node file. Future versions of L4T will do this by default. 3) Set permissions on the /dev/spidevN.0 device node file to allow regular users to access the file. The udev rules file in the latest version of Jetson.GPIO includes rules for this purpose. Without taking these actions, SPI functionality will not work. --- diff --git a/src/adafruit_blinka/board/jetson_nano.py b/src/adafruit_blinka/board/jetson_nano.py index 4da8cf5..8b9b77c 100644 --- a/src/adafruit_blinka/board/jetson_nano.py +++ b/src/adafruit_blinka/board/jetson_nano.py @@ -29,3 +29,17 @@ D24 = pin.B07 D25 = pin.B05 D26 = pin.B04 D27 = pin.B06 + +CE1 = D7 +CE0 = D8 +MISO = D9 +MOSI = D10 +SCLK = D11 +SCK = D11 + +CE1_1 = D23 +CE0_1 = D24 +MISO_1 = D25 +MOSI_1 = D26 +SCLK_1 = D27 +SCK_1 = D27 diff --git a/src/adafruit_blinka/board/jetson_tx1.py b/src/adafruit_blinka/board/jetson_tx1.py index 05fc390..cfa70dc 100644 --- a/src/adafruit_blinka/board/jetson_tx1.py +++ b/src/adafruit_blinka/board/jetson_tx1.py @@ -29,3 +29,10 @@ D24 = pin.X00 D25 = pin.P16 D26 = pin.X03 D27 = pin.E06 + +CE1 = D7 +CE0 = D8 +MISO = D9 +MOSI = D10 +SCLK = D11 +SCK = D11 diff --git a/src/adafruit_blinka/board/jetson_tx2.py b/src/adafruit_blinka/board/jetson_tx2.py index 5577d44..47c1624 100644 --- a/src/adafruit_blinka/board/jetson_tx2.py +++ b/src/adafruit_blinka/board/jetson_tx2.py @@ -29,3 +29,10 @@ D24 = pin.Y01 D25 = pin.P16 D26 = pin.I04 D27 = pin.J05 + +CE1 = D7 +CE0 = D8 +MISO = D9 +MOSI = D10 +SCLK = D11 +SCK = D11 diff --git a/src/adafruit_blinka/board/jetson_xavier.py b/src/adafruit_blinka/board/jetson_xavier.py index 24e229f..2910582 100644 --- a/src/adafruit_blinka/board/jetson_xavier.py +++ b/src/adafruit_blinka/board/jetson_xavier.py @@ -29,3 +29,10 @@ D24 = pin.H00 D25 = pin.Q01 D26 = pin.AA01 D27 = pin.R00 + +CE1 = D7 +CE0 = D8 +MISO = D9 +MOSI = D10 +SCLK = D11 +SCK = D11 diff --git a/src/adafruit_blinka/microcontroller/generic_linux/spi.py b/src/adafruit_blinka/microcontroller/generic_linux/spi.py index 71f74c8..58a465d 100755 --- a/src/adafruit_blinka/microcontroller/generic_linux/spi.py +++ b/src/adafruit_blinka/microcontroller/generic_linux/spi.py @@ -36,7 +36,8 @@ class SPI: # Linux SPI driver for AM33XX chip in BeagleBone and PocketBeagle # does not support setting SPI_NO_CS mode bit (issue #104) if not self.chip.AM33XX and not self.chip.IMX8MX and not self.chip.SAMA5 \ - and not self.chip.APQ8016: + and not self.chip.APQ8016 and not self.chip.T210 and not self.chip.T186 \ + and not self.chip.T194: try: self._spi.no_cs = True # this doesn't work but try anyways except AttributeError: diff --git a/src/adafruit_blinka/microcontroller/tegra/t186/pin.py b/src/adafruit_blinka/microcontroller/tegra/t186/pin.py index 25ec2e0..d147283 100644 --- a/src/adafruit_blinka/microcontroller/tegra/t186/pin.py +++ b/src/adafruit_blinka/microcontroller/tegra/t186/pin.py @@ -98,3 +98,6 @@ J05 = Pin('GPIO_AUD0') i2cPorts = ( (1, SCL, SDA), (0, SCL_1, SDA_1), ) + +# ordered as spiId, sckId, mosiId, misoId +spiPorts = ((3, N03, N05, N04), ) diff --git a/src/adafruit_blinka/microcontroller/tegra/t194/pin.py b/src/adafruit_blinka/microcontroller/tegra/t194/pin.py index 2598c51..84972b4 100644 --- a/src/adafruit_blinka/microcontroller/tegra/t194/pin.py +++ b/src/adafruit_blinka/microcontroller/tegra/t194/pin.py @@ -99,3 +99,6 @@ R00 = Pin('SOC_GPIO44') i2cPorts = ( (8, SCL, SDA), (1, SCL_1, SDA_1), ) + +# ordered as spiId, sckId, mosiId, misoId +spiPorts = ((0, Z03, Z05, Z04), ) diff --git a/src/adafruit_blinka/microcontroller/tegra/t210/pin.py b/src/adafruit_blinka/microcontroller/tegra/t210/pin.py index c6d4b6e..3645297 100644 --- a/src/adafruit_blinka/microcontroller/tegra/t210/pin.py +++ b/src/adafruit_blinka/microcontroller/tegra/t210/pin.py @@ -119,3 +119,6 @@ E06 = Pin('GPIO_PE6') i2cPorts = ( (0, SCL, SDA), (1, SCL_1, SDA_1), ) + +# ordered as spiId, sckId, mosiId, misoId +spiPorts = ((0, C02, C00, C01), (1, B06, B04, B05)) diff --git a/src/busio.py b/src/busio.py index f5991f9..0f4b15b 100755 --- a/src/busio.py +++ b/src/busio.py @@ -111,6 +111,18 @@ class SPI(Lockable): elif board_id == ap_board.DRAGONBOARD_410C: from adafruit_blinka.microcontroller.snapdragon.apq8016.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI + elif board_id == ap_board.JETSON_NANO: + from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI + from adafruit_blinka.microcontroller.tegra.t210.pin import Pin + elif board_id == ap_board.JETSON_TX1: + from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI + from adafruit_blinka.microcontroller.tegra.t210.pin import Pin + elif board_id == ap_board.JETSON_TX2: + from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI + from adafruit_blinka.microcontroller.tegra.t186.pin import Pin + elif board_id == ap_board.JETSON_XAVIER: + from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI + from adafruit_blinka.microcontroller.tegra.t194.pin import Pin else: from machine import SPI as _SPI from machine import Pin