Streaming Radio Player: OLED SPI Speed Fix

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:

SH1106 OLED Controller - SPI timing
SH1106 OLED Controller – SPI timing

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.

One thought on “Streaming Radio Player: OLED SPI Speed Fix

Comments are closed.