From 07a1826fed6125154eaf37a75f6326fe8fa61d9a Mon Sep 17 00:00:00 2001 From: Ella Fox Date: Fri, 4 Apr 2025 16:29:08 +0200 Subject: [PATCH 1/6] machine: add support for BTT SKR Pico Adds support for the BigTreeTech SKR Pico 3D-printer mainboard. This board uses the RP2040. --- GNUmakefile | 2 + src/machine/board_btt_skr_pico.go | 100 ++++++++++++++++++++++++++++++ targets/btt-skr-pico.json | 13 ++++ 3 files changed, 115 insertions(+) create mode 100644 src/machine/board_btt_skr_pico.go create mode 100644 targets/btt-skr-pico.json diff --git a/GNUmakefile b/GNUmakefile index d8770c3255..b0880408e7 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -628,6 +628,8 @@ endif @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=nrf52840-mdk examples/blinky1 @$(MD5SUM) test.hex + $(TINYGO) build -size short -o test.hex -target=btt-skr-pico examples/blinky1 + @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=pca10031 examples/blinky1 @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=reelboard examples/blinky1 diff --git a/src/machine/board_btt_skr_pico.go b/src/machine/board_btt_skr_pico.go new file mode 100644 index 0000000000..420f8c3159 --- /dev/null +++ b/src/machine/board_btt_skr_pico.go @@ -0,0 +1,100 @@ +//go:build btt_skr_pico + +// This contains the pin mappings for the BigTreeTech SKR Pico. +// +// Purchase link: https://biqu.equipment/products/btt-skr-pico-v1-0 +// Board schematic: https://github.com/bigtreetech/SKR-Pico/blob/master/Hardware/BTT%20SKR%20Pico%20V1.0-SCH.pdf +// Pin diagram: https://github.com/bigtreetech/SKR-Pico/blob/master/Hardware/BTT%20SKR%20Pico%20V1.0-PIN.pdf + +package machine + +// TMC stepper driver motor direction. +// X/Y/Z/E refers to motors for X/Y/Z and the extruder. +const ( + X_DIR Pin = GPIO10 + Y_DIR Pin = GPIO5 + Z_DIR Pin = ADC2 + E_DIR Pin = GPIO13 +) + +// TMC stepper driver motor step +const ( + X_STEP Pin = GPIO11 + Y_STEP Pin = GPIO6 + Z_STEP Pin = GPIO19 + E_STEP Pin = GPIO14 +) + +// TMC stepper driver enable +const ( + X_ENABLE Pin = GPIO12 + Y_ENABLE Pin = GPIO7 + Z_ENABLE Pin = GPIO2 + E_ENABLE Pin = GPIO15 +) + +// TMC stepper driver UART +const ( + TMC_UART_TX Pin = GPIO8 + TMC_UART_RX Pin = GPIO9 +) + +// Endstops +const ( + X_ENDSTOP Pin = GPIO4 + Y_ENDSTOP Pin = GPIO3 + Z_ENDSTOP Pin = GPIO25 + E_ENDSTOP Pin = GPIO16 +) + +// Fan PWM +const ( + FAN1_PWM Pin = GPIO17 + FAN2_PWM Pin = GPIO18 + FAN3_PWM Pin = GPIO20 +) + +// Heater PWM +const ( + HEATER_BED_PWM Pin = GPIO21 + HEATER_EXTRUDER_PWM Pin = GPIO23 +) + +// Thermistors +const ( + THERM_BED = ADC0 // Bed heater + THERM_EXTRUDER Pin = ADC1 // Toolhead heater +) + +// Misc +const ( + RGB Pin = GPIO24 // Neopixel + SERVO_ADC3 Pin = ADC3 // Servo + PROBE Pin = GPIO22 // Probe +) + +// Onboard crystal oscillator frequency, in MHz. +const ( + xoscFreq = 12 // MHz +) + +// USB CDC identifiers +const ( + usb_STRING_PRODUCT = "SKR Pico" + usb_STRING_MANUFACTURER = "BigTreeTech" +) + +var ( + usb_VID uint16 = 0x2e8a + usb_PID uint16 = 0x0003 +) + +// UART pins +const ( + UART0_TX_PIN = GPIO0 + UART0_RX_PIN = GPIO1 + UART_TX_PIN = UART0_TX_PIN + UART_RX_PIN = UART0_RX_PIN +) + +var DefaultUART = UART0 diff --git a/targets/btt-skr-pico.json b/targets/btt-skr-pico.json new file mode 100644 index 0000000000..2a05de01b1 --- /dev/null +++ b/targets/btt-skr-pico.json @@ -0,0 +1,13 @@ +{ + "inherits": [ + "rp2040" + ], + "build-tags": ["btt_rp2040"], + "serial-port": ["2e8a:000A"], + "ldflags": [ + "--defsym=__flash_size=16M" + ], + "extra-files": [ + "targets/pico-boot-stage2.S" + ] +} From 37ff3d1b761db26dcf384ed7894ce01cd3efff65 Mon Sep 17 00:00:00 2001 From: Ella Fox Date: Fri, 4 Apr 2025 17:24:53 +0200 Subject: [PATCH 2/6] Fix build tag --- targets/btt-skr-pico.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/btt-skr-pico.json b/targets/btt-skr-pico.json index 2a05de01b1..4ba86abf4a 100644 --- a/targets/btt-skr-pico.json +++ b/targets/btt-skr-pico.json @@ -2,7 +2,7 @@ "inherits": [ "rp2040" ], - "build-tags": ["btt_rp2040"], + "build-tags": ["btt_skr_pico"], "serial-port": ["2e8a:000A"], "ldflags": [ "--defsym=__flash_size=16M" From 9454eeceaaf74eb832fe4fc22bf531f5d265123a Mon Sep 17 00:00:00 2001 From: Ella Fox Date: Mon, 7 Apr 2025 10:29:02 +0200 Subject: [PATCH 3/6] Add I2C defaults --- src/machine/board_btt_skr_pico.go | 77 ++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/src/machine/board_btt_skr_pico.go b/src/machine/board_btt_skr_pico.go index 420f8c3159..fbbda665c3 100644 --- a/src/machine/board_btt_skr_pico.go +++ b/src/machine/board_btt_skr_pico.go @@ -11,66 +11,66 @@ package machine // TMC stepper driver motor direction. // X/Y/Z/E refers to motors for X/Y/Z and the extruder. const ( - X_DIR Pin = GPIO10 - Y_DIR Pin = GPIO5 - Z_DIR Pin = ADC2 - E_DIR Pin = GPIO13 + X_DIR = GPIO10 + Y_DIR = GPIO5 + Z_DIR = ADC2 + E_DIR = GPIO13 ) // TMC stepper driver motor step const ( - X_STEP Pin = GPIO11 - Y_STEP Pin = GPIO6 - Z_STEP Pin = GPIO19 - E_STEP Pin = GPIO14 + X_STEP = GPIO11 + Y_STEP = GPIO6 + Z_STEP = GPIO19 + E_STEP = GPIO14 ) // TMC stepper driver enable const ( - X_ENABLE Pin = GPIO12 - Y_ENABLE Pin = GPIO7 - Z_ENABLE Pin = GPIO2 - E_ENABLE Pin = GPIO15 + X_ENABLE = GPIO12 + Y_ENABLE = GPIO7 + Z_ENABLE = GPIO2 + E_ENABLE = GPIO15 ) // TMC stepper driver UART const ( - TMC_UART_TX Pin = GPIO8 - TMC_UART_RX Pin = GPIO9 + TMC_UART_TX = GPIO8 + TMC_UART_RX = GPIO9 ) // Endstops const ( - X_ENDSTOP Pin = GPIO4 - Y_ENDSTOP Pin = GPIO3 - Z_ENDSTOP Pin = GPIO25 - E_ENDSTOP Pin = GPIO16 + X_ENDSTOP = GPIO4 + Y_ENDSTOP = GPIO3 + Z_ENDSTOP = GPIO25 + E_ENDSTOP = GPIO16 ) // Fan PWM const ( - FAN1_PWM Pin = GPIO17 - FAN2_PWM Pin = GPIO18 - FAN3_PWM Pin = GPIO20 + FAN1_PWM = GPIO17 + FAN2_PWM = GPIO18 + FAN3_PWM = GPIO20 ) // Heater PWM const ( - HEATER_BED_PWM Pin = GPIO21 - HEATER_EXTRUDER_PWM Pin = GPIO23 + HEATER_BED_PWM = GPIO21 + HEATER_EXTRUDER_PWM = GPIO23 ) // Thermistors const ( - THERM_BED = ADC0 // Bed heater - THERM_EXTRUDER Pin = ADC1 // Toolhead heater + THERM_BED = ADC0 // Bed heater + THERM_EXTRUDER = ADC1 // Toolhead heater ) // Misc const ( - RGB Pin = GPIO24 // Neopixel - SERVO_ADC3 Pin = ADC3 // Servo - PROBE Pin = GPIO22 // Probe + RGB = GPIO24 // Neopixel + SERVO_ADC3 = ADC3 // Servo + PROBE = GPIO22 // Probe ) // Onboard crystal oscillator frequency, in MHz. @@ -78,6 +78,25 @@ const ( xoscFreq = 12 // MHz ) +// I2C. We don't have this available, so map it to defaults +const ( + I2C0_SDA_PIN = GPIO4 + I2C0_SCL_PIN = GPIO5 + + I2C1_SDA_PIN = GPIO2 + I2C1_SCL_PIN = GPIO3 +) + +// SPI default pins +const ( + SPI0_SCK_PIN = GPIO18 + SPI0_SDO_PIN = GPIO19 // Tx + SPI0_SDI_PIN = GPIO16 // Rx + SPI1_SCK_PIN = GPIO10 + SPI1_SDO_PIN = GPIO11 // Tx + SPI1_SDI_PIN = GPIO12 // Rx +) + // USB CDC identifiers const ( usb_STRING_PRODUCT = "SKR Pico" @@ -93,6 +112,8 @@ var ( const ( UART0_TX_PIN = GPIO0 UART0_RX_PIN = GPIO1 + UART1_TX_PIN = TMC_UART_TX + UART1_RX_PIN = TMC_UART_RX UART_TX_PIN = UART0_TX_PIN UART_RX_PIN = UART0_RX_PIN ) From 6d7ba1851db84fcd609c89db411120cfeb749e37 Mon Sep 17 00:00:00 2001 From: Ella Fox Date: Mon, 7 Apr 2025 10:57:58 +0200 Subject: [PATCH 4/6] Run UART test instead of blinky1 --- GNUmakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GNUmakefile b/GNUmakefile index b0880408e7..46939bfa27 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -628,7 +628,7 @@ endif @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=nrf52840-mdk examples/blinky1 @$(MD5SUM) test.hex - $(TINYGO) build -size short -o test.hex -target=btt-skr-pico examples/blinky1 + $(TINYGO) build -size short -o test.hex -target=btt-skr-pico examples/uart @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=pca10031 examples/blinky1 @$(MD5SUM) test.hex From 99efa0392d223951ff91544e7ffacecc1689f3ab Mon Sep 17 00:00:00 2001 From: Ella Fox Date: Mon, 7 Apr 2025 11:15:14 +0200 Subject: [PATCH 5/6] Use NoPin for I2C and SPI on BTT SKR Pico --- src/machine/board_btt_skr_pico.go | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/machine/board_btt_skr_pico.go b/src/machine/board_btt_skr_pico.go index fbbda665c3..87f4c8c7a2 100644 --- a/src/machine/board_btt_skr_pico.go +++ b/src/machine/board_btt_skr_pico.go @@ -35,8 +35,8 @@ const ( // TMC stepper driver UART const ( - TMC_UART_TX = GPIO8 - TMC_UART_RX = GPIO9 + TMC_UART_TX = UART1_TX_PIN + TMC_UART_RX = UART1_RX_PIN ) // Endstops @@ -78,23 +78,23 @@ const ( xoscFreq = 12 // MHz ) -// I2C. We don't have this available, so map it to defaults +// I2C. We don't have this available const ( - I2C0_SDA_PIN = GPIO4 - I2C0_SCL_PIN = GPIO5 + I2C0_SDA_PIN = NoPin + I2C0_SCL_PIN = NoPin - I2C1_SDA_PIN = GPIO2 - I2C1_SCL_PIN = GPIO3 + I2C1_SDA_PIN = NoPin + I2C1_SCL_PIN = NoPin ) -// SPI default pins +// SPI. We don't have this available const ( - SPI0_SCK_PIN = GPIO18 - SPI0_SDO_PIN = GPIO19 // Tx - SPI0_SDI_PIN = GPIO16 // Rx - SPI1_SCK_PIN = GPIO10 - SPI1_SDO_PIN = GPIO11 // Tx - SPI1_SDI_PIN = GPIO12 // Rx + SPI0_SCK_PIN = NoPin + SPI0_SDO_PIN = NoPin // Tx + SPI0_SDI_PIN = NoPin // Rx + SPI1_SCK_PIN = NoPin + SPI1_SDO_PIN = NoPin // Tx + SPI1_SDI_PIN = NoPin // Rx ) // USB CDC identifiers @@ -112,8 +112,8 @@ var ( const ( UART0_TX_PIN = GPIO0 UART0_RX_PIN = GPIO1 - UART1_TX_PIN = TMC_UART_TX - UART1_RX_PIN = TMC_UART_RX + UART1_TX_PIN = GPIO8 + UART1_RX_PIN = GPIO9 UART_TX_PIN = UART0_TX_PIN UART_RX_PIN = UART0_RX_PIN ) From 05ef55f98e3f99a8928e2d02775d145a9445bffb Mon Sep 17 00:00:00 2001 From: Ella Fox Date: Mon, 7 Apr 2025 11:16:52 +0200 Subject: [PATCH 6/6] Cleanup comments --- src/machine/board_btt_skr_pico.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/machine/board_btt_skr_pico.go b/src/machine/board_btt_skr_pico.go index 87f4c8c7a2..796f9bd20a 100644 --- a/src/machine/board_btt_skr_pico.go +++ b/src/machine/board_btt_skr_pico.go @@ -90,11 +90,11 @@ const ( // SPI. We don't have this available const ( SPI0_SCK_PIN = NoPin - SPI0_SDO_PIN = NoPin // Tx - SPI0_SDI_PIN = NoPin // Rx + SPI0_SDO_PIN = NoPin + SPI0_SDI_PIN = NoPin SPI1_SCK_PIN = NoPin - SPI1_SDO_PIN = NoPin // Tx - SPI1_SDI_PIN = NoPin // Rx + SPI1_SDO_PIN = NoPin + SPI1_SDI_PIN = NoPin ) // USB CDC identifiers