From 23db6c337b1ba9d74f31301f15c3bc5847003358 Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Sat, 23 May 2020 16:42:10 +0100 Subject: [PATCH] Drivers: Iss #2 fix SPI bus problem on ESP32. --- drivers/ssd1331/ssd1331.py | 7 ++++++- drivers/ssd1331/ssd1331_16bit.py | 7 ++++++- drivers/ssd1351/ssd1351_16bit.py | 7 ++++++- drivers/ssd1351/ssd1351_generic.py | 8 +++++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/drivers/ssd1331/ssd1331.py b/drivers/ssd1331/ssd1331.py index c3603c0..9fc230f 100644 --- a/drivers/ssd1331/ssd1331.py +++ b/drivers/ssd1331/ssd1331.py @@ -49,6 +49,11 @@ import framebuf import utime import gc +import sys +# https://github.com/peterhinch/micropython-nano-gui/issues/2 +# The ESP32 does not work reliably in SPI mode 1,1. Waveforms look correct. +# Keep 0,0 on STM as testing was done in that mode. +_bs = 0 if sys.platform == 'esp32' else 1 # SPI bus state class SSD1331(framebuf.FrameBuffer): # Convert r, g, b in range 0-255 to an 8 bit colour value @@ -80,7 +85,7 @@ class SSD1331(framebuf.FrameBuffer): self.show() def _write(self, buf, dc): - self.spi.init(baudrate=self.rate, polarity=1, phase=1) + self.spi.init(baudrate=self.rate, polarity=_bs, phase=_bs) self.pincs(1) self.pindc(dc) self.pincs(0) diff --git a/drivers/ssd1331/ssd1331_16bit.py b/drivers/ssd1331/ssd1331_16bit.py index ad378b1..02fe704 100644 --- a/drivers/ssd1331/ssd1331_16bit.py +++ b/drivers/ssd1331/ssd1331_16bit.py @@ -49,6 +49,11 @@ import framebuf import utime import gc +import sys +# https://github.com/peterhinch/micropython-nano-gui/issues/2 +# The ESP32 does not work reliably in SPI mode 1,1. Waveforms look correct. +# Keep 0,0 on STM as testing was done in that mode. +_bs = 0 if sys.platform == 'esp32' else 1 # SPI bus state class SSD1331(framebuf.FrameBuffer): # Convert r, g, b in range 0-255 to a 16 bit colour value RGB565 @@ -80,7 +85,7 @@ class SSD1331(framebuf.FrameBuffer): self.show() def _write(self, buf, dc): - self.spi.init(baudrate=self.rate, polarity=1, phase=1) + self.spi.init(baudrate=self.rate, polarity=_bs, phase=_bs) self.pincs(1) self.pindc(dc) self.pincs(0) diff --git a/drivers/ssd1351/ssd1351_16bit.py b/drivers/ssd1351/ssd1351_16bit.py index 0b7df2d..9d2c75c 100644 --- a/drivers/ssd1351/ssd1351_16bit.py +++ b/drivers/ssd1351/ssd1351_16bit.py @@ -34,6 +34,11 @@ import utime import gc import micropython from uctypes import addressof +import sys +# https://github.com/peterhinch/micropython-nano-gui/issues/2 +# The ESP32 does not work reliably in SPI mode 1,1. Waveforms look correct. +# Keep 0,0 on STM as testing was done in that mode. +_bs = 0 if sys.platform == 'esp32' else 1 # SPI bus state # Initialisation commands in cmd_init: # 0xfd, 0x12, 0xfd, 0xb1, # Unlock command mode @@ -93,7 +98,7 @@ class SSD1351(framebuf.FrameBuffer): gc.collect() def _write(self, mv, dc): - self.spi.init(baudrate=self.rate, polarity=1, phase=1) + self.spi.init(baudrate=self.rate, polarity=_bs, phase=_bs) self.pincs(1) self.pindc(dc) self.pincs(0) diff --git a/drivers/ssd1351/ssd1351_generic.py b/drivers/ssd1351/ssd1351_generic.py index 2f9d09c..beb9bad 100644 --- a/drivers/ssd1351/ssd1351_generic.py +++ b/drivers/ssd1351/ssd1351_generic.py @@ -36,6 +36,12 @@ import gc import micropython from uctypes import addressof +import sys +# https://github.com/peterhinch/micropython-nano-gui/issues/2 +# The ESP32 does not work reliably in SPI mode 1,1. Waveforms look correct. +# Keep 0,0 on STM as testing was done in that mode. +_bs = 0 if sys.platform == 'esp32' else 1 # SPI bus state + # Timings with standard emitter # 1.86ms * 128 lines = 240ms. copy dominates: show() took 272ms # Buffer transfer time = 272-240 = 32ms which accords with expected: @@ -108,7 +114,7 @@ class SSD1351(framebuf.FrameBuffer): self.show() def _write(self, buf, dc): - self.spi.init(baudrate=self.rate, polarity=1, phase=1) + self.spi.init(baudrate=self.rate, polarity=_bs, phase=_bs) self.pincs(1) self.pindc(dc) self.pincs(0)