Skip to content

added bigtreetech SKR-Pico #2988

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Read the [Contributing Guide](https://github.com/earlephilhower/arduino-pico/blo
* Architeuthis Flux Jumperless V5
* Arduino Nano RP2040 Connect
* ArtronShop RP2 Nano
* BIGTREETECH SKR-Pico
* Breadstick Raspberry
* BridgeTek IDM2040-7A
* BridgeTek IDM2040-43A
Expand Down
312 changes: 312 additions & 0 deletions boards.txt

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions package/package_pico_index.template.json
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@
{
"name": "ArtronShop RP2 Nano"
},
{
"name": "BIGTREETECH SKR-Pico"
},
{
"name": "Breadstick Raspberry"
},
Expand Down
56 changes: 56 additions & 0 deletions tools/json/bigtreetech_SKR_Pico.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{
"build": {
"arduino": {
"earlephilhower": {
"boot2_source": "boot2_w25q080_2_padded_checksum.S",
"usb_vid": "0x2E8B",
"usb_pid": "0xF00A"
}
},
"core": "earlephilhower",
"cpu": "cortex-m0plus",
"extra_flags": "-DARDUINO_BIGTREETECH_SKR_PICO -DARDUINO_ARCH_RP2040 -DUSBD_MAX_POWER_MA=250 ",
"f_cpu": "133000000L",
"hwids": [
[
"0x2E8A",
"0x00C0"
],
[
"0x2E8B",
"0xF00A"
]
],
"mcu": "rp2040",
"variant": "bigtreetech_SKR_Pico"
},
"debug": {
"jlink_device": "RP2040_M0_0",
"openocd_target": "rp2040.cfg",
"svd_path": "rp2040.svd"
},
"frameworks": [
"arduino",
"picosdk"
],
"name": "SKR-Pico",
"upload": {
"maximum_ram_size": 262144,
"maximum_size": 16777216,
"require_upload_port": true,
"native_usb": true,
"use_1200bps_touch": true,
"wait_for_upload_port": false,
"protocol": "picotool",
"protocols": [
"blackmagic",
"cmsis-dap",
"jlink",
"raspberrypi-swd",
"picotool",
"picoprobe"
]
},
"url": "https://github.com/bigtreetech/SKR-Pico",
"vendor": "BIGTREETECH"
}
5 changes: 4 additions & 1 deletion tools/makeboards.py
Original file line number Diff line number Diff line change
Expand Up @@ -541,13 +541,16 @@ def MakeBoardJSON(name, chip, vendor_name, product_name, vid, pid, pwr, boarddef
# ArtronShop
MakeBoard("artronshop_rp2_nano", "rp2040", "ArtronShop", "RP2 Nano", "0x2e8a", "0x000a", 250, "ARTRONSHOP_RP2_NANO", 2, 0, "boot2_w25q080_2_padded_checksum")

# BIGTREETECH
MakeBoard("bigtreetech_SKR_Pico", "rp2040", "BIGTREETECH", "SKR-Pico", "0x2e8b", "0xf00a", 250, "BIGTREETECH_SKR_PICO", 16, 0, "boot2_w25q080_2_padded_checksum", board_url="https://github.com/bigtreetech/SKR-Pico")
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just checked the schematic and it looks like this has only 2 MB (16Mbit) of flash, so the 16 here should be 2. OTW things like the filesystem and EEPROM will go very, very wrong...

Copy link
Contributor

@maxgerhardt maxgerhardt Jun 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If https://www.reddit.com/r/BIGTREETECH/comments/19f58r4/skr_pico_flash_size/ is right and the flash is a W25Q16JVUXIQ then the boot2_w25q16jvxq_4_padded_checksum might be an even better match for the Boot2 (faster too, 4 data lines instead of 2), instead of the currently set boot2_w25q080_2_padded_checksum.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you be mixing up the Espressif DIO/QIO and the Pico. I thought only QSPI (i.e. 4) lines were supported by XIP. The _2 or _4 in boot2.s refers to the sysclk divisor, so a /2 is faster than a /4...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct. Taking that back. Clock div by 2 is better than div by 4.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you are right -
W25Q16 - Density 16Mb
in the fast read i read 16MB

https://github.com/bigtreetech/SKR-Pico/blob/master/Hardware/BTT%20SKR%20Pico%20V1.0-SCH.pdf
image
image

so what is the best fit?
https://github.com/earlephilhower/arduino-pico/blob/master/tools/makeboards.py#L126

  • Generic SPI /2 boot2_generic_03h_2_padded_checksum
  • Generic SPI /4 boot2_generic_03h_4_padded_checksum
  • IS25LP080 QSPI /2 boot2_is25lp080_2_padded_checksum
  • IS25LP080 QSPI /4 boot2_is25lp080_4_padded_checksum
  • W25Q080 QSPI /2 boot2_w25q080_2_padded_checksum
  • W25Q080 QSPI /4 boot2_w25q080_4_padded_checksum
  • W25X10CL QSPI /2 boot2_w25x10cl_2_padded_checksum
  • W25X10CL QSPI /4 boot2_w25x10cl_4_padded_checksum
  • W25Q64JV QSPI /4 boot2_w25q64jv_4_padded_checksum
  • W25Q16JVxQ QSPI /4 boot2_w25q16jvxq_4_padded_checksum
  • W25Q128JV QSPI /4 boot2_w25q128jvxq_4_padded_checksum

Copy link
Contributor

@maxgerhardt maxgerhardt Jun 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the serial output result when uploading https://github.com/earlephilhower/arduino-pico/blob/master/libraries/LittleFS/examples/SpeedTest/SpeedTest.ino and using either

  • boot2_w25q080_2_padded_checksum
  • boot2_w25q16jvxq_4_padded_checksum
  • boot2_generic_03h_2_padded_checksum
  • boot2_generic_03h_4_padded_checksum

Don't forget to give it some filesystem size like Tools -> Flash size -> "2MB (Sketch 1MB, FS: 1MB)".


# Breadstick
MakeBoard("breadstick_raspberry", "rp2040", "Breadstick", "Raspberry", "0x2e8a", "0x105e" , 500, "Breadstick_Raspberry", 16, 0, "boot2_w25q080_2_padded_checksum", board_url="https://shop.breadstick.ca/products/raspberry-breadstick-rp2040")

# BridgeTek
MakeBoard("bridgetek_idm2040_7a", "rp2040", "BridgeTek", "IDM2040-7A", "0x2e8a", "0x1041", 250, "BRIDGETEK_IDM2040_7A", 8, 0, "boot2_w25q080_2_padded_checksum", ["FT8XX_TYPE=BT817", "DISPLAY_RES=WVGA", "PLATFORM_RP2040"])
MakeBoard("bridgetek_idm2040_43a", "rp2040", "BridgeTek", "IDM2040-43A", "0x2e8b", "0xf00a", 250, "BRIDGETEK_IDM2040_43A", 8, 0, "boot2_w25q080_2_padded_checksum", ["FT8XX_TYPE=BT883", "DISPLAY_RES=WQVGA", "PLATFORM_RP2040"])

# Cytron
MakeBoard("cytron_iriv_io_controller", "rp2350", "Cytron", "IRIV IO Controller", "0x2e8a", "0x1093", 250, "CYTRON_IRIV_IO_CONTROLLER", 2, 0, "none")
MakeBoard("cytron_maker_nano_rp2040", "rp2040", "Cytron", "Maker Nano RP2040", "0x2e8a", "0x100f", 250, "CYTRON_MAKER_NANO_RP2040", 2, 0, "boot2_w25q080_2_padded_checksum")
Expand Down
87 changes: 87 additions & 0 deletions variants/bigtreetech_SKR_Pico/pins_arduino.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#pragma once

// based on
// https://github.com/s-light/bigtreetech-SKR-Pico?tab=readme-ov-file
// that is based on
// https://github.com/bigtreetech/SKR-Pico/blob/master/Hardware/BTT%20SKR%20Pico%20V1.0-SCH.pdf

// LEDs
// #define PIN_LED (13u)


// Serial
#define PIN_SERIAL1_TX (0u)
#define PIN_SERIAL1_RX (1u)
#define PIN_TXD0 PIN_SERIAL1_TX
#define PIN_RXD0 PIN_SERIAL1_RX

// Wire
#define __WIRE0_DEVICE i2c1
#define PIN_WIRE0_SDA PIN_SERIAL1_TX
#define PIN_WIRE0_SCL PIN_SERIAL1_RX


#define PIN_ZEN (2u)
#define PIN_YSTOP (3u)
#define PIN_XSTOP (4u)
#define PIN_YDIR (5u)
#define PIN_YSTP (6u)
#define PIN_YEN (7u)

#define PIN_SERIAL2_TX (8u)
#define PIN_SERIAL2_RX (9u)
#define PIN_TX4 PIN_SERIAL2_TX
#define PIN_RX4 PIN_SERIAL2_RX

#define PIN_XDIR (10u)
#define PIN_XSTP (11u)
#define PIN_XEN (12u)
#define PIN_E0DIR (13u)
#define PIN_E0STP (14u)
#define PIN_E0EN (15u)
#define PIN_E0STOP (16u)
#define PIN_FAN1_PWM (17u)
#define PIN_FAN2_PWM (18u)
#define PIN_ZSTP (19u)
#define PIN_FAN3_PWM (20u)
#define LASER_PWM PIN_FAN3_PWM
#define PIN_HB_PWM (21u)
#define PIN_P_2 (22u)
#define PIN_HE_PWM (23u)

// NeoPixel
#define PIN_NEOPIXEL (24u)
#define NUM_NEOPIXEL (1u)
#define PIN_RGB PIN_NEOPIXEL

#define PIN_ZSTOP (25u)
#define PIN_THB (26u)
#define PIN_TH0 (27u)
#define PIN_ZDIR (28u)
#define PIN_SERVOS (29u)
#define ADC3 PIN_SERVOS

// ----------------------
// Not available.. (all pins already in use)
#define PIN_SPI0_MISO (99u)
#define PIN_SPI0_MOSI (99u)
#define PIN_SPI0_SCK (99u)
#define PIN_SPI0_SS (99u)

#define PIN_SPI1_MISO (99u)
#define PIN_SPI1_MOSI (99u)
#define PIN_SPI1_SCK (99u)
#define PIN_SPI1_SS (99u)

// #define __WIRE1_DEVICE i2c0
#define PIN_WIRE1_SDA (99u)
#define PIN_WIRE1_SCL (99u)



#define SERIAL_HOWMANY (2u)
#define SPI_HOWMANY (0u)
#define WIRE_HOWMANY (1u)


#include "../generic/common.h"