-
v0.1.0 Stable
released this
2026-11-02 19:01:44 +01:00 | 2 commits to main since this releaseSummary
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,0xhex,0bbinary,
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-apalso 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.shWiring, the payload format and the access point are described in the zip's
README.org; pin locations are indocs/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 frominstall.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 imagepython-apps-base0.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.zipeverything for the board: app, install.sh, bundled libraries, docsSHA256SUMSchecksum of the zip Verify the download with
sha256sum -c SHA256SUMS.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Linux side (Python): parses