Skip to content

Instantly share code, notes, and snippets.

@anecdata
Last active July 30, 2025 05:19
Show Gist options
  • Save anecdata/8fe5aa2a11147fa117f71bd84a0f1712 to your computer and use it in GitHub Desktop.
Save anecdata/8fe5aa2a11147fa117f71bd84a0f1712 to your computer and use it in GitHub Desktop.
CircuitPython SPITarget pin finder
# SPITarget pin finder
# e.g., SPITarget(sck=board.D12, mosi=board.D13, miso=board.D11, ss=board.D10)
# modified from an old SPI pin finder, probably _somewhere_ in the Adafruit docs
import board
import busio
from microcontroller import Pin
from spitarget import SPITarget
def is_hardware_spit(clk, mosi, miso, ss):
try:
p = SPITarget(sck=clk, mosi=mosi, miso=miso, ss=ss)
p.deinit()
return True
except ValueError:
return False
def get_unique_pins():
exclude = ['NEOPIXEL', 'APA102_MOSI', 'APA102_SCK']
pins = [pin for pin in [
getattr(board, p) for p in dir(board) if p not in exclude]
if isinstance(pin, Pin)]
unique = []
for p in pins:
if p not in unique:
unique.append(p)
return unique
pins = get_unique_pins()
for clk_pin in pins:
for mosi_pin in pins:
for miso_pin in pins:
for ss_pin in pins:
pin_set = {clk_pin, mosi_pin, miso_pin, ss_pin} # set()
if len(pin_set) < 4:
continue
if is_hardware_spit(clk_pin, mosi_pin, miso_pin, ss_pin):
print(f"sck={clk_pin}, mosi={mosi_pin}, miso={miso_pin}, ss={ss_pin}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment