Earle Philhower's arduino-pico, the community Arduino core for Raspberry Pi's RP2040 and RP2350 microcontrollers, shipped three releases in October. Version 6.3.0 landed on October 8, 6.3.1 on October 23, and 6.3.2 on October 31. Most of the changes are routine: a newer Pico SDK, regenerated networking wrappers, new board definitions and a run of locking and bounds-check fixes. One change in 6.3.0 is labelled BREAKING in the release notes. FreeRTOS now has 32 priority levels instead of 8. If your sketch passes literal priority numbers to the scheduler, check it before you upgrade.
The breaking change: 8 priority levels become 32
The 6.3.0 release notes describe the change (#3553) briefly. FreeRTOS was increased to 32 priority levels from 8. The core's own tasks were placed again in the wider range:
- The CORE0 and CORE1 tasks now sit at
configMAX_PRIORITIES/2, which the notes give as 16. - LWIP (the TCP/IP stack) and USB "are still highest priorities," at 31 and 30.
The notes say that if you use a function of configMAX_PRIORITIES to compute your task priorities, the change "should be a no-op." Otherwise, they say, your own subtasks should adjust to the core tasks sitting at 16. The arithmetic shows why. Under the old 8-level scheme, a literal priority such as 5 or 6 sat near the top of the range. Under 6.3.0 the same literal is far below the core tasks at 16 and well below LWIP and USB. A worker task you once ran above a core task may now run below it. That could show up as latency or starvation rather than as a compile error.
An upgrade checklist for hand-computed priorities
The release notes do not give migration guidance beyond the numbers above. These checks follow from them and are our own suggestions:
- Search for literal priorities. Look for numeric priority arguments in your task-creation calls. Decide where each task should sit relative to 16 (core tasks) and 30/31 (USB/LWIP), not relative to the old ceiling of 8.
- Re-check anything written as "max minus N." Even though relative expressions scale with the new range, a value such as the maximum minus one now resolves to 30 or 31, the same band as USB and LWIP. Make sure you really want a user task competing with those stacks.
- Re-check anything written as "max divided by something." The core tasks now sit exactly at
configMAX_PRIORITIES/2. A task you computed the same way would tie with the core tasks. - Test networking and USB under load. 6.3.0 also serializes LWIP thread startup (#3550) and makes the CYW43 lock block (#3551). If you use the Pico W's wireless or Ethernet together with FreeRTOS, test a full build rather than only compiling it.
The notes list the priority change under FreeRTOS, so sketches that never use the FreeRTOS build of the core have little reason to be concerned.
Pico SDK 2.3.1 underneath
6.3.0 also moves the core to Raspberry Pi's SDK 2.3.1 (#3542). Raspberry Pi's Pico-series C/C++ SDK book (build date 2026-09-10, build version ea68919-clean) lists Release 2.3.1 as dated September 4, 2026, and calls it a minor release with bug fixes and documentation improvements, along with a few new features. Among the boards it adds are pimoroni_tufty2350, adafruit_metro_rp2350 and waveshare_core2350b. It also says the pico_time and alarm-pool code "has been thoroughly re-vetted, somewhat simplified, and even more exhaustive tests added," and that synchronization-primitive issues in pico_sync were fixed with new tests.
The release also redoes the LWIP wrapper, which is now generated programmatically (#3547). The 6.3.0 overview says the rework is meant to bulletproof networking and enhance FreeRTOS stability. Several items in 6.3.1 deal with LWIP and FreeRTOS behaviour.
On the hardware side, 6.3.0 adds one board, the zero-power RP2350 Challenger LoRa (#3555).
6.3.1: hardening only
The October 23 release is described in its notes as "lots of minor bug fixes and hardening with no new features." Those notes were read from the project's release listing. Its changes include:
- A fix to SoftwareSPI
transmit16output bits. - A guard so that
Wire1is not used in Wire if the variant does not define it. - The LWIP caller is now identified via
xTaskGetCurrentTaskHandle. - ESPHost and WINC1500 now unmask their GPIO on
begin()failure paths. - The Maker Sumo board, listed in the notes as "Maker Sumo RP3250," is added to Board Manager.
- A fix to the Glyph 2040's SPI0 MISO pin mapping.
TZ.hupdated to IANA time-zone database release 2026e.
If you use a Glyph 2040, take the pin-mapping fix as a reason to recheck any SPI peripheral that failed to read back data on the earlier mapping.
6.3.2: the audio DMA fixes
The 6.3.2 release, published October 31 at 22:02 UTC, is also bugfix-only. Its main subject is the AudioBufferManager that underlies the I2S, PWMAudio and ADCInput classes. The notes call these "important updates" for when flash operations and playback or recording happen together. Items:
- AudioBufferManager DMA no longer crashes on a missed IRQ (#3600).
- Out-of-bounds
dmaChannelchecking is avoided (#3598). I2S::setSysClkgains a 24 kHz precalculated setting (#3594).- SD examples now list all legal SPI pins (#3604).
- FreeRTOS locking added for
Ethernet::isLinked(#3602). - CoreMutex acquisition checks added for USB and PIO (#3603).
- Source formatting forced to astyle 3.6.20 (#3595), and a debug printout was removed from BLE (#3590).
The missed-IRQ fix is the one to note if you record or play back audio while also doing flash operations, since the notes tie the AudioBufferManager work directly to that combination. The Ethernet::isLinked locking is listed under FreeRTOS, and the CoreMutex checks cover USB and PIO shared-resource access.
Toolchain and installation
The project documentation, now at version 6.3.2, describes the core as a community port of Arduino to the RP2040 (Raspberry Pi Pico processor) and RP2350 (Raspberry Pi Pico 2 processor). It uses a custom toolset with GCC 14.2 and Newlib 4.3 and does not require any system-installed prerequisites. The documentation covers installation through the Arduino IDE Boards Manager, the Arduino CLI or Git, and it also has a PlatformIO section. It documents build options for the USB stack, the IP stack and the Bluetooth stack, and lists FreeRTOS SMP (multicore) among the supported features.
What It Means for Makers
Who it is for: anyone who builds RP2040 or RP2350 firmware with the Arduino toolchain. That includes Pico, Pico W and Pico 2 owners, plus users of the third-party boards the core supports, such as the newly added RP2350 Challenger LoRa and Maker Sumo. The group that most needs to act is anyone running the FreeRTOS build with their own tasks.
What it enables: 6.3.x brings Pico SDK 2.3.1 with its re-vetted timing and synchronization code, a wider priority range for FreeRTOS designs, and fixes to audio DMA handling. A wider range gives more room to separate real-time tasks from background work. To use it, you should re-check every priority you hard-coded against the old 8-level range. Audio projects that combine I2S, PWMAudio or ADCInput with flash operations should move to 6.3.2 rather than stop at 6.3.0 or 6.3.1.
Price and availability: all three releases are published. 6.3.2 is the current version in the official documentation. The sources do not state a price. The documentation describes installation through the Arduino Boards Manager, the Arduino CLI, Git and PlatformIO.