From: Drew Fustini Date: Thu, 22 Nov 2018 20:43:11 +0000 (-0600) Subject: Merge pull request #46 from pdp7/master X-Git-Tag: 0.3.0 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/35d5df3e2e925deae07db4f75902b58a3845c90c?hp=a39d034521be3a4751b326155ff0754cfe79c601 Merge pull request #46 from pdp7/master Add preliminary SPI support for BeagleBone Black --- diff --git a/src/adafruit_blinka/board/beaglebone_black.py b/src/adafruit_blinka/board/beaglebone_black.py index 337270d..ffeb919 100644 --- a/src/adafruit_blinka/board/beaglebone_black.py +++ b/src/adafruit_blinka/board/beaglebone_black.py @@ -93,3 +93,25 @@ LED_USR3 = pin.USR3 SDA = pin.SDA SCL = pin.SCL + +# Refer to header default pin modes +# http://beagleboard.org/static/images/cape-headers.png +# P9_17 (SPI0_CSO => CE0) enables peripheral device +# P9_18 (SPI0_D1 => MOSI) outputs data to peripheral device +# P9_21 (SPIO_DO => MISO) receives data from peripheral device +# P9_22 (SPI0_SCLK => SCLK) outputs clock signal +CE0 = pin.CE0 +MOSI = pin.MOSI +MISO = pin.MISO +SCLK = pin.SCLK +#CircuitPython naming convention for SPI Clock +SCK = pin.SCK + +# SPI1 pins +# http://beagleboard.org/static/images/cape-headers-spi.png +CE1 = pin.CE1 +MOSI_1 = pin.MOSI_1 +MISO_1 = pin.MISO_1 +SCLK_1 = pin.SCLK_1 +#CircuitPython naming convention for SPI Clock +SCK_1 = pin.SCK_1 diff --git a/src/adafruit_blinka/microcontroller/beaglebone_black/pin.py b/src/adafruit_blinka/microcontroller/beaglebone_black/pin.py index ac20f95..24ae0c1 100644 --- a/src/adafruit_blinka/microcontroller/beaglebone_black/pin.py +++ b/src/adafruit_blinka/microcontroller/beaglebone_black/pin.py @@ -132,8 +132,60 @@ USR3 = Pin('USR3') SCL = Pin('P9_19') SDA = Pin('P9_20') +# Refer to header default pin modes +# http://beagleboard.org/static/images/cape-headers.png +# +# P9_17 (SPI0_CSO => CE0) enables peripheral device +# P9_18 (SPI0_D1 => MOSI) outputs data to peripheral device +# P9_21 (SPIO_DO => MISO) receives data from peripheral device +# P9_22 (SPI0_SCLK => SCLK) outputs clock signal +# +# Use config-pin to set pin mode for SPI pins +# https://github.com/beagleboard/bb.org-overlays/tree/master/tools/beaglebone-universal-io +# config-pin p9.17 spi_cs +# config-pin p9.18 spi +# config-pin p9.21 spi +# config-pin p9.22 spi_sclk +# +CE0 = Pin('P9_17') +MOSI = Pin('P9_18') +MISO = Pin('P9_21') +SCLK = Pin('P9_22') +#CircuitPython naming convention for SPI Clock +SCK = Pin('P9_22') + +# Pins for SPI1 +# refer to: +# http://beagleboard.org/static/images/cape-headers-spi.png +# +# CE1 P9.28 SPI1_CS0 +# MISO_1 P9.29 SPI1_D0 +# MOSI_1 P9.30 SPI1_D1 +# SCLK_1 P9.31 SPI_SCLK +# +# SPI1 conflicts with HDMI Audio (McASP) +# +# Refer to: +# https://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays +# +# To Disable HDMI AUDIO, uncomment this line in /boot/uEnv.txt: +# disable_uboot_overlay_audio=1 +# +# Set pin modes for SPI1 with: +# +# config-pin p9.28 spi1_cs +# config-pin p9.29 spi1 +# config-pin p9.30 spi1 +# config-pin p9.31 spi_sclk +CE1 = Pin('P9_28') +MOSI_1 = Pin('P9_29') +MISO_1 = Pin('P9_30') +SCLK_1 = Pin('P9_31') +#CircuitPython naming convention for SPI Clock +SCK_1 = Pin('P9_31') + # ordered as spiId, sckId, mosiId, misoId -spiPorts = () +spiPorts = ((0, SCLK, MOSI, MISO), (1, SCLK_1, MOSI_1, MISO_1)) # ordered as uartId, txId, rxId uartPorts = ( diff --git a/src/busio.py b/src/busio.py index 206635d..fb3ab10 100755 --- a/src/busio.py +++ b/src/busio.py @@ -71,18 +71,26 @@ class I2C(Lockable): class SPI(Lockable): def __init__(self, clock, MOSI=None, MISO=None): + print("SPI(): __init()") self.deinit() if board_id == "raspi_3" or board_id == "raspi_2": from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI elif board_id == "beaglebone_black": - from adafruit_blinka.microcontroller.beaglebone_black.spi import SPI as _SPI + print("SPI(): beaglebone_black: from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI") + from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI else: from machine import SPI as _SPI from microcontroller.pin import spiPorts + print("spiPorts: {0}".format(spiPorts)) + print("for:") for portId, portSck, portMosi, portMiso in spiPorts: + print(portId, portSck, portMosi, portMiso) if ((clock == portSck) and # Clock is required! (MOSI == portMosi or MOSI == None) and # But can do with just output (MISO == portMiso or MISO == None)): # Or just input + print("Line 91") + print(_SPI) + print(_SPI(portId)) self._spi = _SPI(portId) self._pins = (portSck, portMosi, portMiso) break @@ -96,7 +104,8 @@ class SPI(Lockable): from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI from adafruit_blinka.microcontroller.raspi_23.pin import Pin elif board_id == "beaglebone_black": - from adafruit_blinka.microcontroller.beaglebone_black.spi import SPI as _SPI + # reuse the raspberry pi class as both boards use Linux spidev + from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI from adafruit_blinka.microcontroller.beaglebone_black.pin import Pin else: from machine import SPI as _SPI