Click diagram for larger resolution images. There is also a PrettyPins PDF on GitHub.
- USB C connector - This is used for power and data. Connect to your computer via a USB C cable to update firmware and edit code.
- ON LED - To the right of the USB C connector is the power indicator LED, labeled ON on the board silk. When the Fruit Jam is powered, this LED will be lit.
- GND - This is the common ground for all power and logic.
- 3V - These pins are the output from the 3.3V regulator, they can supply 500mA peak.
- 5V - These pins are the output from the 5V regulator. It can supply up to around 500mA peak.
- Power Switch - At the bottom edge of the board is a sliding switch labeled OFF ON. This is the power switch for the board.
UART, I2C, and SPI on RP2350
The RP2350 is capable of handling I2C, SPI, and UART on many pins. However, there are really only two peripherals each of I2C, SPI, and UART: I2C0 and I2C1, SPI0 and SPI1, and UART0 and UART1. So while many pins are capable of I2C, SPI, and UART, you can only do two at a time, and only on separate peripherals, 0 and 1. I2C, SPI and UART peripherals are included and numbered below.
PWM on RP2350B
The RP2350B supports PWM on all pins. However, it is not capable of PWM on all pins at the same time. There are 12 PWM "slices", each with two outputs, A and B. Each pin on the Fruit Jam is assigned a PWM slice and output. For example, A0 is PWM8A, which means it is the first output of the eighth slice. You can have up to 24 PWM objects on this board. The important thing to know is that you cannot use the same slice and output more than once at the same time. The PWM slices and outputs are indicated below.
Analog Pins
The Fruit Jam has six ADCs. These pins are the only pins capable of handling analog, and they can also do digital.
- A0/GPIO40 - This pin is ADC0. It is also SPI1 MOSI, UART1 TX, I2C0 SDA and PWM8A. It is not broken out on the 2x16 header. It is only available on the JST-PH port, discussed later on this page.
- A1/GPIO41 - This pin is ADC1. It is also SPI1 CSn, UART1 RX, I2C0 SCL and PWM8B.
- A2/GPIO42 - This pin is ADC2. It is also SPI1 SCK, UART1 CTS, I2C1 SDA and PWM9A.
- A3/GPIO43 - This pin is ADC3. It is also SPI1 MOSI, UART1 RTS, I2C1 SCL and PWM9B.
- A4/GPIO44 - This pin is ADC4. It is also SPI1 MOSI, UART0 TX, I2C0 SDA and PWM10A.
- A5/GPIO45 - This pin is ADC5. It is also SPI1 CSn, UART0 RX, I2C0 SCL and PWM10B.
Digital Pins
These are the digital I/O pins. They all have multiple capabilities.
- D6/GPIO6 - Digital I/O pin 6. It is also SPI0 SCK, UART1 CTS, I2C1 SDA, and PWM3A.
- D7/GPIO7 - Digital I/O pin 7. It is also SPI0 MOSI, UART1 RTS, I2C1 SCL, and PWM3B.
- D8/TX/GPIO8 - Digital I/O pin 8 and the main UART1 TX pin for the board. It is also SPI1 MOSI, UART1 TX, I2C0 SDA, and PWM4A. It is used as the TX pin for the ESP32-C6 AirLift.
- D9/RX/GPIO9 - Digital I/O pin 9 and the main UART1 RX pin for the board. It is also SPI1 CSn, UART1 RX, I2C0 SCL, and PWM4B. It is used as the RX pin for the ESP32-C6 AirLift.
- D10/GPIO10 - Digital I/O pin 10. It is also SPI1 SCK, UART1 CTS, I2C1 SDA, and PWM5A.
- SCK/GPIO30 - The main SPI1 SCK. It is also UART0 CTS, I2C1 SDA, and PWM7A.
- MISO/GPIO28 - The main SPI1 MISO. It is also UART0 RTS, I2C1 SCL, and PWM7B.
- MOSI/GPIO31 - The main SPI1 MOSI. It is also UART0 TX, I2C0 SDA, and PWM6A.
- SDA/GPIO20 - The main I2C0 data pin. It is also SPI0 MISO, UART1 TX and PWM2A.
- SCL/GPIO21 - The main I2C0 clock pin. It is also SPI0 CSn, UART1 RX and PWM2B.
CircuitPython I2C, SPI, and UART
Note that in CircuitPython, there is a board object each for STEMMA QT, I2C, SPI, and UART that use the connector and pins labeled on the Fruit Jam. You can use these objects to initialize these peripherals in your code.
-
board.STEMMA_I2C()uses the STEMMA QT connector (in this case, SCL/SDA pins) -
board.I2C()uses SCL/SDA pins (GPIO21 and GPIO20) -
board.SPI()uses SCK/MO/MI pins (GPIO30, GPIO31 and GPIO28) -
board.UART()uses RX/TX pins (GPIO9 and GPIO8)
Arduino I2C, SPI, and UART
I2C, SPI, and UART can be accessed with these objects in Arduino:
-
Wireis used for the default I2C and STEMMA QT connector (GPIO21 and GPIO20). -
SPIis used for the default SPI pins (GPIO30, GPIO31 and GPIO28). -
Serial1is used for the default UART pins (GPIO9 and GPIO8).
The peripheral order is defined in the board support definition for Arduino. For example, you'll notice that even though the default SPI (GPIO30, GPIO31 and GPIO28) is located on SPI1, it is defined as SPI rather than SPI1.
RP2350 A2 E9 Erratum
The Adafruit Fruit Jam comes with the A2 version of the RP2350B, which is affected by the E9 erratum. This errata affects some uses of GPIO and PIO such as high-impedance inputs and the internal pulldowns. A pin can read as high even when driven or pulled low, if the input signal is high impedance or if an attached pull-down resistor is too weak (has too high a value). You may need to use 8.2K or smaller resistors if pull-downs are required.
The large square towards the middle is the RP2350 microcontroller, the "brains" of this board. It has dual M33 cores with 150 MHz clock rate. It has 520KB of SRAM and 8KB OTP memory, which means that MicroPython and CircuitPython run great, and also IoT projects that need a lot of memory buffer space will run better.
Other features include 3 PIO blocks, a TrustZone secure boot, and a special High Speed Transmit (HSTX) peripheral that drives 4 lanes of differential data transmission such the DVI output onboard without needing to overclock or use PIO.
The square towards the top-middle is the 16 MB QSPI Flash. It is connected to 6 pins that are not brought out on the GPIO pads. It is used for storing files and MicroPython/CircuitPython code storage.
The Fruit Jam comes with 8 MB of PSRAM. This allows for more storage for things like graphics and audio. Make sure to put your memory hungry assets at the top of your code to have them go into PSRAM to maximize the storage capability on your board.
The WiFi capability uses an Espressif ESP32-C6 Wi-Fi coprocessor, aka the AirLift, with TLS/SSL support built-in. Communication is over SPI and it has CircuitPython library support ready to go for fast wireless integration with the following pins:
- MOSI pin (
board.MOSI) - MISO pin (
board.MISO) - SCK pin (
board.SCK) -
CS pin (
board.ESP_CS) -
Interrupt pin (
board.ESP_IRQ) -
Ready/Busy pin (
board.ESP_BUSY) -
Reset pin (
board.ESP_RESET, also known asboard.PERIPH_RESET). This reset pin is shared with the reset pin on the TLV320DAC3100 I2S DAC. - ESP RX/TX pins (
board.RXandboard.TX) are shared with the RP2350 RX/TX pins. - The ESP ReSeT pin (used in some serial contexts) is a shared peripheral reset pin on
board.PERIPH_RSTthat is also used by the TLV320 I2S DAC. - The ESP GPIO9 pin for bootloader enable is connected to
board.BUTTON1
Since the ESP32-C6 WiFi co-procesor and the TLV320DAC3100 I2S DAC share a reset pin, you must set up the C6 first, and then set up the TLV320DAC3100. Calling adafruit_esp32spi.ESP_SPIcontrol(...) will toggle the reset pin and will clear any prior setup done to the TLV320DAC3100.
The RP2350 has a new built-in peripheral called the High Speed Transmit (HSTX) peripheral. It can drive 4 lanes of differential data transmission without needing to overclock or use PIO. These pins are connected to the DVI Video port on the Fruit Jam:
- CKN/GPIO12 - Digital I/O pin 12 and one of the 8 HSTX peripheral pins. It is also SPI1 MOSI, UART0 TX, I2C0 SDA and PWM6A.
- CKP/GPIO13 - Digital I/O pin 13 and one of the 8 HSTX peripheral pins. It is also SPI1 CSn, UART0 RX, I2C0 SCL and PWM6B.
- D0N/GPIO14 - Digital I/O pin 14 and one of the 8 HSTX peripheral pins. It is also SPI1 SCK, UART0 CTS, I2C1 SDA and PWM7A.
- D0P/GPIO15 - Digital I/O pin 15 and one of the 8 HSTX peripheral pins. It is also SPI1 MISO, UART0 RTS, I2C1 SCL and PWM7B.
- D1N/GPIO16 - Digital I/O pin 16 and one of the 8 HSTX peripheral pins. It is also SPI0 MISO, UART0 TX, I2C0 SDA and PWM0A.
- D1P/GPIO17 - Digital I/O pin 17 and one of the 8 HSTX peripheral pins. It is also SPI0 CS, UART0 RX, I2C0 SCL and PWM0B.
- D2N/GPIO18 - Digital I/O pin 18 and one of the 8 HSTX peripheral pins. It is also SPI0 SCK, UART0 CTS, I2C1 SDA, and PWM1A.
- D2P/GPIO19 - Digital I/O pin 19 and one of the 8 HSTX peripheral pins. It is also SPI0 RTS, UART0 RTS, I2C1 SCL, and PWM1B.
On the front of the board, to the left of Button #3, is the TLV320DAC3100 I2S DAC. It is a stereo audio DAC that can drive a mono 4-8Ω speaker or up to 16Ω stereo headphones directly. It communicates with the RP2350 via these pins:
- Data - Located on GPIO24. It can be accessed via
board.I2S_DINin CircuitPython andPIN_I2S_DATAOUTin Arduino. - Main Clock - Located on GPIO25. It can be accessed via
board.I2S_MCLKin CircuitPython andPIN_I2S_MCLKin Arduino. This pin is optional because you can configure the I2C driver to use BCLK as the PLL input. - Bit Clock - Located on GPIO26. It can be accessed via
board.I2S_BCLKin CircuitPython andPIN_I2S_BITCLKin Arduino. -
Word Select - Located on GPIO27. It can be accessed via
board.I2S_WSin CircuitPython andPIN_I2S_WORDSELin Arduino. - Interrupt - Located on GPIO23. It can be accessed via
board.I2S_IRQin CircuitPython andPIN_I2S_IRQin Arduino. - Peripheral Reset - Located on GPIO22. It can be accessed via
bobard.PERIPH_RESETin CircuitPython andPIN_PERIPHERAL_RESETin Arduino. The DAC needs to be reset before use by toggling this pin from low to high. This pin is shared with the reset pin ESP32-C6 and is broken out on the 2x16 header. - 3.5mm output jack - Labeled Stereo Headphone on the board silk, this is the onboard headphone jack. It can provide stereo audio that can connect directly to your 16Ω headphones.
- Speaker Output - Labeled 4-8Ω Speaker on the board silk, this is the onboard JST-SH speaker port. You'll want to disable speaker output when using the headphone output for the best possible sound quality. The class-D amplifier for the speaker can cause some noise on the headphone output.
There is a dedicated guide for the TLV320DAC3100 I2S DAC with more information on its features.
Since the ESP32-C6 WiFi co-procesor and the TLV320DAC3100 I2S DAC share a reset pin, you must set up the C6 first, and then set up the TLV320DAC3100. Calling adafruit_esp32spi.ESP_SPIcontrol(...) will toggle the reset pin and will clear any prior setup done to the TLV320DAC3100.
JST-SH Speaker & Top Plate
A small JST-SH speaker can be semi-permanently connected by plugging in the JST-SH connector to the Speaker Output connector on the Fruit Jam, then using the self adhesive on the back of the mini speaker to attach it on the under side of the top plate. It is easiest to attach over in the center of the board where there are fewer components to interfere with placement.
After adhering the speaker to the top plate flip it over, and align it with the holes for mount screws, header pins, and buttons. Carefully screw in the M3 screws to the mounting holes. Do not tighten the screw nearest to the speaker connector all the way. There needs to enough of a gap to not pinch the wires coming from the JST-PH connector.
There are three buttons available on the right edge of the board:
-
Button #1 - Located on GPIO0. It is available at
board.BUTTON1in CircuitPython. It is also the UF2 BOOT button and is broken out on the 2x16 header. -
Button #2 - Located on GPIO4. It is available at
board.BUTTON2in CircuitPython -
Button #3 - Located on GPIO5. It is available at
board.BUTTON3in CircuitPython
The Boot button is the button on the right, shared with Button #1. It is also broken out on the 2x16 header. It is used to enter the bootloader. To enter the bootloader, press and hold Button #1 and then power up the board (either by plugging it into USB or pressing Reset). The bootloader is used to install/update CircuitPython.
The Reset button is on the left of the board. It restarts the board and helps enter the bootloader. You can click it to reset the board without unplugging the USB cable.
The Reset pin can be used to reset the board and is broken out on the 2x16 header. Tie to ground manually to reset the board.
On the left side of the board are five onboard status NeoPixel LEDs. They are connected to GPIO32. In CircuitPython, the NeoPixels are available at board.NEOPIXEL and the library for it is available in the bundle. In Arduino, they are accessible at PIN_NEOPIXEL. The NeoPixel is powered by the 3.3V power supply but that hasn't shown to make a big difference in brightness or color. In CircuitPython, the LEDs are used to indicate the runtime status.
To the left of the USB C connector is the onboard LED, connected to GPIO29. This little red LED is controllable in CircuitPython code using board.LED, and in Arduino as PIN_LED. It shares a GPIO pin with the IR receiver.
Unusually, the built-in LED is wired with its anode connected to 3.3V, and its cathode connected to GPIO29. That means that setting the pin to LOW results in the LED turning on, and setting the pin to HIGH results in the LED turning off.
The built-in LED lights up if you ground its pin (setting it to low). This is unusual and is the reverse from most other boards.
If you have a 1st batch Fruit Jam shipped before 8/10/2025 the IR receiver will not work without replacing the resistor near the IR in label on the silkscreen with one that is 150-1k ohm. See discussion on this issue for more details. Any Fruit Jams shipped after 8/10/25 already have the corrected resistor value.
At the top of the board, between the USB C port and the DVI Video port, is the IR receiver. It is labeled IR In on the board silk. You can write code to use this receiver with an IR remote. It is connected to GPIO29, the same pin as the built-in LED, and is available as board.IR in CircuitPython.
In the bottom right corner, below Button #1, is the STEMMA QT connector! This means you can connect up all sorts of I2C sensors and breakouts, no soldering required! This connector uses the SCL and SDA pins for I2C, which end up being the RP2350's I2C0 peripheral. In CircuitPython, you can initialize the STEMMA connector with board.STEMMA_I2C() (as well as with board.SCL board.SDA). In Arduino it is Wire.
In the bottom left corner of the board is the JST-PH connector. You can plug in a JST-PH cable to access VCC (red wire), GND (black wire) and pin A0 (white wire). Perfect for adding a potentiometer or extra component. A0 is connected to GPIO40 and is ADC0. It is also SPI1 MOSI, UART1 TX, I2C0 SDA and PWM8A.
By default, VCC is connected to the 5V regulator. You can change VCC from 5V to 3.3V via the jumper on the back of the board labeled JST VCC. You can cut the 5V and center pad and then solder the center pad to the 3V pad.
The Fruit Jam comes with a microSD card slot. It is wired up for SPI interfacing.
It also has extra pins connected for advanced-user SDIO interfacing.
These are the pins for the MicroSD card slot.
- SD_SCK/GPIO34 - This is the main SPI0 SCK pin. It is also I2C1 SDA, and PWM9A.
- SD_MOSI/GPIO35 - This is the main SPI0 MOSI pin. It is also I2C1 SCL, and PWM9B.
- SD_MISO/GPIO36 - This is the main SPI0 MISO pin. It is also UART1 TX, I2C0 SDA, and PWM10A.
- SD_CS/GPIO39 - This is the chip select pin. It is also SPI0 MOSI, I2C1 SCL, and PWM11B.
- SD_CARD_DETECT/GPIO34 - This is the card detect pin. It is also SPI0 CSn, UART0 RX, I2C0 SCL, and PWM8B
- SDIO_DATA1/GPIO37 - This is the SDIO data1 pin. It is also SPI0 CS, UART1 RX, I2C0 SCL, and PWM10B.
- SDIO_DATA2/GPIO38 - This is the SDIO data2 pin. It is also SPI0 SCK, I2C1 SDA, and PWM11A.
The Fruit Jam uses two pins for USB host, along with power and ground:
- GND - Common ground for power and logic.
- USB_HOST_DATA_PLUS/GPIO1 - The D+ pin for USB Host. It is also SPI0 CS, UART0 RS, I2C0 SCL and PWM0B.
- USB_HOST_DATA_MINUS/GPIO2 - The D- pin for USB Host. It is also SPI0 SCK, UART0 CTS, I2C1 SDA and PWM1A.
- USB_HOST_5V_POWER/GPIO11 - The 5V pin for USB Host. It is also SPI1 MOSI, UART1 RTS, I2C1 SCL and PWM5B.
The 'native' USB host pins are exposed as two solderable pins above the STEMMA QT connector. There is a CH334F USB hub to the left of the D+ and D- pins. The USB hub chip has 3 ports, two are on USB A connectors and a third port D+ and D- pins are broken out in the 2x16 header. The two USB A ports are connected to the hub. Each port has an indicator LED on either side of the power switch.
Below the SD card slot is the JST SH 3-pin Debug port for SWD debugging. This port matches the Raspberry Pi 3-pin Debug Connector Specification for use with the Debug Probe Kit. It breaks out the following serial debug pins:
- Pin 1: SWCLK (serial clock)
- Pin 2: GND
- Pin 3: SWDIO (bidirectional serial data)
Page last edited December 15, 2025
Text editor powered by tinymce.