Skip to content

Instantly share code, notes, and snippets.

@craigjb
Last active October 15, 2025 17:41
Show Gist options
  • Select an option

  • Save craigjb/da1bc4200f0378a886a6b4987837551c to your computer and use it in GitHub Desktop.

Select an option

Save craigjb/da1bc4200f0378a886a6b4987837551c to your computer and use it in GitHub Desktop.
Initialization for 128x128 0.85" LCD with GC9107
# Example init and basic routines for 0.85" 128x128 pixel LCD
# Sold under Wisevision N085-1212TBWIG41-H12
#
# Unnecessary init commands have been stripped out versus other
# routines I found online
def write_cmd(cmd):
set_dc_pin_low()
spi_transmit(cmd)
def write_cmd_data(cmd, data):
write_cmd(cmd)
set_dc_pin_high()
spi_transmit(data)
def init_lcd():
# reset required on power up
set_reset_low()
sleep(120)
set_reset_high()
set_cs_low()
# Pixel format set
# 0x1 = 12 bits / pixel
# 0x5 = 16 bits / pixel
# 0x6 = 18 bits / pixel
write_cmd_data(0x3A, 0x05)
# Display inversion on
write_cmd(0x21)
# Sleep out
write_cmd(0x11)
set_cs_high()
# Wait 120 ms
sleep(120)
set_cs_low()
# Display on
write_cmd(0x29)
set_cs_high()
# Wait 20 ms
sleep(20)
COL_OFFSET = 2
ROW_OFFSET = 1
def write_data(data_bytes):
set_dc_pin_high()
for b in data_bytes:
spi_transmit(b)
def hi_byte(d):
return (d & 0xFF00) >> 8
def lo_byte(d):
return (d & 0xFF)
def set_window(x, y, width, height):
col = x + COL_OFFSET
col_data = [
hi_byte(col), low_byte(col),
hi_byte(col + width - 1), low_byte(col + width - 1)
]
row = y + ROW_OFFSET
row_data = [
hi_byte(row), low_byte(row),
hi_byte(row + height - 1), low_byte(row + height - 1)
]
set_cs_pin_low()
write_cmd(0x2A)
write_data(col_data)
write_cmd(0x2B)
write_data(row_data)
set_cs_pin_high()
def write_window(x, y, width, height, pixel_data):
set_window(x, y, width, height)
set_cs_pin_low()
write_cmd(0x2C)
write_data(pixel_data)
set_cs_pin_high()
def clear_to_color(color_r5g6b5):
hi = hi_byte(color_r5g6b5)
lo = lo_byte(color_r5g6b5)
write_window(0, 0, 128, 128, [hi, lo] * 128 * 128)
@hkfuertes
Copy link

Hello! I just followed your py to make a linux fb driver... (well, perplexity did it for me), and I found that I got the channels swapped... I get rbg... I dont know if my panel is bad connected or if it is a known issue or if it can be changed via driver... do you know?

@craigjb
Copy link
Author

craigjb commented Oct 15, 2025

Hello! I just followed your py to make a linux fb driver... (well, perplexity did it for me), and I found that I got the channels swapped... I get rbg... I dont know if my panel is bad connected or if it is a known issue or if it can be changed via driver... do you know?

It looks like in my most recent startup sequence I don’t send the “inversion on” command.

https://github.com/craigjb/Slabware/blob/34b2ec427d3ab2b52d205cacc12efd5d3fb1564c/hw/spinal/slabware/SlabGrid.scala#L31

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment