X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/a97887fedc5837fbff0a4d7c859d87269c1d3396..fe2e8551973e8e19edd9593de7796c645804a277:/src/adafruit_blinka/microcontroller/generic_linux/spi.py diff --git a/src/adafruit_blinka/microcontroller/generic_linux/spi.py b/src/adafruit_blinka/microcontroller/generic_linux/spi.py index a8141b9..71f74c8 100755 --- a/src/adafruit_blinka/microcontroller/generic_linux/spi.py +++ b/src/adafruit_blinka/microcontroller/generic_linux/spi.py @@ -1,5 +1,6 @@ import spidev import time +from adafruit_blinka.agnostic import detector class SPI: MSB = 0 @@ -29,6 +30,17 @@ class SPI: self.baudrate = baudrate self.mode = mode self.bits = bits + self.chip = detector.chip + + def set_no_cs(self): + # 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: + try: + self._spi.no_cs = True # this doesn't work but try anyways + except AttributeError: + pass def write(self, buf, start=0, end=None): if not buf: @@ -37,14 +49,11 @@ class SPI: end = len(buf) try: self._spi.open(self._port, 0) - try: - self._spi.no_cs = True # this doesn't work but try anyways - except AttributeError: - pass + self.set_no_cs() 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[start:end]]) + self._spi.writebytes2(buf[start:end]) self._spi.close() except FileNotFoundError as not_found: print("Could not open SPI device - check if SPI is enabled in kernel!") @@ -57,10 +66,7 @@ class SPI: end = len(buf) try: self._spi.open(self._port, 0) - try: - self._spi.no_cs = True # this doesn't work but try anyways - except AttributeError: - pass + self.set_no_cs() self._spi.max_speed_hz = self.baudrate self._spi.mode = self.mode self._spi.bits_per_word = self.bits @@ -84,10 +90,7 @@ class SPI: raise RuntimeError('Buffer slices must be of equal length.') try: self._spi.open(self._port, 0) - try: - self._spi.no_cs = True # this doesn't work but try anyways - except AttributeError: - pass + self.set_no_cs() self._spi.max_speed_hz = self.baudrate self._spi.mode = self.mode self._spi.bits_per_word = self.bits