• v0.1.0 08b8c26fdf

    v0.1.0 Stable

    Pcsf released this 2026-11-02 19:01:44 +01:00 | 2 commits to main since this release

    Summary

    First release of an Arduino UNO Q app that reads an array of 32-bit words from a
    CSV file and sends the whole array to an FPGA over SPI, 5000 times per second at
    10 MHz, from power-on and for as long as the app runs.

    What it does

    • Linux side (Python): parses data.csv (decimal, 0x hex, 0b binary,
      negative values as two's complement, # comments), loads the words into the
      MCU over the Bridge, checks the word count and the first and last words, starts
      the stream and logs the measured rate.
    • MCU side (STM32U585 sketch): drives SPI2 through its registers on D10 (CS),
      D11 (MOSI), D12 (MISO), D13 (SCK): Mode 0, MSB first, 10 MHz, SCK continuous
      within a burst, SCK and MOSI held low between bursts. A cooperative thread paces
      the bursts to fixed deadlines. The green element of RGB LED 3 blinks while the
      app runs, and the stream stops about 3 s after the app does.
    • install.sh: installs the app on the board, makes it the default app (it
      starts at every power-up), starts it and waits for the stream report.
      --with-ap also turns on the ssh server and a fallback Wi-Fi access point,
      unoq-setup, so the board stays reachable where it knows no network.
    • Offline install: the four Arduino libraries the build needs are bundled, so
      the board needs no internet.

    Install

    On a board that has been through Arduino App Lab's first-time setup:

    adb push unoq-fpga-spi-v0.1.0.zip /home/arduino/
    adb shell
    cd ~ && unzip -o unoq-fpga-spi-v0.1.0.zip && unoq-fpga-spi/install.sh
    

    Wiring, the payload format and the access point are described in the zip's
    README.org; pin locations are in docs/wiring.org.

    Known limitations

    • Verified on one board, with arduino-app-cli 0.6.6 and the Arduino Zephyr core
      0.51.0. A board with other versions gets a warning from install.sh; the
      register-level SPI and the D11 fix are untested there.
    • Not yet seen on a scope or by an FPGA: the SCK waveform, the CS timing around a
      burst, and an FPGA receiving the array.
    • In the first second or two after a start, some periods can be missed; none
      afterwards.
    • At 5000 bursts/s the array can hold about 60 words; longer arrays need a lower
      RATE_HZ (the app refuses a rate it cannot meet and says why).
    • Works around two issues of core 0.51.0: the PWM setup of D11 takes the pin away
      from SPI MOSI, and Zephyr's SPI driver leaves ~2.4 us after every byte.

    Verified on

    Arduino UNO Q (ABX00162), Debian 13, arduino-app-cli 0.6.6, Arduino Zephyr core
    0.51.0, Python runtime image python-apps-base 0.5.0.

    • Loopback (D11 jumpered to D12): the example payload and 1008 random and edge
      words over three bursts, 0 byte errors.
    • Stream: 4988 bursts/s on the Linux clock, 0 missed periods; one 36-word burst
      takes 119 us.
    • The app starts by itself after a power cycle.
    • Install from this zip with Wi-Fi off and an empty library cache.

    Assets

    File Purpose
    unoq-fpga-spi-v0.1.0.zip everything for the board: app, install.sh, bundled libraries, docs
    SHA256SUMS checksum of the zip

    Verify the download with sha256sum -c SHA256SUMS.

    Downloads