μLA: Micro Logic Analyzer for RP2040

Overview

μLA: Micro Logic Analyzer

SUMP/OLS compatible logic analyzer firmware for RP2040 based boards.

Features

  • 16 channels
  • 100 MHz sampling rate, 1 sample per sys tick
  • 200 KB sample memory
  • Fast triggers using PIO
  • Input channels mapped to GPIO 0-15

Supported hardware

  • Raspberry Pi Pico
  • RP2040-Zero
  • Virtually all RP2040 based boards with USB connection and GPIO 0-15 available
  • Bring your own RP2040 hardware with proper frontend and protection

Installation

  1. Download latest firmware build from Releases page
  2. Hold the BOOTSEL button while connecting your board to the computer
  3. Copy firmware file downloaded earlier to the RPi-RP2 disk
  4. Use PulseView of SigrokCli to connect to probe
  5. Enjoy

Client software

PulseView

PulseView is a Qt based logic analyzer GUI for sigrok.

Select Openbench Logic Sniffer & SUMP compatible protocol when connecting to μLA.

Protocol selection Connect window
uLA: Micro Logic Analyzer uLA: Micro Logic Analyzer

SigrokCli

SigrokCli is a command-line frontend for sigrok.

Scan for devices

$ sigrok-cli -d ols:conn=/dev/tty.usbmodem_ula_1 --scan

  The following devices were found:
  ols - uLA: Micro Logic Analyzer with 16 channels: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Sample two 10 MHz square waves with 90° phase shift

$ sigrok-cli -d ols:conn=/dev/tty.usbmodem_ula_1 
    -O ascii:charset='_`\/'
    --config samplerate=100m
    --samples 70

  libsigrok 0.5.2
  Acquisition with 16/16 channels at 100 MHz
  0:``\____/`````\___/`````\___/`````\___/`````\___/`````\___/`````\___/``
  1:____/`````\____/````\____/````\____/````\____/````\____/````\____/````
  2:______________________________________________________________________

Building firmware

  1. Install rustup by following the instructions at https://rustup.rs
  2. Install Cortex-M0, M0+, and M1 (ARMv6-M architecture) target: rustup target add thumbv6m-none-eabi
  3. Install LLVM tools: rustup component add llvm-tools-preview
  4. Install cargo-binutils: cargo install cargo-binutils (Note: on some Linux distros (e.g. Ubuntu) you may need to install the packages build-essential, gcc-arm-none-eabi, libssl-dev and pkg-config prior to installing cargo-binutils)
  5. Install elf2uf2: cargo install elf2uf2-rs
  6. Clone this repo: git clone [email protected]:dotcypress/ula.git && cd ula
  7. Hold the BOOTSEL button while connecting your board to the computer
  8. Flash microcontroller: cargo run --release

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

You might also like...
RTIC monotonic implementation using the RP2040's Timer peripheral

rp2040-monotonic RTIC monotonic implementation using the RP2040's Timer peripheral. Documentation License Licensed under either of Apache License, Ver

Code for connecting an RP2040 to a Bosch BNO055 IMU and having the realtime orientation data be sent to the host machine via serial USB

Code for connecting an RP2040 (via Raspberry Pi Pico) to a Bosch BNO055 IMU (via an Adafruit breakout board) and having the realtime orientation data be sent to the host machine via serial USB.

Shows how to implement USB device on RP2040 in Rust, in a single file, with no hidden parts.

Rust RP2040 USB Device Example This is a worked example of implementing a USB device on the RP2040 microcontroller, in Rust. It is designed to be easy

An RP2040-based ROM emulator
An RP2040-based ROM emulator

PicoROM PicoROM is an 8-bit ROM emulator in a DIP-32 compatible form factor. It's main use case (the reason I made it) is for rapid iteration when exp

A µTP (Micro/uTorrent Transport Library) library implemented in Rust

rust-utp A Micro Transport Protocol library implemented in Rust. API documentation Overview The Micro Transport Protocol is a reliable transport proto

REST-like API micro-framework for Rust. Works with Iron.

Table of Contents What is Rustless? Usage warning Basic Usage Complex example Mounting Parameters validation and coercion Use JSON Schema Query string

Sincere is a micro web framework for Rust(stable) based on hyper and multithreading

The project is no longer maintained! Sincere Sincere is a micro web framework for Rust(stable) based on hyper and multithreading. Style like koa. The

A micro-benchmark framework to use with cargo bench
A micro-benchmark framework to use with cargo bench

Glassbench is a micro-benchmark library with memory, to use with cargo bench. Why Run benchmarks and get a comparison with the previous execution carg

A small utility to compare Rust micro-benchmarks.
A small utility to compare Rust micro-benchmarks.

cargo benchcmp A small utility for comparing micro-benchmarks produced by cargo bench. The utility takes as input two sets of micro-benchmarks (one "o

This repo contains crates that are used to create the micro services and keep shared code in a common place.

MyEmma Helper Crates This repo contains crates that can are reused over different services. These crate are used in projects at MyEmma. But these crat

Wena is a micro-framework that provides an elegant starting point for your console application.
Wena is a micro-framework that provides an elegant starting point for your console application.

Wena was created by Nuno Maduro, and is a Rust Lang micro-framework that provides an elegant starting point for your console application. This project

A micro crate that simplifies a bit the use of the std macro thread_local!.

with-thread-local A micro crate that simplifies a bit the use of the std macro thread_local!. extern crate regex; use with_thread_local::with_thread_

Android / iOS app with shared Rust logic
Android / iOS app with shared Rust logic

Rust core for native Android and iOS apps [TODO iOS badge] This is an example that shows how to use a shared Rust core in native Android and iOS apps.

A library in Rust for theorem proving with Intuitionistic Propositional Logic.

Prop Propositional logic with types in Rust. A library in Rust for theorem proving with Intuitionistic Propositional Logic. Supports theorem proving i

The module graph logic for Deno CLI

deno_graph The module graph/dependency logic for the Deno CLI. This repository is a Rust crate which provides the foundational code to be able to buil

Logimu: Circuit & logic gate simulator
Logimu: Circuit & logic gate simulator

Logimu: Circuit & logic gate simulator The main goal of Logimu is to simulate large circuits at a high speed. Features Live simulation Embed other cir

Soufflé is a variant of Datalog for tool designers crafting analyses in Horn clauses. Soufflé synthesizes a native parallel C++ program from a logic specification.

Welcome! This is the official repository for the Soufflé language project. The Soufflé language is similar to Datalog (but has terms known as records)

Compiler for an "extended" version of the Mindustry logic language

Minblur Compiler Minblur is a compiler for a superset of "logic" programming language in the game Mindustry. It helps reduce code-duplication, making

Android / iOS app with shared Rust logic

Rust core for native Android and iOS apps [TODO iOS badge] This is an example that shows how to use a shared Rust core in native Android and iOS apps.

Comments
  • I couldn't make it work on macOS.

    I couldn't make it work on macOS.

    Hi, first of all, thank you for making this project, and thank you for making it publicly available for everyone.

    I tried to use it but couldn't make it work. I'm probably missing something. I hope you can guide me. Here are the steps,

    I used these files, binary file : https://github.com/dotcypress/ula/releases/download/0.0.1/ula_0.0.1.uf2 PulseView: https://sigrok.org/download/binary/pulseview/PulseView-0.4.2.dmg

    (This one is 24 bytes; definitely, the link is broken. https://sigrok.org/download/binary/pulseview/PulseView-NIGHTLY.dmg) (file content is <h1>404: Not Found</h1>) : )

    I'm using macOS ventura 13.2.1

    • I copied the binary to the Raspberry Pi Pico.
    • Then checked if serial port is there,
    $ ls /dev/tty.usb*
    /dev/tty.usbmodem_ula_1
    
    • Then opened the PulseView connect to device page, and selected device below
    Screenshot 2023-04-14 at 19 16 47
    • I don't know how to select the device. Since it's not on the list.
    Screenshot 2023-04-14 at 19 24 59

    Which PulseView version did you test on macOS?

    Thanks in advance.

    opened by MrGreensWorkshop 4
  • Suggest using /dev/serial/by-id

    Suggest using /dev/serial/by-id

    I'm not sure you want to merge this, because I don't know if /dev/serial/by-id is a POSIX or a linux path; maybe this fix only helps linux users?

    Either way, the example in the README did not work for me, because the device TTY ends up at /dev/ttyACM0 on my machine.

    The command below resolves the device via the /dev/serial filesystem tree.

    Thanks for building a cool tool!

    documentation 
    opened by jakewins 1
Releases(0.0.2)
Owner
Vitaly Domnikov
🇺🇦🇺🇸 OSS Advocate, console.log Expert.
Vitaly Domnikov
Code for connecting an RP2040 to a Bosch BNO055 IMU and having the realtime orientation data be sent to the host machine via serial USB

Code for connecting an RP2040 (via Raspberry Pi Pico) to a Bosch BNO055 IMU (via an Adafruit breakout board) and having the realtime orientation data be sent to the host machine via serial USB.

Gerald Nash 3 Nov 4, 2022
A library in Rust for theorem proving with Intuitionistic Propositional Logic.

Prop Propositional logic with types in Rust. A library in Rust for theorem proving with Intuitionistic Propositional Logic. Supports theorem proving i

AdvancedResearch 48 Jan 3, 2023
Logimu: Circuit & logic gate simulator

Logimu: Circuit & logic gate simulator The main goal of Logimu is to simulate large circuits at a high speed. Features Live simulation Embed other cir

David Hoppenbrouwers 4 Nov 20, 2022
Soufflé is a variant of Datalog for tool designers crafting analyses in Horn clauses. Soufflé synthesizes a native parallel C++ program from a logic specification.

Welcome! This is the official repository for the Soufflé language project. The Soufflé language is similar to Datalog (but has terms known as records)

The Soufflé Project 672 Dec 29, 2022
A Rust library that implements the main lightning logic of the lipa wallet app.

lipa-lightning-lib (3L) Warning This library is not production ready yet. Build Test Start Nigiri Bitcoin: nigiri start --ln The --ln flag is not stri

lipa 9 Dec 15, 2022
Propositional logic evaluator and rule-based pattern matcher

Plogic Propositional logic evaluator and pattern transformer written in Rust. Plogic evaluates logic expressions in a REPL (Read, Execute, Print, Loop

Jan 17 Nov 25, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
Multiplex server for rust-analyzer, allows multiple LSP clients (editor windows) to share a single rust-analyzer instance per cargo workspace

ra-multiplex   Multiplex server for rust-analyzer, allows multiple LSP clients (editor windows) to share a single rust-analyzer instance per cargo wor

max 95 Dec 29, 2022
A Rust PAC for the RP2040 Microcontroller

rp2040-pac - PAC for Raspberry Pi RP2040 microcontrollers This is a Peripheral Access Crate for the Raspberry Pi RP2040 dual-core Cortex-M0+ microcont

rp-rs 120 Nov 23, 2022
A basic rp2040-hal project with blinky and rtt logging example code.

A basic rp2040-hal project with blinky and rtt logging example code. With this you can quickly get started on a new rp2040 project

rp-rs 202 Jan 6, 2023