Skip to content

2.1.1

Latest
Compare
Choose a tag to compare
@kilograham kilograham released this 19 Feb 01:15
· 1 commit to master since this release

This is a minor release of the SDK with many bug fixes and documentation improvements, along with some new features.

Highlights are listed below, or you can see the full list of individual commits here, and the full list of resolved issues here.

Board Support

The following boards have been added and may be specified via PICO_BOARD:

  • sparkfun_iotnode_lorawan_rp2350
  • waveshare_pico_cam_a
  • waveshare_rp2040_ble
  • waveshare_rp2040_eth
  • waveshare_rp2040_geek
  • waveshare_rp2040_matrix
  • waveshare_rp2040_pizero
  • waveshare_rp2040_power_management_hat_b
  • waveshare_rp2040_tiny
  • waveshare_rp2040_touch_lcd_1.28
  • waveshare_rp2350_eth
  • waveshare_rp2350_geek
  • waveshare_rp2350_lcd_0.96
  • waveshare_rp2350_lcd_1.28
  • waveshare_rp2350_one
  • waveshare_rp2350_plus_4mb
  • waveshare_rp2350_plus_16mb
  • waveshare_rp2350_tiny
  • waveshare_rp2350_touch_lcd_1.28
  • waveshare_rp2350_zero

The following board configurations have been modified:

  • adafruit_feather_rp2350 - Increased the XOSC startup delay
  • seeed_xiao_rp2350 - Increased the default SPI clock divider
  • waveshare_rp2040_lcd_0.96 - Renamed WAVESHARE_RP2040_LCD_* constants to WAVESHARE_LCD_*
  • waveshare_rp2040_lcd_1.28 - Renamed WAVESHARE_RP2040_LCD_* constants to WAVESHARE_LCD_*

Note: the default PICO_XOSC_STARTUP_DELAY_MULTIPLIER (unless specified by a board header file) has been changed from 1 to 6, meaning a delay of 6ms, as testing of the recommended crystal shows it can take up to this long to stabilize.

200Mhz Clock Support for RP2040

RP2040 has now been certified to run at a system clock of 200Mhz when using a regulator voltage of at least 1.15 volts.

The SDK by default performs clock setup for you before your program enters main(). If you haven't customized the clock configuration in any way, it will attempt to configure the system clock based on the value of SYS_CLK_MHZ (or SYS_CLK_KHZ/SYS_CLK_HZ if specified instead). Without further information from you, it can only do this for specific clock frequencies.

In prior versions of the SDK, only one specific clock frequency was defined per platform, 125Mhz for RP2040 and 150Mhz for RP2350, which also happen to be the default values for SYS_CLK_MHZ

With this version of the SDK, you can now select a 200Mhz clock for RP2040 simply by setting SYS_CLK_MHZ=200 via preprocessor define. The regulator voltage will automatically be raised for you if necessary.

We may certify new frequencies for the different platforms in the future. The original SYS_CLK_MHZ defaults are left unchanged because not all programs would function correctly at a different system clock frequency. If, however, your project would always benefit from the fastest clock, you may now define PICO_USE_FASTEST_SUPPORTED_CLOCK=1 via CMake variable or as a preprocessor define, and it will always use the fastest supported system clock frequency for the platform in the future.

Notable Library Changes/Improvements

hardware_clocks

  • Corrected documentation and implementation of clock_configure() supporting the full range of clock dividers
  • Added PICO_USE_FASTEST_SUPPORTED_CLOCK and PLL configuration for 200Mhz on RP2040

hardware_flash

  • Move internal flash helper function to run from RAM instead of flash, so it was supported in builds other than COPY_TO_RAM

hardware_irq

  • Added significantly improved documentation around IRQ handlers when using both cores
  • Added enable_interrupts() and disable_interrupts() methods for when you don't care about saving or restoring the current interrupt state
  • Added irq_has_handler() method to tell if a handler is installed for a particular IRQ number

hardware_pio

  • Fixed support for WAIT gpio with GPIO number >= 32

pico_aon_timer

  • Added a 2 RTC-clock propagation delay at the end of aon_timer_set_time_calendar() on RP2040, such that reading back the time immediately afterwards will return the right value

pico_bootrom

  • Added rom_data_lookup_inline() to complement rom_data_lookup()

pico_btstack

  • Updated BTStack to 1.6.2 from 1.6.1
  • Updated Raspberry Pi BTStack license to cover Pico 2 W, Pico 2 WH, and RM2

pico_cyw43_driver

  • Updated cyw43_driver to revision c1075d4b
  • Fixed rare issue when loading firmware

pico_double

  • Major cleanup, with much improved documentation
  • Implemented the full complement of double conversion functions defined in pico/double.h across both RP2040 and RP2350 variants of pico_double_pico

pico_float

  • Major cleanup, with much improved documentation
  • RP2350 pico_float_pico_dcp variant now enables -msoft-float, since if you've chosen to use DCP instead of VFP for single-precision floating-point, you probably don't want the compiler emitting inline VFP instructions either
  • Implemented the full complement of float conversion functions defined in pico/float.h across RP2040 and all RP2350 variants of pico_float_pico

pico_flash

  • Fixed a build error when using FreeRTOS with configSUPPORT_DYNAMIC_ALLOCATION=0

pico_lwip

  • Fixed build with PPP_SUPPORT=1 when using pico_lwip_nosys

pico_mbedtls

  • Added correct cleanup of RP2350 SHA256 state during mbedtls_sha256_free()

pico_multicore

  • Added multicore_lockout_victim_deinit()
  • multicore_reset_core1() now marks Core 1 as de-initialized w.r.t. multicore_lockout_victim_ functions, allowing multicore_lockout_victim_init() to perform correctly after the reset

pico_runtime_init

  • Added SYS_CLK_VREG_VOLTAGE_AUTO_ADJUST to indicate the voltage regular should be set to SYS_CLK_VREG_VOLTAGE_MIN during default clock setup in order to support the configured system clock frequency

pico_sha256

  • Added pico_sha256_cleanup() to clean up from an in-progress SHA256 operation which was not completed via pico_sha256_finish()

pico_stdio_usb

  • Allow user to override CFG_TUD_CDC_RX_BUFSIZE,
    CFG_TUD_CDC_TX_BUFSIZE and CFG_TUD_CDC_EP_BUFSIZE defines to increase performance

pico_time

  • Fixed a rare race condition that could cause alarms/repeating timers to get "lost"

TinyUSB

  • Updated TinyUSB to 0.18.0 from 0.17.0

FreeRTOS

  • FreeRTOS support for RP2350 (Arm/RISC-V) has been upstreamed to https://github.com/FreeRTOS/FreeRTOS-Kernel, however is not yet in any official release, so you should use the latest from the main branch there and make sure you initialize the submodules as RP2350 support is actually in a submodule
  • If your project embeds FreeRTOS_Kernel_import.cmake, you should update to the latest version here which works for both RP2040 and RP2350

Pioasm

  • Fixed encoding of WAIT GPIO with GPIO number >= 32
  • Python output now correctly emits word(x) for all PIO version 1 (RP2350) PIO instructions

SVD

  • Fixed access type for DMA CHAN_ABORT register to be read-write (with clear-on-write) for both RP2040 and RP2350

Build

  • GCC 14 is now supported
  • LLVM Embedded Toolchain For Arm 19.x is now supported
  • Multiple .pio files now supported in pico_generate_pio_header()
  • .DIS files for builds using LLVM/Clang on RP2350 now contain correct disassembly for VFP floating point instructions
  • Fixed some newer CMake version deprecation warnings
  • Added explicit license to pico_sdk_import.cmake as it is copied into external projects

Bazel Build

  • Updated LLVM/Clang toolchain to fix stack overflow issue with fma() related math functions

New Examples

These are in the pico_examples repository.

Added in 2.1.0 timeframe

These examples were added in the 2.1.0 timeframe but were not listed in the release notes then:

Example Description
binary_info/blink_any Uses bi_ptr variables to create a configurable blink binary - see the separate readme for mote details
binary_info/hello_anything Uses bi_ptr variables to create a configurable hello_world binary - see the separate readme for more details
i2c/slave_mem_i2c_burst i2c slave example where the slave implements a 256 byte memory. This version inefficiently writes each byte in a separate call to demonstrate read and write burst mode.
pico_w/wifi/picow_blink_slow_clock Blinks the on-board LED (which is connected via the WiFi chip) with a slower system clock to show how to reconfigure communication with the WiFi chip at run time under those circumstances
pico_w/wifi/picow_blink_fast_clock Blinks the on-board LED (which is connected via the WiFi chip) with a faster system clock to show how to reconfigure communication with the WiFi chip at build time under those circumstances
pico_w/wifi/picow_http_client Demonstrates how to make http and https requests
pico_w/wifi/picow_http_client_verify Demonstrates how to make a https request with server authentication
pico_w/wifi/freertos/picow_freertos_http_client_sys Demonstrates how to make a https request in NO_SYS=0 (i.e. full FreeRTOS integration)
universal/blink Same as the blink example, but universal.
universal/nuke_universal Same as the flash/nuke example, but universal. On RP2350 runs as a packaged SRAM binary, so is written to flash and copied to SRAM by the bootloader

Added in 2.1.1 timeframe

Example Description
pico_w/wifi/mqtt/picow_mqtt_client Demonstrates how to implement a MQTT client application
pio/uart_pio_dma Send and receive data from a UART implemented using the PIO and DMA
usb/device/dev_multi_cdc A USB CDC device example with two serial ports, one of which is used for standard SDK stdio. The example exposes two serial ports over USB to the host. The first port is used for stdio, and the second port is used for a simple echo loopback. You can connect to the second port and send some characters, and they will be echoed back on the first port while you will receive a "OK\r\n" message on the second port indicating that the data was received.

Authors

Thanks to the following for their contributions:

Steven Conaway,
David Dyck,
d-c-d,
Liam Fraser,
gazzyt,
Hardy Griech,
Wu Haotian,
Dan Halbert,
Peter Harper,
Petr Hosek,
Richard Hulme,
HugoTro,
Jean Jonethal,
Osman Karaketir,
Lesords,
Gregory Neverov,
nilswiersma,
Matthias Ringwald,
Graham Sanderson,
Andrew Scheller,
Matias Silva,
Arkin Solomon,
William Vinnicombe,
Dryw Wade,
waveshare,
Luke Wren,
Enrico Zaghini