The OLED displays on the streaming radio players have SH1106 controllers supported by the Luma library, which works just fine. Digging into the source shows the default SH1106 setup (see the
class spi() at the bottom) uses an 8 MHz clock:
def __init__(self, spi=None, gpio=None, port=0, device=0, bus_speed_hz=8000000, transfer_size=4096, gpio_DC=24, gpio_RST=25): assert(bus_speed_hz in [mhz * 1000000 for mhz in [0.5, 1, 2, 4, 8, 16, 32]])
Alas, the SH1106 doc suggests a maximum SPI clock of 2 to 4 MHz, the latter only with fair skies, a tailwind, and a stiff power supply:
The display doesn’t get updated all that often, so there’s no point in rushing things:
serial = spi(device=0,port=0,bus_speed_hz=1000000) device = sh1106(serial)
They’ve been ticking along without mysterious blanking or mirroring for a bit over two weeks, so I’ll call it a fix.