Skip to content

Commit eb3ffa1

Browse files
committed
Workaround for some rp2040 boards not booting e.g. Adafruit (#10)
1 parent d35938d commit eb3ffa1

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

.github/workflows/push-master.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ jobs:
5353
rm ../firmware/*
5454
echo "Neopixel is using GPIO16(OUTPUT_DATA_PIN) on output 0." > ../firmware/Firmwares_for_Adafruit_Feather_RP2040_Scorpio.txt
5555
echo "SPI is using spi0 interface pins: GPIO19(OUTPUT_SPI_DATA_PIN) and GPIO18(OUTPUT_SPI_CLOCK_PIN) on output 3 and 2 respectively." >> ../firmware/Firmwares_for_Adafruit_Feather_RP2040_Scorpio.txt
56-
cmake -DOVERRIDE_DATA_PIN=16 -DOVERRIDE_SPI_DATA_PIN=19 -DOVERRIDE_SPI_CLOCK_PIN=18 -DCMAKE_BUILD_TYPE=Release ..
56+
cmake -DOVERRIDE_BOOT_WORKAROUND=ON -DOVERRIDE_DATA_PIN=16 -DOVERRIDE_SPI_DATA_PIN=19 -DOVERRIDE_SPI_CLOCK_PIN=18 -DCMAKE_BUILD_TYPE=Release ..
5757
cmake --build .
5858
zip -j ../firmware/Adafruit_Feather_RP2040_Scorpio.zip ../firmware/*
5959
@@ -73,7 +73,7 @@ jobs:
7373
rm *.*
7474
rm ../firmware/*
7575
echo "Neopixel is using GPIO14(OUTPUT_DATA_PIN) on output 5." > ../firmware/Firmwares_for_Adafruit_ItsyBitsy_2040.txt
76-
cmake -DOVERRIDE_DATA_PIN=14 -DCMAKE_BUILD_TYPE=Release ..
76+
cmake -DOVERRIDE_BOOT_WORKAROUND=ON -DOVERRIDE_DATA_PIN=14 -DCMAKE_BUILD_TYPE=Release ..
7777
cmake --build .
7878
rm ../firmware/*_Spi.uf2
7979
zip -j ../firmware/Adafruit_ItsyBitsy_2040.zip ../firmware/*

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
sdk/pico
77
build/*
88
generated/
9-
firmwares/
9+
firmware/
1010

1111
# User-specific files
1212
*.rsuser

CMakeLists.txt

+14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# User configuration section starts here
22

3+
# Some boards, such as the first Adafruit revisions, may have trouble booting properly
4+
# due to bad componets used in the design.
5+
# Turn this setting to ON if your rp2040 is not detected after firmware upload and reset
6+
set(BOOT_WORKAROUND OFF)
7+
38
# Default output data pin for the non-SPI LED strips (only for sk6812/ws2812b)
49
set(OUTPUT_DATA_PIN 2)
510

@@ -78,17 +83,26 @@ if (OVERRIDE_SPI_INTERFACE)
7883
message( STATUS "${YellowColor}Overriding SPI Interface: ${OUTPUT_SPI_INTERFACE}${ColorReset}")
7984
endif()
8085

86+
if (OVERRIDE_BOOT_WORKAROUND)
87+
set(BOOT_WORKAROUND ${OVERRIDE_BOOT_WORKAROUND})
88+
message( STATUS "${YellowColor}Overriding boot workaround: ${BOOT_WORKAROUND}${ColorReset}")
89+
endif()
90+
8191
message( STATUS "---------------------------")
8292
message( STATUS "Neopixel Data GPIO: ${GreenColor}${OUTPUT_DATA_PIN}${ColorReset}")
8393
message( STATUS "SPI Data GPIO: ${GreenColor}${OUTPUT_SPI_DATA_PIN}${ColorReset}")
8494
message( STATUS "SPI Clock GPIO: ${GreenColor}${OUTPUT_SPI_CLOCK_PIN}${ColorReset}")
8595
message( STATUS "SPI Interface: ${GreenColor}${OUTPUT_SPI_INTERFACE}${ColorReset}")
96+
message( STATUS "Boot workaround: ${GreenColor}${BOOT_WORKAROUND}${ColorReset}")
8697
message( STATUS "---------------------------")
8798

8899
add_compile_options(-ftrack-macro-expansion=0 -fno-diagnostics-show-caret -fdiagnostics-color=auto)
89100

90101
macro(HyperSerialPicoTarget HyperSerialPicoTargetName)
91102
add_executable(${HyperSerialPicoTargetName} ${CMAKE_SOURCE_DIR}/source/main.cpp)
103+
if (BOOT_WORKAROUND)
104+
target_compile_definitions(${HyperSerialPicoTargetName} PUBLIC -DBOOT_WORKAROUND -DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64)
105+
endif()
92106
target_include_directories(${HyperSerialPicoTargetName} PRIVATE ${HyperSerialPicoCompanionIncludes})
93107
target_link_libraries(${HyperSerialPicoTargetName} ${HyperSerialPicoCompanionLibs})
94108
pico_add_extra_outputs(${HyperSerialPicoTargetName})

source/main.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@
5151
#define _XSTR2(x,y) _STR(x) _STR(y)
5252
#define VAR_NAME_VALUE2(var) #var " = " _XSTR2(var)
5353

54+
#if defined(BOOT_WORKAROUND) && defined(PICO_XOSC_STARTUP_DELAY_MULTIPLIER)
55+
#pragma message("Enabling boot workaround")
56+
#pragma message(VAR_NAME_VALUE(PICO_XOSC_STARTUP_DELAY_MULTIPLIER))
57+
#endif
58+
59+
5460
#ifdef NEOPIXEL_RGBW
5561
#pragma message(VAR_NAME_VALUE(NEOPIXEL_RGBW))
5662
#endif

0 commit comments

Comments
 (0)