Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add preliminary SPI support for BeagleBone Black #46

Merged
merged 3 commits into from
Nov 22, 2018
Merged

Add preliminary SPI support for BeagleBone Black #46

merged 3 commits into from
Nov 22, 2018

Conversation

pdp7
Copy link
Collaborator

@pdp7 pdp7 commented Nov 21, 2018

FYI - THIS IS WORK IN PROGRESS. ADDITIONAL COMMITS WILL BE ADDED TO THIS PR.

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

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
reuse the Raspberry Pi SPI class as both are
Linux boards using spidev.  The main difference
is the pins numbers are different.

Testing with Adafruit_CircuitPython_BME280 in SPI mode.

TODO: wire up the board to the BeagleBone Black

Current output:

debian@beaglebone:~/Adafruit_CircuitPython_BME280$ sudo python3 examples/bme280_simpletest.py
SPI(): __init()
SPI(): beaglebone_black: from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI
spiPorts: ((0, P9_22, P9_18, P9_21), (1, P9_22, P9_18, P9_21))
for:
0 P9_22 P9_18 P9_21
Line 91
<class 'adafruit_blinka.microcontroller.raspi_23.spi.SPI'>
<adafruit_blinka.microcontroller.raspi_23.spi.SPI object at 0xb6b3c890>
Traceback (most recent call last):
  File "examples/bme280_simpletest.py", line 15, in <module>
    bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs)
  File "/usr/local/lib/python3.5/dist-packages/adafruit_circuitpython_bme280-2.1.1.dev3+g1416d93-py3.5.egg/adafruit_bme280.py", line 247, in __init__
  File "/usr/local/lib/python3.5/dist-packages/adafruit_circuitpython_bme280-2.1.1.dev3+g1416d93-py3.5.egg/adafruit_bme280.py", line 78, in __init__
RuntimeError: Failed to find BME280! Chip ID 0x0
@pdp7
Copy link
Collaborator Author

pdp7 commented Nov 22, 2018

I have wired up the BME280 per the learning guide.

BME280  CS: BBB CE0  / P9_17
BME280 SDI: BBB MOSI / P9_18
BME280 SDO: BBB MISO / P9_21
BME280 SCK: BBB SCLK / P9_22

The BME280 CircuitPython example runs OK on the BeagleBone:

debian@beaglebone:~/Adafruit_CircuitPython_BME280$ sudo python3 examples/bme280_simpletest.py 
SPI(): __init()
SPI(): beaglebone_black: from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI
spiPorts: ((0, P9_22, P9_18, P9_21), (1, P9_22, P9_18, P9_21))
for:
0 P9_22 P9_18 P9_21
Line 91
<class 'adafruit_blinka.microcontroller.raspi_23.spi.SPI'>
<adafruit_blinka.microcontroller.raspi_23.spi.SPI object at 0xb6ac2890>

Temperature: 20.8 C
Humidity: 34.3 %
Pressure: 1006.9 hPa
Altitude = 53.01 meters

Temperature: 20.8 C
Humidity: 34.3 %
Pressure: 1006.9 hPa
Altitude = 52.79 meters

@pdp7
Copy link
Collaborator Author

pdp7 commented Nov 22, 2018

Testing with SP1 port instead of SPI0

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 spi_cs
config-pin p9.29 spi
config-pin p9.30 spi
config-pin p9.31 spi_sclk

BME280 wiring:

BME280  CS:    CE1 P9.28 SPI1_CS0
BME280 SDO: MISO_1 P9.29 SPI1_D0
BME280 SDI: MOSI_1 P9.30 SPI1_D1
BME280 SCK: SCLK_1 P9.31 SPI_SCLK
+++ b/examples/bme280_simpletest.py
@@ -3,15 +3,17 @@ import time
 import board
 import busio
 import adafruit_bme280
+import digitalio
 
 # Create library object using our Bus I2C port
-i2c = busio.I2C(board.SCL, board.SDA)
-bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
+#i2c = busio.I2C(board.SCL, board.SDA)
+#bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
 
 # OR create library object using our Bus SPI port
 #spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
-#bme_cs = digitalio.DigitalInOut(board.D10)
-#bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs)
+spi = busio.SPI(board.SCK_1, board.MOSI_1, board.MISO_1)
+bme_cs = digitalio.DigitalInOut(board.CE1)
+bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs)
 
 # change this to match the location's pressure (hPa) at sea level
 bme280.sea_level_pressure = 1013.25

BME280 on SPI1 works OK

debian@beaglebone:~/Adafruit_CircuitPython_BME280$ sudo python3 ./examples/bme280_simpletest.py 
SPI(): __init()
SPI(): beaglebone_black: from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI
spiPorts: ((0, P9_22, P9_18, P9_21), (1, P9_31, P9_29, P9_30))
for:
0 P9_22 P9_18 P9_21
1 P9_31 P9_29 P9_30
Line 91
<class 'adafruit_blinka.microcontroller.raspi_23.spi.SPI'>
<adafruit_blinka.microcontroller.raspi_23.spi.SPI object at 0xb6b1b890>

Temperature: 22.4 C
Humidity: 34.2 %
Pressure: 1006.7 hPa
Altitude = 54.83 meters

Temperature: 22.4 C
Humidity: 34.1 %
Pressure: 1006.7 hPa
Altitude = 54.80 meters

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 spi_cs
config-pin p9.29 spi
config-pin p9.30 spi
config-pin p9.31 spi_sclk
@pdp7 pdp7 requested a review from ladyada November 22, 2018 07:28
@pdp7
Copy link
Collaborator Author

pdp7 commented Nov 22, 2018

@ladyada I have tested OK with both SPI0 and SPI1 on the BeagleBone Black with the BME280 sensor

@ladyada
Copy link
Member

ladyada commented Nov 22, 2018

rad! ok wanna do a merge and release then?

@pdp7
Copy link
Collaborator Author

pdp7 commented Nov 22, 2018

@ladyada
yes, that sounds good. merging now

@pdp7 pdp7 merged commit 35d5df3 into adafruit:master Nov 22, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants