From ffd3c408c96ba0d34f7ba7a1a9068a8a4c68d0f7 Mon Sep 17 00:00:00 2001 From: Francis Guevarra Date: Mon, 25 Nov 2019 16:48:13 -0800 Subject: [PATCH] Fix some SPI-related code to get BME280 example code working --- requirements.txt | 1 + src/adafruit_blinka/board/binho_nova.py | 12 +++++++++++- .../microcontroller/nova/__init__.py | 2 +- src/adafruit_blinka/microcontroller/nova/pin.py | 9 +++++++++ src/adafruit_blinka/microcontroller/nova/spi.py | 15 +++++---------- src/busio.py | 6 +++--- 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/requirements.txt b/requirements.txt index d9d85f6..0ddfbe8 100755 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ rpi_ws281x>=4.0.0; platform_machine=='armv7l' or platform_machine=='armv6l' spidev>=3.4; sys_platform == 'linux' sysv_ipc; sys_platform == 'linux' pyftdi>=0.30.0 +binho-host-adapter>=0.1.4 \ No newline at end of file diff --git a/src/adafruit_blinka/board/binho_nova.py b/src/adafruit_blinka/board/binho_nova.py index 35dc3a0..4d73556 100644 --- a/src/adafruit_blinka/board/binho_nova.py +++ b/src/adafruit_blinka/board/binho_nova.py @@ -7,4 +7,14 @@ IO3 = pin.IO3 IO4 = pin.IO4 TX = IO4 -RX = IO3 \ No newline at end of file +RX = IO3 + +SDA = pin.SDA +SCL = pin.SCL + +SCK = pin.SCK +SCLK = pin.SCLK +MOSI = pin.MOSI +MISO = pin.MISO +SS0 = pin.SS0 +SS1 = pin.SS1 \ No newline at end of file diff --git a/src/adafruit_blinka/microcontroller/nova/__init__.py b/src/adafruit_blinka/microcontroller/nova/__init__.py index c3aec31..b644aa7 100644 --- a/src/adafruit_blinka/microcontroller/nova/__init__.py +++ b/src/adafruit_blinka/microcontroller/nova/__init__.py @@ -21,4 +21,4 @@ class Connection: if len(devices) > 0: Connection.__instance = binhoHostAdapter.binhoHostAdapter(devices[0]) else: - raise RuntimeError('No Binho host adapter found!') \ No newline at end of file + raise RuntimeError('No Binho Nova found!') \ No newline at end of file diff --git a/src/adafruit_blinka/microcontroller/nova/pin.py b/src/adafruit_blinka/microcontroller/nova/pin.py index 04879e9..2046e22 100644 --- a/src/adafruit_blinka/microcontroller/nova/pin.py +++ b/src/adafruit_blinka/microcontroller/nova/pin.py @@ -48,6 +48,15 @@ IO2 = Pin(2) IO3 = Pin(3) IO4 = Pin(4) +# create None type pins for I2C and SPI since they are expected to be defined +SCL = IO2 +SDA = IO0 +SCK = SCLK = IO3 +MOSI = IO4 +MISO = IO2 +SS0 = IO0 +SS1 = IO1 + PWM0 = IO0 # No PWM support on IO1 PWM2 = IO2 diff --git a/src/adafruit_blinka/microcontroller/nova/spi.py b/src/adafruit_blinka/microcontroller/nova/spi.py index 0088ef2..f51192e 100644 --- a/src/adafruit_blinka/microcontroller/nova/spi.py +++ b/src/adafruit_blinka/microcontroller/nova/spi.py @@ -1,4 +1,5 @@ class SPI: + MSB = 0 PAYLOAD_MAX_LENGTH = 64 def __init__(self, clock): @@ -8,8 +9,9 @@ class SPI: self._nova.setClockSPI(0, clock) self._nova.setModeSPI(0, 0) self._nova.setIOpinMode(0, 'DOUT') - self._nova.setIOpinValue(0, 'HIGH') + self._nova.setIOpinMode(1, 'DOUT') self._nova.beginSPI(0) + # Cpol and Cpha set by mode # Mode Cpol Cpha # 0 0 0 @@ -19,8 +21,8 @@ class SPI: def init(self, baudrate=100000, polarity=0, phase=0, bits=8, firstbit=MSB, sck=None, mosi=None, miso=None): - print("baudrate: " + baudrate) - print("mode: " + (polarity<<1) | (phase)) + #print("baudrate: " + str(baudrate)) + #print("mode: " + str((polarity<<1) | (phase))) self._nova.setClockSPI(0, baudrate) self._nova.setModeSPI(0, (polarity<<1) | (phase)) @@ -35,7 +37,6 @@ class SPI: def write(self, buf, start=0, end=None): end = end if end else len(buf) chunks, rest = divmod(end - start, self.PAYLOAD_MAX_LENGTH) - self._nova.setIOpinValue(0, 'LOW') for i in range(chunks): chunk_start = start + i * self.PAYLOAD_MAX_LENGTH chunk_end = chunk_start + self.PAYLOAD_MAX_LENGTH @@ -48,15 +49,11 @@ class SPI: self._nova.clearBuffer(0) self._nova.writeToBuffer(0, 0, buffer_data) self._nova.transferBufferSPI(0, rest) - self._nova.setIOpinValue(0, 'HIGH') - print(self._nova.readBuffer(0, 4)) def readinto(self, buf, start=0, end=None, write_value=0): end = end if end else len(buf) - self._nova.setIOpinValue(0, 'LOW') for i in range(start, end): buf[start+i] = int(self.getSpiReceivedData(self._nova.transferSPI(0, write_value)), 16) - self._nova.setIOpinValue(0, 'HIGH') def write_readinto(self, buffer_out, buffer_in, out_start=0, out_end=None, in_start=0, in_end=None): out_end = out_end if out_end else len(buffer_out) @@ -69,10 +66,8 @@ class SPI: tmp.extend([0] * (readlen - len(buffer_out))) buffer_out = tmp i = 0 - self._nova.setIOpinValue(0, 'LOW') for data_out in buffer_out: data_in = int(self.getSpiReceivedData(self._nova.transferSPI(0, data_out)), 16) if i < readlen: buffer_in[in_start+i] = data_in i += 1 - self._nova.setIOpinValue(0, 'HIGH') diff --git a/src/busio.py b/src/busio.py index 712d506..74cfa89 100755 --- a/src/busio.py +++ b/src/busio.py @@ -97,9 +97,9 @@ class SPI(Lockable): return elif detector.board.binho_nova: from adafruit_blinka.microcontroller.nova.spi import SPI as _SPI - #from adafruit_blinka.microcontroller.nova.pin import SCK, MOSI, MISO + from adafruit_blinka.microcontroller.nova.pin import SCK, MOSI, MISO self._spi = _SPI(clock) - #self._pins = (SCK, MOSI, MISO) + self._pins = (SCK, MOSI, MISO) return elif detector.board.any_embedded_linux: from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI @@ -157,7 +157,7 @@ class SPI(Lockable): from adafruit_blinka.microcontroller.ft232h.pin import Pin elif detector.board.binho_nova: from adafruit_blinka.microcontroller.nova.spi import SPI as _SPI - #from adafruit_blinka.microcontroller.nova.pin import Pin + from adafruit_blinka.microcontroller.nova.pin import Pin else: from machine import SPI as _SPI from machine import Pin -- 2.49.0