--- /dev/null
+import sys
+import time
+sys.path.append('/home/pi/Adafruit_Micropython_Blinka/src')
+sys.path.append('/home/pi/Adafruit_Python_GPIO')
+sys.path.append('/home/pi/Adafruit_Python_PureIO')
+
+import board
+import digitalio
+import busio
+
+spi = busio.SPI(board.SCLK, board.MOSI, board.MISO)
+while not spi.try_lock():
+ pass
+spi.configure(baudrate=16000000)
+spi.unlock()
+
+while True:
+ spi.write(bytes([x for x in range(64)]))
+ time.sleep(0.1)
+++ /dev/null
-import sys
-import time
-sys.path.append('/home/pi/Adafruit_Micropython_Blinka/src')
-sys.path.append('/home/pi/Adafruit_Python_GPIO')
-sys.path.append('/home/pi/Adafruit_Python_PureIO')
-
-import board
-import digitalio
-import busio
-
-print("hello blinka!")
-
-i2c = busio.I2C(board.SCL, board.SDA)
-
-print("I2C devices found: ", [hex(i) for i in i2c.scan()])
-
-if not 0x18 in i2c.scan():
- print("Didn't find MCP9808")
- exit()
-
-def temp_c(data):
- value = data[0] << 8 | data[1]
- temp = (value & 0xFFF) / 16.0
- if value & 0x1000:
- temp -= 256.0
- return temp
-
-while True:
- i2c.writeto(0x18, bytes([0x05]), stop=False)
- result = bytearray(2)
- i2c.readfrom_into(0x18, result)
- print(temp_c(result))
- time.sleep(0.5)
SDA = pin.SDA
SCL = pin.SCL
+D2 = pin.D2
+D3 = pin.D3
D4 = pin.D4
+D9 = pin.D9
+D10 = pin.D10
+D11 = pin.D11
+MISO = pin.D9
+MOSI = pin.D10
+SCLK = pin.D11
D14 = pin.D14
D15 = pin.D15
D17 = pin.D17
raise NotImplementedError("Only I2C Master supported!")
_mode = self.MASTER
- if baudrate != None:
- print("I2C frequency is not settable in python, ignoring!")
+ #if baudrate != None:
+ # print("I2C frequency is not settable in python, ignoring!")
try:
self._i2c_bus = smbus.SMBus(bus_num)
self.id = bcm_number
def __repr__(self):
- return "BCM #%d" % self.id
+ return str(self.id)
+
+ def __eq__(self, other):
+ return self.id == other
def init(self, mode=IN, pull=None):
if mode != None:
D27 = Pin(27)
# ordered as spiId, sckId, mosiId, misoId
-spiPorts = ((1, SCLK, MOSI, MISO), (2, SCLK_2, MOSI_2, MISO_2))
+spiPorts = ((0, SCLK, MOSI, MISO), (1, SCLK_2, MOSI_2, MISO_2))
# ordered as uartId, txId, rxId
uartPorts = (
--- /dev/null
+import spidev
+import time
+
+class SPI:
+ MSB = 0
+ LSB = 1
+ CPHA = 1
+ CPOL = 2
+
+ baudrate = 100000
+ mode = 0
+ bits = 8
+
+ def __init__(self, portid):
+ self._port = portid
+ self._spi = spidev.SpiDev()
+
+ def init(self, baudrate=100000, polarity=0, phase=0, bits=8,
+ firstbit=MSB, sck=None, mosi=None, miso=None):
+ mode = 0
+ if polarity:
+ mode |= CPOL
+ if phase:
+ mode |= CPHA
+
+ self.clock_pin = sck
+ self.mosi_pin = mosi
+ self.miso_pin = miso
+ self.baudrate = baudrate
+ self.mode = mode
+ self.bits = bits
+
+ def write(self, buf):
+ if not buf:
+ return
+ try:
+
+ self._spi.open(self._port, 0)
+ self._spi.no_cs = True
+ self._spi.max_speed_hz = self.baudrate
+ self._spi.mode = self.mode
+ self._spi.bits_per_word = self.bits
+ self._spi.writebytes([x for x in buf])
+ self._spi.close()
+ except FileNotFoundError as not_found:
+ print("Could not open SPI device - check if SPI is enabled in kernel!")
+ raise
class SPI(Lockable):
def __init__(self, clock, MOSI=None, MISO=None):
+ self.deinit()
+ if boardId == "raspi_3" or boardId == "raspi_2":
+ from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI
+ else:
+ from machine import SPI as _SPI
from microcontroller.pin import spiPorts
for portId, portSck, portMosi, portMiso in spiPorts:
if clock == portSck and MOSI == portMosi and MISO == portMiso:
- self._spi = SPI(portId)
+ self._spi = _SPI(portId)
self._pins = (portSck, portMosi, portMiso)
break
else:
raise NotImplementedError(
- "No Hardware SPI on (clock, MOSI, MISO)={}\nValid SPI ports:{}".
+ "No Hardware SPI on (SCLK, MOSI, MISO)={}\nValid SPI ports:{}".
format((clock, MOSI, MISO), spiPorts))
def configure(self, baudrate=100000, polarity=0, phase=0, bits=8):
- if self._locked:
+ if boardId == "raspi_3" or boardId == "raspi_2":
+ from adafruit_blinka.microcontroller.raspi_23.spi import SPI as _SPI
+ from adafruit_blinka.microcontroller.raspi_23.pin import Pin
+ else:
+ from machine import SPI as _SPI
from machine import Pin
+
+ if self._locked:
# TODO check if #init ignores MOSI=None rather than unsetting, to save _pinIds attribute
self._spi.init(
baudrate=baudrate,
polarity=polarity,
phase=phase,
bits=bits,
- firstbit=SPI.MSB,
+ firstbit=_SPI.MSB,
sck=Pin(self._pins[0].id),
mosi=Pin(self._pins[1].id),
miso=Pin(self._pins[2].id)