]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Add SPI controller support for Jetson boards
authorStephen Warren <swarren@nvidia.com>
Thu, 15 Aug 2019 15:51:40 +0000 (09:51 -0600)
committerStephen Warren <swarren@nvidia.com>
Thu, 15 Aug 2019 16:16:34 +0000 (10:16 -0600)
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.

src/adafruit_blinka/board/jetson_nano.py
src/adafruit_blinka/board/jetson_tx1.py
src/adafruit_blinka/board/jetson_tx2.py
src/adafruit_blinka/board/jetson_xavier.py
src/adafruit_blinka/microcontroller/generic_linux/spi.py
src/adafruit_blinka/microcontroller/tegra/t186/pin.py
src/adafruit_blinka/microcontroller/tegra/t194/pin.py
src/adafruit_blinka/microcontroller/tegra/t210/pin.py
src/busio.py

index 4da8cf504875f0a4e7220ac9b6d29015ad26ab3a..8b9b77cbb73854361cef5d816a432f423f51fb2a 100644 (file)
@@ -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
index 05fc3903092b7a41a9ab845af205f56dc1eef471..cfa70dccd74c45caf4594c5e331e9247374eb90d 100644 (file)
@@ -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
index 5577d445e158eb6af77022995ad7fb53b6492c75..47c1624b94803e6aed450c210d514ffe2b4bf253 100644 (file)
@@ -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
index 24e229f50677305d9043363bc8e3084ef0f845f8..29105822955bd1833b99b5e8b7972cfe111f022f 100644 (file)
@@ -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
index 71f74c8b931577efb655c8ef42efd1f54ce5093b..58a465db727588abb1b758c1c5987292e1f30f3c 100755 (executable)
@@ -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:
index 25ec2e080fccc3d5d5b1b08cc6600f62382d787d..d14728355197496f857f83dcacae8f49d1eddf6a 100644 (file)
@@ -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), )
index 2598c51460643165a3e91d7a3469296406d07c1d..84972b42993a5d311068bf293ea5cc3e000ca0ab 100644 (file)
@@ -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), )
index c6d4b6e8266fb254c00387a2c446489bfa11fc90..3645297875a73fb55d1b1eea7ee880c96edb2c26 100644 (file)
@@ -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))
index f5991f9b27744d020b4b1658351e9ac9a448b035..0f4b15b3a4e5304eacf9ef7995ab17b97379d011 100755 (executable)
@@ -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