Pinout
This page makes reference to both the front and back of the SP-1 PCB. For these purposes, "front" is the side of the PCB that is visible after removing just the back panel. The "back" side is the one that becomes visible after removing the 3 PCB retention screws, unplugging the ribbon connector, and flipping the PCB over.
| Pin | CircuitPython Pin Names | Function |
|---|---|---|
| P0.05 | FADER1 |
Track fader 1 (leftmost) |
| P0.30 | FADER2 |
Track fader 2 |
| P0.04 | FADER3 |
Track fader 3 |
| P0.31 | FADER4 |
Track fader 4 (rightmost) |
| P0.02 | LADDER1 |
Button ladder 1, by voltage: |
| TRACK1, TRACK2, TRACK3, | ||
| TRACK4, PLAY | ||
| P0.03 | LADDER2 |
Button ladder 2, by voltage: |
| ROCKER-, VOL-, ROCKER+, VOL+ | ||
| P1.10 | LADDER_POWER |
Power for both ladders and |
| faders; drive high to read | ||
| P0.27 | BUTTON |
Function button ("••") |
| Active low, pull-up; the | ||
| SYSTEM_OFF wake source | ||
| P1.13 | LED_PLAY1 |
Playback LED 1 |
| P0.00 | LED_PLAY2 |
Playback LED 2 |
| P1.12 | LED_PLAY3 |
Playback LED 3 |
| P0.01 | LED_PLAY4 |
Playback LED 4 |
| P0.29 | LED_TRACK1 |
Track LED 1 |
| P0.26 | LED_TRACK2 |
Track LED 2 |
| P1.15 | LED_TRACK3 |
Track LED 3 |
| P1.14 | LED_TRACK4 |
Track LED 4 |
| P1.11 | SCL |
I2C SCL |
| P1.07 | SDA |
I2C SDA |
| — | board.I2C() |
Shared I2C bus object |
| P0.09 | TAS_RESET |
TAS2505 speaker amp reset, |
| active low | ||
| P0.15 | CS42_RESET |
CS42L42 headphone amp reset, |
| active low | ||
| P1.09 | I2S_DOUT |
Data out (to codec) |
| P0.11 |
I2S_LRCLK, I2S_WORD_SELECT
|
Word select / LRCLK |
| P0.12 |
I2S_BCLK, I2S_BIT_CLOCK
|
Bit clock |
| P0.13 | OSC_EN |
Audio oscillator enable |
| P0.06 | EMMC_CLK |
eMMC clock |
| P0.07 | EMMC_DAT0 |
eMMC data 0 |
| P0.08 | EMMC_CMD |
eMMC command |
| P1.08 | EMMC_RESET |
eMMC reset |
| P0.14 | EMMC_VCCQ |
eMMC I/O supply enable |
| P1.00 | CHARGE_ISET |
BQ24232 charge current select |
| P0.21 | CHARGE_ENABLE |
BQ24232 charge enable, |
| active low | ||
| P0.22 | CHARGE_STATUS |
BQ24232 charge status, |
| active low | ||
| P0.24 | POWER_GOOD |
BQ24232 power good, active low |
| P0.28 |
VBATT, BATTERY, VOLTAGE_MONITOR
|
Battery sense (AIN4) |
| through a divider | ||
| P0.10 | BT_RESET |
CYBT-353027-02 Bluetooth |
| module reset, active low |
The main brains of the operation is an nRF52840 microcontroller.
It is situated in the middle right of the front side of the board.
The USB C connector is on the back side of the PCB in the bottom left.
Plugging in the USB C will power on the device automatically.
Unplugging the USB C cable will also power the device on if it isn't already. Unplug the cable and then turn it off by holding the function button for 5 seconds. Unplugging first will make sure that it stays off and doesn't drain the battery.
Whenever a USB cable is connected, the internal battery will be charged using the power that it supplies.
There are 4 fader sliders on the front of the device.
Inside the device these are on a secondary PCB underneath main PCB and battery that connects with the ribbon cable. The secondary PCB is very hard to get to.
They are connected to the following pins:
- P0.05 - Fader 1, the leftmost one. Available in CircuitPython as
board.FADER1 - P0.30 - Fader 2. Available in CircuitPython as
board.FADER2 - P0.04 - Fader 3. Available in CircuitPython a
board.FADER3 - P0.31 - Fader 4, the rightmost one. Available in CircuitPython as
board.FADER4
There are 4 track LEDs beneath the track fader sliders on the front of the device.
Inside the device there is a secondary PCB underneath the main PCB and battery that connects with the ribbon cable. The secondary PCB is very hard to get to.
They are connected to the following pins:
- P0.29 - Track 1 LED, the leftmost one. Available in CircuitPython as
board.LED_TRACK1. - P0.26 - Track 2 LED. Available in CircuitPython as
board.LED_TRACK2. - P1.15 - Track 3 LED. Available in CircuitPython as
board.LED_TRACK3. - P1.14 - Track 4 LED, the rightmost one. Available in CircuitPython as
board.LED_TRACK4.
On the right side of the device between the two buttons there are 4 small white LEDs known as the play LEDs.
Inside the device these are on a flexible PCB near the ribbon cable connector.
They are connected to the following pins:
- P1.13 - Play 1 LED, the top one. Available in CircuitPython as
board.LED_PLAY1. - P0.00 - Play 2 LED. Available in CircuitPython as
board.LED_PLAY2. - P1.12 - Play 3 LED. Available in CircuitPython as
board.LED_PLAY3. - P0.01 - Play 4 LED, the bottom one. Available in CircuitPython as
board.LED_PLAY4.
The function button is the lower of the two buttons on the right side edge of the device. Its icon is two small dark circles.
The function button is the only button on the device that uses standard digital pin wiring. It is wired to P0.27, and is available in CircuitPython as board.BUTTON.
This button is also used for power on/off. While the device is off, a short press will turn it on. While the device is on, pressing and holding for 5 seconds will turn the device off.
The power off hold sequence is handled at a low level inside of the CircuitPython code. User code can make use of the button, but should do so sparingly and for short presses only. If it's used for UI, the user should be warned that holding it down will power off the device.
All of the other buttons on the device use resistor ladders. They are hooked up to analog pins, each button connects a resistor with a different value in the circuit. The value read from the analog pin can then be mapped back to which button it represents. There are 2 button ladders on the device. The demo project includes a helper module that makes it easy to detect and distinguish button presses.
In order to read the button ladders the board.LADDER_POWER pin must be driven high.
There is drift in the analog values. A 3% tolerance around the values stated below is used in the helper module from the demo code.
Ladder 1 has the 4 track buttons on the front face of the device and the play button on the side of the device. The play button is the top right side button, with the red triangle icon.
The buttons map to the following rough analog values:
- Track 1, far left -
3840 - Track 2 -
7200 - Track 3 -
13056 - Track 4, far right -
21713 - Play -
32593
Ladder 2 has the two circle volume buttons on the top edge of the device, and the rocker switch on the left edge. There are only 4 buttons connected to this ladder instead of 5, the lowest rung is unused.
The buttons are mounted on the back side of the PCB in the top corner.
The buttons map to the following rough analog values:
- Rocker down -
7200 - Volume down, left button -
13056 - Rocker up -
21713 - Volume up, right button -
32593
There is a Toshiba THGBMNG5D1LBAIL eMMC chip that provides about 4 GB of storage to the device. The chip itself supports up to 4 data lines, but on the SP-1 device it's wired with only a single data pin.
It is connected via the following pins:
- P0.06 - Clock, available in CircuitPython as
board.EMMC_CLK. - P0.07 - Data 0, available in CircuitPython as
board.EMMC_DAT0. - P0.08 - Command, available in CircuitPython as
board.EMMC_CMD. - P1.08 - Reset, available in CircuitPython as
board.EMMC_RESET. - P0.14 - VCC supply, available in CircuitPython as
board.EMMC_VCCQ.
By default the eMMC is auto-mounted as an additionl mass storage drive when you connect the SP-1 to a host PC via USB, just like SD cards do in CircuitPython. To disable the auto-mount put CIRCUITPY_EMMC_USB = false in the settings.toml file.
The main audio codec on the device is a Cirrus CS42L42.
The codec uses an onboard oscillator as its clock source. Drive board.OSC_EN high to enable the oscillator.
The codec is controlled and configured on the board.I2C() bus at address 0x48.
Audio is communicated over I2S on pins board.I2S_BCLK, board.I2S_LRCLK, and board.I2S_DOUT.
Pin P0.15 is connected to the CS42L42 reset, it is available in CircuitPython as board.CS42_RESET
The audio from this codec plays out of the 3.5mm jack that is closest to the USB port on the bottom edge of the device. The 3.5mm jack is mounted on the back side of the PCB.
A Texas Instruments TAS2505 speaker amplifier is used to drive the onboard speaker.
It is controlled and configured on the board.I2C() bus at addres 0x18.
Audio is communicated over I2S on pins board.I2S_BCLK, board.I2S_LRCLK, and board.I2S_DOUT.
Pin P0.09 is connected to the TAS2505 reset, it is available in CircuitPython as board.TAS_RESET.
The audio from the amplifier plays out of the speaker from the top edge of the device. The speaker housing is mounted on the back of the PCB in the top center.
There is an Infineon Bluetooth audio module on the back side of the PCB in the upper right corner.
It's reset is connected to pin P0.10, available in CircuitPython as board.BT_RESET.
It may be possible to use it from CircuitPython to output audio, but it has not been tested, and there is no driver written to support it. If you get this working let us know!
Page last edited September 04, 2026
Text editor powered by tinymce.