Raspberry Pi Pico SDK Examples

Overview

Raspberry Pi Pico SDK Examples

Getting started

See Getting Started with the Raspberry Pi Pico and the README in the pico-sdk for information on getting up and running.

First Examples

App Description Link to prebuilt UF2
hello_serial The obligatory Hello World program for Pico (Output over serial version)
hello_usb The obligatory Hello World program for Pico (Output over USB version) https://rptl.io/pico-hello-usb
blink Blink an LED on and off. https://rptl.io/pico-blink

ADC

App Description
hello_adc Display the voltage from an ADC input.
joystick_display Display a Joystick X/Y input based on two ADC inputs.
adc_console An interactive shell for playing with the ADC. Includes example of free-running capture mode.
microphone_adc Read analog values from a microphone and plot the measured sound amplitude.

Clocks

App Description
hello_48MHz Change the system clock frequency to 48 MHz while running.
hello_gpout Use the general purpose clock outputs (GPOUT) to drive divisions of internal clocks onto GPIO outputs.
hello_resus Enable the clock resuscitate feature, "accidentally" stop the system clock, and show how we recover.

CMake

App Description
build_variants Builds two version of the same app with different configurations

DMA

App Description
hello_dma Use the DMA to copy data in memory.
control_blocks Build a control block list, to program a longer sequence of DMA transfers to the UART.
channel_irq Use an IRQ handler to reconfigure a DMA channel, in order to continuously drive data through a PIO state machine.

Flash

App Description
cache_perfctr Read and clear the cache performance counters. Show how they are affected by different types of flash reads.
nuke Obliterate the contents of flash. An example of a NO_FLASH binary (UF2 loaded directly into SRAM and runs in-place there). A useful utility to drag and drop onto your Pico if the need arises.
program Erase a flash sector, program one flash page, and read back the data.
xip_stream Stream data using the XIP stream hardware, which allows data to be DMA'd in the background whilst executing code from flash.
ssi_dma DMA directly from the flash interface (continuous SCK clocking) for maximum bulk read performance.

GPIO

App Description
hello_7segment Use the GPIOs to drive a seven segment LED display.
hello_gpio_irq Register an interrupt handler to run when a GPIO is toggled.
dht_sensor Use GPIO to bitbang the serial protocol for a DHT temperature/humidity sensor.

See also: blink, blinking an LED attached to a GPIO.

HW divider

App Description
hello_divider Show how to directly access the hardware integer dividers, in case AEABI injection is disabled.

I2C

App Description
bus_scan Scan the I2C bus for devices and display results.
bmp280_i2c Read and convert temperature and pressure data from a BMP280 sensor, attached to an I2C bus.
lcd_1602_i2c Display some text on a generic 16x2 character LCD display, via I2C.
lis3dh_i2c Read acceleration and temperature value from a LIS3DH sensor via I2C
mcp9808_i2c Read temperature, set limits and raise alerts when limits are surpassed.
mma8451_i2c Read acceleration from a MMA8451 accelerometer and set range and precision for the data.
mpl3115a2_i2c Interface with an MPL3115A2 altimeter, exploring interrupts and advanced board features, via I2C.
mpu6050_i2c Read acceleration and angular rate values from a MPU6050 accelerometer/gyro, attached to an I2C bus.
oled_i2c Convert and display a bitmap on a 128x32 SSD1306-driven OLED display
pa1010d_i2c Read GPS location data, parse and display data via I2C.
pcf8523_i2c Read time and date values from a real time clock. Set current time and alarms on it.

Interpolator

App Description
hello_interp A bundle of small examples, showing how to access the core-local interpolator hardware, and use most of its features.

Multicore

App Description
hello_multicore Launch a function on the second core, printf some messages on each core, and pass data back and forth through the mailbox FIFOs.
multicore_fifo_irqs On each core, register and interrupt handler for the mailbox FIFOs. Show how the interrupt fires when that core receives a message.
multicore_runner Set up the second core to accept, and run, any function pointer pushed into its mailbox FIFO. Push in a few pieces of code and get answers back.

Pico Board

App Description
blinky Blink "hello, world" in Morse code on Pico's LED
button Use Pico's BOOTSEL button as a regular button input, by temporarily suspending flash access.

PIO

App Description
hello_pio Absolutely minimal example showing how to control an LED by pushing values into a PIO FIFO.
apa102 Rainbow pattern on on a string of APA102 addressable RGB LEDs.
differential_manchester Send and receive differential Manchester-encoded serial (BMC).
hub75 Display an image on a 128x64 HUB75 RGB LED matrix.
i2c Scan an I2C bus.
ir_nec Sending and receiving IR (infra-red) codes using the PIO.
logic_analyser Use PIO and DMA to capture a logic trace of some GPIOs, whilst a PWM unit is driving them.
manchester_encoding Send and receive Manchester-encoded serial.
pio_blink Set up some PIO state machines to blink LEDs at different frequencies, according to delay counts pushed into their FIFOs.
pwm Pulse width modulation on PIO. Use it to gradually fade the brightness of an LED.
spi Use PIO to erase, program and read an external SPI flash chip. A second example runs a loopback test with all four CPHA/CPOL combinations.
squarewave Drive a fast square wave onto a GPIO. This example accesses low-level PIO registers directly, instead of using the SDK functions.
st7789_lcd Set up PIO for 62.5 Mbps serial output, and use this to display a spinning image on a ST7789 serial LCD.
quadrature_encoder A quadrature encoder using PIO to maintain counts independent of the CPU.
uart_rx Implement the receive component of a UART serial port. Attach it to the spare Arm UART to see it receive characters.
uart_tx Implement the transmit component of a UART serial port, and print hello world.
ws2812 Examples of driving WS2812 addressable RGB LEDs.
addition Add two integers together using PIO. Only around 8 billion times slower than Cortex-M0+.

PWM

App Description
hello_pwm Minimal example of driving PWM output on GPIOs.
led_fade Fade an LED between low and high brightness. An interrupt handler updates the PWM slice's output level each time the counter wraps.
measure_duty_cycle Drives a PWM output at a range of duty cycles, and uses another PWM slice in input mode to measure the duty cycle.

Reset

App Description
hello_reset Perform a hard reset on some peripherals, then bring them back up.

RTC

App Description
hello_rtc Set a date/time on the RTC, then repeatedly print the current time, 10 times per second, to show it updating.
rtc_alarm Set an alarm on the RTC to trigger an interrupt at a date/time 5 seconds into the future.
rtc_alarm_repeat Trigger an RTC interrupt once per minute.

SPI

App Description
bme280_spi Attach a BME280 temperature/humidity/pressure sensor via SPI.
mpu9250_spi Attach a MPU9250 accelerometer/gyoscope via SPI.
spi_dma Use DMA to transfer data both to and from the SPI simultaneously. The SPI is configured for loopback.
spi_flash Erase, program and read a serial flash device attached to one of the SPI controllers.

System

App Description
hello_double_tap An LED blink with the pico_bootsel_via_double_reset library linked. This enters the USB bootloader when it detects the system being reset twice in quick succession, which is useful for boards with a reset button but no BOOTSEL button.
narrow_io_write Demonstrate the effects of 8-bit and 16-bit writes on a 32-bit IO register.
unique_board_id Read the 64 bit unique ID from external flash, which serves as a unique identifier for the board.

Timer

App Description
hello_timer Set callbacks on the system timer, which repeat at regular intervals. Cancel the timer when we're done.
periodic_sampler Sample GPIOs in a timer callback, and push the samples into a concurrency-safe queue. Pop data from the queue in code running in the foreground.
timer_lowlevel Example of direct access to the timer hardware. Not generally recommended, as the SDK may use the timer for IO timeouts.

UART

App Description
hello_uart Print some text from one of the UART serial ports, without going through stdio.
lcd_uart Display text and symbols on a 16x02 RGB LCD display via UART
uart_advanced Use some other UART features like RX interrupts, hardware control flow, and data formats other than 8n1.

USB Device

TinyUSB Examples

Most of the USB device examples come directly from the TinyUSB device examples directory here. Those that are supported on RP2040 devices are automatically included as part of the pico-examples build as targets named tinyusb_dev_ , e.g. https://github.com/hathach/tinyusb/tree/master/examples/device/hid_composite is built as tinyusb_dev_hid_composite.

At the time of writing, these examples are available:

  • tinyusb_dev_audio_4_channel_mic
  • tinyusb_dev_audio_test
  • tinyusb_dev_board_test
  • tinyusb_dev_cdc_dual_ports
  • tinyusb_dev_cdc_msc
  • tinyusb_dev_dfu
  • tinyusb_dev_dfu_runtime
  • tinyusb_dev_dynamic_configuration
  • tinyusb_dev_hid_composite
  • tinyusb_dev_hid_generic_inout
  • tinyusb_dev_hid_multiple_interface
  • tinyusb_dev_midi_test
  • tinyusb_dev_msc_dual_lun
  • tinyusb_dev_net_lwip_webserver
  • tinyusb_dev_uac2_headset
  • tinyusb_dev_usbtmc
  • tinyusb_dev_video_capture
  • tinyusb_dev_webusb_serial

Whilst these examples ably demonstrate how to use TinyUSB in device mode, their CMakeLists.txt is set up in a way tailored to how TinyUSB builds their examples within their source tree.

For a better example of how to configure CMakeLists.txt for using TinyUSB in device mode with the Raspberry Pi SDK see below:

SDK build example

App Description
dev_hid_composite A copy of the TinyUSB device example with the same name, but with a CMakeLists.txt which demonstrates how to add a dependency on the TinyUSB device libraries with the Raspberry Pi Pico SDK

Low Level example

App Description
dev_lowlevel A USB Bulk loopback implemented with direct access to the USB hardware (no TinyUSB)

USB Host

All the USB host examples come directly from the TinyUSB host examples directory here. Those that are supported on RP2040 devices are automatically included as part of the pico-examples build as targets named tinyusb_host_ , e.g. https://github.com/hathach/tinyusb/tree/master/examples/host/cdc_msc_hid is built as tinyusb_host_cdc_msc_hid.

At the time of writing, there is only one host example available:

  • tinyusb_host_cdc_msc_hid

Watchdog

App Description
hello_watchdog Set the watchdog timer, and let it expire. Detect the reboot, and halt.
Comments
  • Add a SSD1306 I2C example

    Add a SSD1306 I2C example

    This is a 128x64 monochrome display, 0.96" diagonal so very small.

    This example initialises the display, and implements basic pixel, line drawing and text output.

    opened by JamesH65 23
  • Add monochrome e-ink display (SSD1681) example

    Add monochrome e-ink display (SSD1681) example

    This PR adds an example for the 200x200 monochrome e-ink display based on the SSD1681. Demonstrates use of the onboard SRAM and the SD card (possibly).

    Checklist

    • [x] documentation
    • [ ] working example
    • [x] Fritzing schematic and image
    • [x] added to CMakeLists.txt
    • [x] added to repo README
    bug enhancement 
    opened by matiasilva 18
  • Configuration error when follow the guide of MS Visual Studio Code setup.

    Configuration error when follow the guide of MS Visual Studio Code setup.

    When I open the pico-example folder, the configuration process generate following error. How can I get sdk automatically download there?. It seems same for me when using command line instead of vsc, after type nmake

    [main] Configuring folder: pico-examples 
    [driver] Removing c:/Users/yuxiong/Documents/GitHub/pico-examples/build/CMakeCache.txt
    [driver] Removing c:\Users\yuxiong\Documents\GitHub\pico-examples\build\CMakeFiles
    [proc] Executing command: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -Hc:/Users/yuxiong/Documents/GitHub/pico-examples -Bc:/Users/yuxiong/Documents/GitHub/pico-examples/build -G Ninja
    [cmake] Not searching for unused variables given on the command line.
    [cmake] Using PICO_SDK_PATH from environment (' ..\..\pico-sdk')
    [cmake] CMake Error at pico_sdk_import.cmake:54 (message):
    [cmake]   Directory 'C:/Users/yuxiong/Documents/GitHub/pico-examples/build/pico-sdk'
    [cmake]   not found
    [cmake] Call Stack (most recent call first):
    [cmake]   CMakeLists.txt:4 (include)
    [cmake] 
    [cmake] 
    [cmake] -- Configuring incomplete, errors occurred!
    
    
    opened by xiongyu0523 18
  • Problem with bmp280_i2c example

    Problem with bmp280_i2c example

    I'm not sure if it's related to the example code, but the serial output of the bmp280_i2c always shows incorrect values like :

    Pressure = 36479.457 kPa
    Temp. = -15.94 C
    

    The good thing is that the values are not constant, if I put the sensor close to a heating source, the values quickly go up.

    After some debugging, it seems that the calibration data I get from the BMP280 are wrong, here's a dump of the raw bytes I get from inside bmp280_get_calib_params() after i2c_read_blocking :

    00 00 00 00 00 2F 94 00 4C 9D C0 7B F3 00 72 74 90 43 A3 2B BA 00 00 6B

    According to the datasheet, it means dig_T1 and dig_T2 are zero but they state that compensation values are never zero...

    I tried with 2 different BMP280 (3.3V) modules wired as in the example schematic but the result is the same.

    I'm now out of idea :)

    Does anyone have an idea on what could cause this issue?

    Thanks in advance

    question 
    opened by Glitchbone 16
  • Merge intern examples

    Merge intern examples

    I have updated a couple of files per @kilograham requests, but I have not tested any of these changes. They look sane. So from my point of view I think this branch can be merged.

    opened by JamesH65 16
  • Add pio/ir_nec

    Add pio/ir_nec

    As discussed with @lurch and referenced by @aallan this PR adds a PIO example to demonstrate sending and receiving infra-red codes in 'NEC' format: pio/ir_nec.

    There are three sub-directories: the loopback example, and a library each for the transmit and receive functions. As requested I have included a README.adoc and wiring diagram along the lines of gpio/hello_7segment

    I've left my name in the copyright message with the BSD-3Clause licence but I'm OK for you to change that if necessary. Incidentally I have followed the format of the other examples by adding the example_auto_set_url() stuff into CMakeLists.txt but I'm afraid I must admit I don't really know what I'm doing with that.

    opened by mjcross 16
  • Add example for the MCP9808 Temperature sensor

    Add example for the MCP9808 Temperature sensor

    This PR reads and writes to the registers on the MCP9808 board. It sets the upper, lower and critical temperatures and reads the ambient temperature to 4dp by performing appropriate conversions. It checks to see that none of the limits have been surpassed and displays alerts if otherwise.

    enhancement 
    opened by aayushijhaveri 15
  • Add BMP280 I2C example

    Add BMP280 I2C example

    This PR adds a new example for the BMP280 temperature and pressure sensor via I2C. It takes care of reading sensor values and also the necessary conversion for the values to make sense. I'm not sure how much "cleaning up" is needed, for now all code is in one file for simplicity but a few definitions want to be in their own header file. Fritzing diagram and file included, accompanying documentation too.

    enhancement 
    opened by matiasilva 15
  • CMake fails to build examples at the command line on Windows

    CMake fails to build examples at the command line on Windows

    Hi,

    Just a heads up. I found that the pico examples weren't building and I needed to add:

    set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})

    ... to the start of the CMakeLists.txt file. Just before where it says "include(pico_sdk_import.cmake)".

    Without this line, CMake was not using the PICO_SDK_PATH environment variable, as per section 8.2.3 of the Getting Started with Raspberry Pi Pico document.

    Cheers.

    opened by slrAU 15
  • Max7219 32x8 spi

    Max7219 32x8 spi

    Add a couple of examples that use the Max7219 via SPI.

    Note, no Fritzing parts available for these particular panels, so diagrams omitted. Note that the wiring is very simple so this should not be an issue.

    opened by JamesH65 9
  • Error building hello_usb on Windows 10

    Error building hello_usb on Windows 10

    I've followed this guide step by step: https://www.element14.com/community/community/raspberry-pi/blog/2021/01/24/working-with-the-raspberry-pi-pico-with-windows

    And everything works in "Developer Command Prompt for VS 2019" until the linking where I also have the "╗┐" in front of the directory path with the object files in. image

    duplicate 
    opened by HrOlsen 9
  • Add tls_client example

    Add tls_client example

    This requires mbedtls to be added to the pico-sdk Connects to worldtimeapi.org and retrieves a web page Originally written by Floris Bos @maxnet

    Fixes: #231

    opened by peterharperuk 8
  • picow_freertos_ping_sys:  hardfault on pico-w

    picow_freertos_ping_sys: hardfault on pico-w

    I get the hardfault when trying to run picow_freertos_ping_sys on pico-w, the picow_freertos_ping_nosys works fine.

    Starting FreeRTOS SMP on both cores:
    Version: 7.95.49 (2271bb6 CY) CRC: b7a28ef3 Date: Mon 2021-11-29 22:50:27 PST Ucode Ver: 1043.2162 FWID 01-c51d9400
    cyw43 loaded ok, mac 28:cd:c1:03:e8:e0
    API: 12.2
    Data: RaspberryPi.PicoW
    Compiler: 1.29.4
    ClmImport: 1.47.1
    Customization: v5 22/06/24
    Creation: 2022-06-24 06:55:08
    Connecting to WiFi...
    connect status: joining
    connect status: no ip
    connect status: link up
    Connected.
    ping: send 142.251.35.196
    

    Backtrace:

    Starting program: /home/plebioda/pico/pico-examples/build/pico_w/freertos/ping/picow_freertos_ping_sys.elf
    [New Thread 2]
    
    Thread 1 received signal SIGTRAP, Trace/breakpoint trap.
    isr_hardfault () at /home/plebioda/pico/pico-sdk/src/rp2_common/pico_standard_link/crt0.S:98
    98      decl_isr_bkpt isr_hardfault
    (gdb) bt
    #0  isr_hardfault () at /home/plebioda/pico/pico-sdk/src/rp2_common/pico_standard_link/crt0.S:98
    #1  <signal handler called>
    #2  uxListRemove (pxItemToRemove=0x2000f4fc <ucHeap+9620>) at /home/plebioda/pico/FreeRTOS-Kernel/list.c:193
    #3  0x10022800 in xTaskIncrementTick () at /home/plebioda/pico/FreeRTOS-Kernel/tasks.c:3635
    #4  0x100200da in xPortSysTickHandler () at /home/plebioda/pico/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/port.c:507
    #5  <signal handler called>
    #6  0x10022e06 in prvMinimalIdleTask (pvParameters=0x0) at /home/plebioda/pico/FreeRTOS-Kernel/tasks.c:4332
    #7  0x1001fd70 in pxPortInitialiseStack (pxTopOfStack=0x1001fec7 <prvDisableInterruptsAndPortStartSchedulerOnCore+18>, pxCode=0x20040fd8, pvParameters=0x10) at /home/plebioda/pico/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/port.c:187
    #8  0x00000000 in ?? ()
    (gdb) t 2  
    [Switching to thread 2 (Thread 2)]
    #0  0x10022f28 in prvCheckTasksWaitingTermination () at /home/plebioda/pico/FreeRTOS-Kernel/tasks.c:4690
    4690    }
    (gdb) bt
    #0  0x10022f28 in prvCheckTasksWaitingTermination () at /home/plebioda/pico/FreeRTOS-Kernel/tasks.c:4690
    #1  0x10022e28 in prvIdleTask (pvParameters=0x0) at /home/plebioda/pico/FreeRTOS-Kernel/tasks.c:4390
    #2  0x1001fd70 in pxPortInitialiseStack (pxTopOfStack=0x1001ff21 <xPortStartScheduler+80>, pxCode=0x20041fc0, pvParameters=0xf) at /home/plebioda/pico/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/port.c:187
    #3  0x100224ec in vTaskStartScheduler () at /home/plebioda/pico/FreeRTOS-Kernel/tasks.c:2888
    #4  0x10000410 in vLaunch () at /home/plebioda/pico/pico-examples/pico_w/freertos/ping/picow_freertos_ping.c:63
    #5  0x1000043e in main () at /home/plebioda/pico/pico-examples/pico_w/freertos/ping/picow_freertos_ping.c:80
    

    In list.c:193 the pxItemToRemove->pxPrevious pointer is invalid:

    (gdb) p *pxItemToRemove
    $3 = {xItemValue = 31, pxNext = 0x2000f024 <ucHeap+8380>, pxPrevious = 0x1, pvOwner = 0x4, pvContainer = 0x1}
    

    Using:

    • pico-examples a7ad17156bf60842ee55c8f86cd39e9cd7427c1d
    • pico-sdk: 2e6142b15b8a75c1227dd3edbe839193b2bf9041
    • FreeRTOS: V202110.00-SMP-11-g8128208bd
    opened by plebioda 4
  • Tinyusb mass storage example

    Tinyusb mass storage example

    It'd be very useful if there was a port of https://github.com/hathach/tinyusb/tree/master/examples/device/cdc_msc to the pico. I've tried my hands at it but never managed to get close. I don't have headers so I have no real way to debug

    opened by mandar1jn 1
  • OpenOCD: GDB Server Quit Unexpectedly. VSCode and picoprobe

    OpenOCD: GDB Server Quit Unexpectedly. VSCode and picoprobe

    Greetings, I have a problem when I try to debug in VSCode with picoprobe. I copy the files from IDE/VSCode and I notice that I need to put "runToEntryPoint": "main" instead of "RunToMain". But the problem persist so I cannot find what I'm missing. It is possible that de documentation is obsolete in the part of "Chapter 7. Using Visual Studio Code" . My main OS is Arch but I tried with Ubuntu and I had the same problem.

    This is the output when I try to debug.

    Cortex-Debug: VSCode debugger extension version 1.6.7 git(b0f5563). Usage info: https://github.com/Marus/cortex-debug#usage Reading symbols from arm-none-eabi-objdump --syms -C -h -w /home/navarro/software/pico/my_project_picos/console_w/build/console.elf Reading symbols from arm-none-eabi-nm --defined-only -S -l -C -p /home/navarro/software/pico/my_project_picos/console_w/build/console.elf Launching GDB: arm-none-eabi-gdb -q --interpreter=mi2 1-gdb-version Launching gdb-server: /home/navarro/software/pico/openocd/src/openocd -c "gdb_port 50000" -c "tcl_port 50001" -c "telnet_port 50002" -s /home/navarro/software/pico/openocd/tcl -f /home/navarro/.vscode/extensions/marus25.cortex-debug-1.6.7/support/openocd-helpers.tcl -f interface/picoprobe.cfg -f target/rp2040.cfg Please check TERMINAL tab (gdb-server) for output from /home/navarro/software/pico/openocd/src/openocd Finished reading symbols from objdump: Time: 24 ms Finished reading symbols from nm: Time: 33 ms OpenOCD: GDB Server Quit Unexpectedly. See gdb-server output in TERMINAL tab for more details.

    This is my settings.json

    { // These settings tweaks to the cmake plugin will ensure // that you debug using cortex-debug instead of trying to launch // a Pico binary on the host "cmake.statusbar.advanced": { "debug": { "visibility": "hidden" }, "launch": { "visibility": "hidden" }, "build": { "visibility": "default" }, "buildTarget": { "visibility": "hidden" } }, "cmake.buildBeforeRun": true, "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", "cortex-debug.openocdPath": "/home/navarro/software/pico/openocd/src/openocd", "cortex-debug.gdbPath": "arm-none-eabi-gdb",

    }

    and this is my lunch.json

    { "version": "0.2.0", "configurations": [ { "name": "Pico Debug", "cwd": "${workspaceRoot}", "executable": "${command:cmake.launchTargetPath}", "request": "launch", "type": "cortex-debug", "servertype": "openocd", // This may need to be arm-none-eabi-gdb depending on your system "gdbPath" : "arm-none-eabi-gdb", "device": "RP2040", "configFiles": [ "interface/picoprobe.cfg", "target/rp2040.cfg" ], "svdFile": "${env:PICO_SDK_PATH}/src/rp2040/hardware_regs/rp2040.svd", "runToEntryPoint": "main", // Work around for stopping at main on restart "postRestartCommands": [ "break main", "continue" ], "searchDir": ["/home/navarro/software/pico/openocd/tcl"], "showDevDebugOutput": "parsed" } ] }

    opened by NavarroUwU 1
  • picow_freertos_iperf_server_sys: LED stops blinking when iperf is actualy being run

    picow_freertos_iperf_server_sys: LED stops blinking when iperf is actualy being run

    Since I wanted to learn FreeRTOS and lwIP in combination on the RP2040, I compiled the "Pico-W FreeRTOS iperf server" example.

    The access point I used is another Pico-W running the "Pico-W Access Point" example without any modifications.

    I also connect my Linux laptop to the same access point and all devices get their IPv4 addresses via DHCP server integrated with the access point example. No other devices except the Pico-W and the laptop are connect to the access point.

    When I run the iperf server in "NO_SYS" mode, everything is fine, iperf reports around 12MBit/s. I can happily repeat the test, ping the device in parallel and even run nmap against it. The LED just keeps on blinking.

    With the "sys" example however, the LED starts blinking as soon the board has connected to it's AP and is ready to run the tests. However, when I start the iperf client on my laptop, the LED will stop blinking eventually. The Pico-W running the iperf sys example is still pingable and futher iperf runs are possible. However, the LED will just stay off.

    I haven't yet digged deep into it. It might be a bug in FreeRTOS or its rp2040 "port" that makes it stop scheduling tasks properly, it could be a bug in the cyw driver or firmware that either stops driving the LED or the SPI channel is blocked by the WiFi traffic and as such the SPI traffic regarding the LED gets lost. It could also be lwIP or the cyw driver corrupting some parts of memory and as such the LED blinking tasks is no longer functioning ...

    Again, no issues with the NO_SYS variant of the freertos iperf server example.

    opened by kripton 11
Owner
Raspberry Pi
Raspberry Pi
Tetris on a Raspberry Pi Pico mounted on a Pimoroni Pico Explorer

PicoTetris Classic Tetris game running on a Raspberry Pi Pico microcontroller. Pico C port by Richard Birkby Original JavaScript implementation - Jake

Richard Birkby 34 Dec 3, 2022
Breakout game for Raspberry Pi Pico with Pimoroni Pico Display pack

breakout_rpi_pico Breakout game for Raspberry Pi Pico with Pimoroni Pico Display pack Prebuilt binary (breakout.uf2) is here. To build your own binary

null 19 Oct 15, 2022
Pico-uart-bridge - Raspberry Pi Pico UART-USB bridge

Raspberry Pi Pico USB-UART Bridge This program bridges the Raspberry Pi Pico HW UARTs to two independent USB CDC serial devices in order to behave lik

Álvaro Fernández Rojas 156 Dec 23, 2022
Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display

pico-display-matrix Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display or how to actually use all Flash

null 32 Sep 10, 2022
Prueba del Raspberry PI PICO con un display Raspberry PI TFT 3.5"

Raspberry-PI-PICO-display-RPI35 Prueba del Raspberry PI PICO con un display Raspberry PI TFT 3.5" Con ayuda de la libreria https://github.com/khoih-pr

null 1 Nov 10, 2021
Raspberry Pi Pico (RP2040) and Micro-ROS (ROS 2) Integration

The Pico is an amazing microcontroller and I couldn't wait for ROS 2 support or Arduino Core, so here is my approach. Once the Arduino Core for RP2040 is out it will be easier to use micro_ros_arduino.

Darko Lukić 19 Jun 19, 2022
built-in CMSIS-DAP debugger tailored especially for the RP2040 “Raspberry Pi Pico”

RP2040 has two ARM Cortex-M0+ cores, and the second core normally remains dormant. pico-debug runs on one core in a RP2040 and provides a USB CMSIS-DAP interface to debug the other core. No hardware is added; it is as if there were a virtual debug pod built-in.

null 272 Dec 30, 2022
🦠 µnix is a UNIX-like operating system for the raspberry pi pico.

The µnix Operating System "µnix", "munix" or, "micro unix" aims to be a micro kernel based operating system targeting the Raspberry Pi Pico. "µnix" is

Sleepy Monax 57 Dec 11, 2022
Fractal rendering for Raspberry Pi Pico microcontroller

picofract Mandelbrot Set rendering demo for Raspberry Pi Pico microcontroller with Pico Display Pack. Building If you already have the Pimoroni SDK bu

null 22 Dec 7, 2022
Arduino API for the Raspberry Pico

Raspberry PI Pico - Arduino API On Friday I was receiving my Raspberry PI Pico and I had the opportunity to play around with it. Actually most of the

Phil Schatzmann 59 Jan 2, 2023
x86 emulator on Raspberry Pi Pico

picox86 x86 emulator on Raspberry Pi Pico https://user-images.githubusercontent.com/10139098/110543817-13299080-812b-11eb-9c88-674cdae919fc.mp4 PCB fr

null 39 Nov 9, 2022
A laser cut Dreamcast Pop'n Music controller and integrated memory card using the Raspberry Pi Pico's Programmable IO

Dreamcast Pop'n Music Controller Using Raspbery Pi Pico (RP2040) Intro This is a homebrew controller for playing the Pop'n Music games on the Sega Dre

null 42 Dec 29, 2022
Web Server based on the Raspberry Pico using an ESP8266 with AT firmware for WiFi

PicoWebServer This program runs on a Raspberry Pico RP2040 to provide a web server when connected to an Espressif ESP8266. This allows the Pico to be

null 52 Jan 7, 2023
Raspberry Pi Pico Arduino core, for all RP2040 boards

Arduino-Pico Raspberry Pi Pico Arduino core, for all RP2040 boards This is a port of the RP2040 (Raspberry Pi Pico processor) to the Arduino ecosystem

Earle F. Philhower, III 929 Jan 5, 2023
A programming environment for Lua for the Raspberry Pi Pico microcontroller

picolua A programming environment for Lua for the Raspberry Pi Pico microcontroller. Version 0.3, April 2021 What is this? picolua is a proof-of-conce

Kevin Boone 65 Jan 8, 2023
a little hobby raspberry pi pico emulator

PICO-EMU a little raspberry pi pico emulator note: we use the provided bootrom from raspberry pi at the repo: https://github.com/raspberrypi/pico-boot

supercyp 26 Nov 5, 2022
Raspberry Pi Pico AutoHotkey Streamdeck / Keyboard with LEDs

Raspberry Pi Pico AutoHotkey Streamdeck / Keyboard with LEDs

Build Comics 19 Dec 7, 2022
A FAT filesystem with SPI driver for SD card on Raspberry Pi Pico

no-OS-FatFS-SD-SPI-RPi-Pico Simple library for SD Cards on the Pico At the heart of this library is ChaN's FatFs - Generic FAT Filesystem Module. It a

Carl J Kugler III 130 Dec 27, 2022
Enable LoRaWAN communications on your Raspberry Pi Pico or any RP2040 based board. 📡

pico-lorawan Enable LoRaWAN communications on your Raspberry Pi Pico or any RP2040 based board using a Semtech SX1276 radio module. Based on the Semte

Sandeep Mistry 76 Dec 30, 2022