diff --git a/lib/rp2040/libipv4-big.a b/lib/rp2040/libipv4-big.a index b2398a1d8..d4cd65c7c 100644 Binary files a/lib/rp2040/libipv4-big.a and b/lib/rp2040/libipv4-big.a differ diff --git a/lib/rp2040/libipv4-bt-big.a b/lib/rp2040/libipv4-bt-big.a index e0f4baa7d..5d3a3b1d8 100644 Binary files a/lib/rp2040/libipv4-bt-big.a and b/lib/rp2040/libipv4-bt-big.a differ diff --git a/lib/rp2040/libipv4-bt.a b/lib/rp2040/libipv4-bt.a index 1e07fa553..934f5a155 100644 Binary files a/lib/rp2040/libipv4-bt.a and b/lib/rp2040/libipv4-bt.a differ diff --git a/lib/rp2040/libipv4-ipv6-big.a b/lib/rp2040/libipv4-ipv6-big.a index 0db53a937..7fab779d8 100644 Binary files a/lib/rp2040/libipv4-ipv6-big.a and b/lib/rp2040/libipv4-ipv6-big.a differ diff --git a/lib/rp2040/libipv4-ipv6-bt-big.a b/lib/rp2040/libipv4-ipv6-bt-big.a index 901067575..49c75c8be 100644 Binary files a/lib/rp2040/libipv4-ipv6-bt-big.a and b/lib/rp2040/libipv4-ipv6-bt-big.a differ diff --git a/lib/rp2040/libipv4-ipv6-bt.a b/lib/rp2040/libipv4-ipv6-bt.a index 1cb85f032..e1e7b71b7 100644 Binary files a/lib/rp2040/libipv4-ipv6-bt.a and b/lib/rp2040/libipv4-ipv6-bt.a differ diff --git a/lib/rp2040/libipv4-ipv6.a b/lib/rp2040/libipv4-ipv6.a index 9bdb3d978..39578ca32 100644 Binary files a/lib/rp2040/libipv4-ipv6.a and b/lib/rp2040/libipv4-ipv6.a differ diff --git a/lib/rp2040/libipv4.a b/lib/rp2040/libipv4.a index 96217885c..c3211e436 100644 Binary files a/lib/rp2040/libipv4.a and b/lib/rp2040/libipv4.a differ diff --git a/lib/rp2040/libpico.a b/lib/rp2040/libpico.a index 494bd7ec5..79d8f12ef 100644 Binary files a/lib/rp2040/libpico.a and b/lib/rp2040/libpico.a differ diff --git a/lib/rp2040/platform_def.txt b/lib/rp2040/platform_def.txt index 5461ebfd4..53cd7980b 100644 --- a/lib/rp2040/platform_def.txt +++ b/lib/rp2040/platform_def.txt @@ -1,5 +1,6 @@ -DPICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1 -DCYW43_LWIP=1 +-DCYW43_PIO_CLOCK_DIV_DYNAMIC=1 -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DARM_MATH_CM0_FAMILY -DARM_MATH_CM0_PLUS diff --git a/tools/libpico/CMakeLists.txt b/tools/libpico/CMakeLists.txt index a47943f03..185b5d0eb 100644 --- a/tools/libpico/CMakeLists.txt +++ b/tools/libpico/CMakeLists.txt @@ -52,6 +52,7 @@ if (${cpu} MATCHES "rp2040") PICO_RP2040_B2_SUPPORTED=1 PICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1 CYW43_WARN=// + CYW43_PIO_CLOCK_DIV_DYNAMIC=1 PICO_XOSC_STARTUP_DELAY_MULTIPLIER=64 PICO_FLOAT_SUPPORT_ROM_V1=1 PICO_DOUBLE_SUPPORT_ROM_V1=1 diff --git a/tools/platformio-build.py b/tools/platformio-build.py index 4345b35ca..026b9589a 100755 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -363,6 +363,7 @@ def configure_network_flags(cpp_defines): env.Append(CPPDEFINES=[ ("PICO_CYW43_ARCH_THREADSAFE_BACKGROUND", 1), ("CYW43_LWIP", 1), + ("CYW43_PIO_CLOCK_DIV_DYNAMIC", 1), ("LWIP_IPV4", 1), ("LWIP_IGMP", 1), ("LWIP_CHECKSUM_CTRL_PER_NETIF", 1) diff --git a/variants/rpipicow/picow_init.cpp b/variants/rpipicow/picow_init.cpp index 1a2e77d67..5a00de9ce 100644 --- a/variants/rpipicow/picow_init.cpp +++ b/variants/rpipicow/picow_init.cpp @@ -19,7 +19,9 @@ */ #include +#include #include +#include "hardware/clocks.h" #include "hardware/resets.h" #include "hardware/gpio.h" #include "hardware/adc.h" @@ -62,6 +64,11 @@ bool __isPicoW = true; extern "C" void initVariant() { __isPicoW = CheckPicoW(); if (__isPicoW) { + // Fix for overclocked CPU: SPI communication breaks down with default "div by 2" speed + // So, divide clock by 4 for anything including and above 250MHz CPU frequency. + if (clock_get_hz(clk_sys) >= 250000000) { + cyw43_set_pio_clock_divisor(4, 0); // div by 4.0 + } cyw43_arch_init_with_country(WIFICC); } }