Repository navigation
Firmware
The Pico and Arduino boards run firmware that belongs to openSciLab: the openSciLab Pico firmware for RP2040/RP2350 boards and the openSciLab Arduino firmware. This page says which boards are supported, how the firmware gets onto a board – from the application or by hand – how to check a board, and how to build the firmware yourself.
Beta. The firmware is built for every board and checked by host tests and by the simulators, which behave like the firmware. Much of it – the new functions of Pico firmware 8 (pins, outputs, generators, analog inputs) and the whole Arduino firmware – has not been checked on real hardware yet. Run the self-test first, and please report what works on your board and what does not.
Every version of openSciLab works only with the firmware it comes with. There is no compatibility with older firmware; instead, openSciLab offers the update:
- A Pico board with the openSciLab Pico firmware identifies itself as
OPENSCILAB_PICO_<BOARD>_V8_0and reports protocol 8. openSciLab opens a board only when its protocol is the one of the application. - A board with older firmware – an earlier openSciLab Pico, PiPiLogicAnalyzer
(
PIPI_LOGIC_ANALYZER_…) or the original LogicAnalyzer firmware (LOGIC_ANALYZER_…) – is recognised but not opened. openSciLab asks Firmware update needed; Update firmware... opens the connected hardware, where the board's row says update to 8.0. The update takes a few seconds; capture settings and profiles are kept. - The 8.0 a Pico board shows is the version of its firmware identity (
V8_0), which changes with the protocol. The release the image belongs to (0.1.0b1) is written into the image as its program version (picotool info). - An Arduino board speaks protocol 1 of the openSciLab Arduino firmware. A board with another protocol is refused with a message to install the firmware that comes with the application.
After updating openSciLab, Devices → Connected hardware shows whether your boards need the new firmware too. All boards of a multi device set must run the same version.
| File (GitHub Releases) | Content |
|---|---|
openSciLab-firmware-pico-uf2.zip |
every Pico image, openSciLab-pico_<BOARD>[_Turbo].uf2
|
openSciLab-firmware-arduino.zip |
the Arduino images, openSciLab_<environment>.hex or .bin
|
openSciLab-bridge.apk |
the bridge app for the Rigol DHO900 |
The packaged application contains all Pico images, so installing them from the application needs
no download. Each release lists its checksums in SHA256SUMS.txt.
Image <BOARD>
|
Board | Channels | Buffer | Turbo image | Trigger output → input |
|---|---|---|---|---|---|
BOARD_PICO |
Raspberry Pi Pico | 24 | 128 KB | yes | GP0 → GP1 |
BOARD_PICO_2 |
Raspberry Pi Pico 2 | 24 | 384 KB | yes | GP0 → GP1 |
BOARD_PICO_W |
Pico W, data over USB | 24 | 128 KB | – | GP0 → GP1 |
BOARD_PICO_W_WIFI |
Pico W with WiFi | 24 | 128 KB | – | GP0 → GP1 |
BOARD_PICO_2_W |
Pico 2 W, data over USB | 24 | 384 KB | – | GP0 → GP1 |
BOARD_PICO_2_W_WIFI |
Pico 2 W with WiFi | 24 | 384 KB | – | GP0 → GP1 |
BOARD_ZERO |
RP2040-Zero | 24 | 128 KB | yes | GPIO 17 → GPIO 18 |
BOARD_INTERCEPTOR |
LogicAnalyzer Interceptor | 28 | 128 KB | yes | GPIO 0 → GPIO 1 |
On the Pico boards the channels are GP2–GP22 and GP26–GP28; the three ADC inputs GP26–GP28 also serve as analog channels. The trigger pins link the boards of a multi device set.
A board captures at up to 100 MHz (blast mode 200 MHz). The Turbo images overclock the chip to 400 MHz with a raised core voltage and capture at up to 200 MHz (blast mode 400 MHz). That is outside the specification of the RP2040/RP2350 and can shorten its life; openSciLab installs the normal image unless you choose a Turbo image yourself.
The _WIFI images of the Pico W and Pico 2 W make the board reachable over WiFi as well (set up
with Network settings... on the device card, see Devices).
Captures into the board's buffer (with blast mode and bursts) and streams over USB (about 800 kB/s: 800 kHz with 8 channels, 400 kHz with 16, 200 kHz with 24); trigger sequences of up to 8 stages evaluated on the board (up to about 1 MHz on an RP2040 and 1.6 MHz on an RP2350, twice that with Turbo; the board measures and reports its limit); the state mode with an external clock (up to 25 MHz, 50 MHz with Turbo); a pin table with pin modes, outputs, PWM and pulses timed by the board; the monitor; analog inputs in captures and streams; a pattern generator, a square wave on GP22 and UART/SPI/I²C sent by the board; a watchdog that releases the outputs one second after the computer is gone; a self-test, test signals and detailed device information.
The firmware is based on the firmware of the LogicAnalyzer by Agustín Giménez Bernad (gusmanb), version 6.5. The changes and the bugs fixed are listed in firmware/README.md.
This is the usual way, for a new board as well as for an update:
- Plug the board in. A Pico without openSciLab firmware: hold its BOOTSEL button while plugging it in. It then shows as Board in bootloader mode (RP2040) (or (RP2350) for a Pico 2). A board that runs other firmware (MicroPython, for example) shows as Raspberry Pi board, one with older openSciLab or PiPiLogicAnalyzer firmware as openSciLab Pico.
- Open Devices → Connected hardware – also Devices → Install or update firmware..., Hardware... below the device list, or Install firmware... in the notice of the device list. The State column says whether the firmware is up to date, has an update or is missing.
- Click Install firmware or Update firmware in the row of the board and confirm with Install. openSciLab picks the image that fits the board, restarts the board into its bootloader, writes the image, waits until the board is back and connects it again.
The bootloader cannot tell a Pico from a Pico W (or a Pico 2 from a Pico 2 W). For a board in bootloader mode openSciLab therefore asks Which board is it?. Images built for the other chip (RP2040 or RP2350) are refused.
For a connected board, Update firmware... on the Details tab of its device card does the same.
Choose an image... in the connected hardware opens the dialog Install or update firmware – for
a Turbo image, an image you built, or any other .uf2 file:
- 1. Board lists boards in bootloader mode (drive RPI-RP2 or RP2350), connected analyzers and Raspberry Pi boards with other firmware. Select a board and press Restart into bootloader, or hold BOOTSEL while plugging it in.
-
2. Firmware image lists the images openSciLab knows; Browse... adds any
.uf2file. The line below names board, version, chip and size, and Turbo: overclocked and overvolted for a Turbo image. - Flash firmware writes it.
openSciLab finds images in the packaged application, in firmware/uf2/ of a source checkout and
in the folder firmware of the settings directory.
- Hold BOOTSEL while plugging the board in (or press Restart into the bootloader... on the
Details tab of its device card). A drive named
RPI-RP2(RP2040) orRP2350appears. - Copy the right
openSciLab-pico_<BOARD>.uf2fromopenSciLab-firmware-pico-uf2.ziponto the drive. The board restarts with the new firmware and appears as a serial port.
Self-test... on the Details tab of the device card, then Run self-test. Disconnect all probes and signals first: the test drives nothing onto the inputs and checks them only with the internal pull resistors.
| Test | What it checks | Result |
|---|---|---|
BOARD |
board, firmware, channels, buffer size, system clock | information |
RAM |
the capture buffer, written with two bit patterns and read back |
OK / FAIL
|
TRIGGER_LINK |
the trigger output drives the trigger input (Pico: GP0 → GP1) |
OK / FAIL / SKIPPED
|
CH1 … CHn
|
every input follows its pull-up and pull-down |
OK, STUCK_HIGH, STUCK_LOW, INVERTED
|
SEQUENCE |
how fast the board evaluates trigger sequences | information |
CAPTURE |
a real capture of the pull pattern through PIO and DMA |
OK / FAIL / SKIPPED
|
BLAST_CAPTURE |
the same in blast mode at the highest rate |
OK / FAIL / SKIPPED
|
STREAM |
a stream of a test counter over USB, checked sample by sample |
OK / FAIL
|
Shorts between two channels cannot be found this way. Boards with input buffers or level shifters
report their channels as STUCK_*, because the buffer drives the input – that is expected there.
On a multi device set the test runs on every board.
Test signals of the board... on the Details tab opens Simulated capture: choose the Pattern (Counter, Walking one or Protocols (UART, SPI, I2C)), the Channels, the Sampling frequency and the Samples, then Start simulation. The board writes the signals into its buffer instead of sampling its pins and transfers them like a real capture – a test of the firmware, the USB or WiFi link and the application, without a single wire.
The protocol pattern carries the text openSciLab: UART on channel 1 (at a tenth of the sampling
rate, 100,000 baud at 1 MHz), SPI on channels 2–4 and I²C on channels 5–6. With Add UART, SPI and
I2C decoders for the channels the decoders are added to the data view. Data → Test signals...
in a data view computes the same signals on the computer, without a board.
The Details tab shows the identification, board, firmware version and protocol, the build of the firmware (chip and revision, unique board ID, flash size, Pico SDK, build date, system clock, Turbo, WiFi) and the USB data of the port. Copy the details puts it on the clipboard for a bug report.
| Environment | Board | Connection | Pins | Capture buffer |
|---|---|---|---|---|
uno |
Arduino Uno R3 | 115200 baud | D0–D13 (D0/D1 reserved), A0–A5 | 448 B |
nano |
Arduino Nano (Optiboot) | 115200 baud | as the Uno, plus A6/A7 (analog only) | 448 B |
megaatmega2560 |
Arduino Mega 2560 | 115200 baud | whole ports: D22–D29, D53–D50/D10–D13, D49–D42, A8–A15 | 4 KiB |
uno_r4_minima |
Arduino Uno R4 Minima | USB | D0–D13, A0–A5 (DAC on A0) | 12 KiB |
esp32dev |
ESP32 DevKitC (WROOM-32) | 2 Mbaud | 26 GPIOs (GPIO1/3 reserved), DAC on GPIO25/26 | 48 KiB |
esp32-s3 |
ESP32-S3 DevKitC-1 | native USB | 31 GPIOs (GPIO19/20 reserved) | 64 KiB |
The rates of the boards are estimates until they have been measured. The board starts with every pin an input. When outputs are driven and no message came from the computer for one second, it releases them. Opening the serial port of an Uno restarts it, which takes a few seconds; that is also what Reconnect on its device card does.
With PlatformIO and a checkout of the repository – the simplest way for every board:
pip install platformio
pio run -d firmware/arduino -e uno -t upload # one board, flashed over USBUse the environment of your board from the table (nano, megaatmega2560, uno_r4_minima,
esp32dev, esp32-s3). PlatformIO uses the board's own bootloader; an ESP32 may need its BOOT
button held while the upload starts.
Without PlatformIO, an AVR board can be flashed with the image from
openSciLab-firmware-arduino.zip and avrdude (replace the port):
avrdude -p atmega328p -c arduino -P /dev/ttyACM0 -b 115200 -D -U flash:w:openSciLab_uno.hex:i # Uno, Nano
avrdude -p atmega2560 -c wiring -P /dev/ttyACM0 -b 115200 -D -U flash:w:openSciLab_megaatmega2560.hex:iFor the Uno R4 Minima and the ESP32 boards use PlatformIO.
The Rigol DHO900 oscilloscopes run Android. The openSciLab bridge app on the instrument speeds up large captures (an overview first, the details tile by tile), keeps captures in a cache (the Cache tab of the device card) and announces the instrument in the network. Without it openSciLab reads the instrument directly, more slowly. Switch on adb on the instrument, then install the app from the computer:
adb connect <scope-ip> # add :<port> if the adb port of your instrument differs
adb install -r openSciLab-bridge.apkThen open openSciLab Bridge on the instrument and press Start. Details are in firmware/bridge-android/README.md. The bridge app has not been tried on an instrument yet.
Everything is described in firmware/README.md. In short:
| Firmware | Tools |
|---|---|
| Pico | Pico SDK 2.1.1, ARM GNU toolchain 14.2, CMake and Ninja – the Raspberry Pi Pico extension of VS Code installs them in ~/.pico-sdk
|
| Arduino | PlatformIO (pip install platformio) |
| Bridge app | JDK 17 and the Android command line tools |
The dev container of the repository (.devcontainer/) has all of them.
firmware/build_all.sh # everything
firmware/build_all.sh --pico # every Pico board and Turbo variant -> firmware/uf2/
firmware/build_all.sh BOARD_PICO BOARD_PICO_2 # selected Pico boards
firmware/build_all.sh --arduino # the Arduino images -> firmware/arduino-images/
firmware/build_all.sh --bridge # the bridge app -> firmware/apk/openSciLab run from the source checkout finds the Pico images in firmware/uf2/ by itself. On
Windows, firmware/pico/publish.ps1 builds the Pico images.
openSciLab · 0.1 beta
Instruments
Logic analyzer
The lab
More