Overview
The Arduino UNO Q pairs a
Qualcomm QRB2210 (Snapdragon 215 running Linux) with an STM32U585OI
(Cortex-M33). The QRB2210’s GPIOs reach the STM32’s SWD pins through
on-board level shifters, which the
linuxgpiod
driver can drive directly.
Pin map
| Signal | gpiochip | Line |
|---|---|---|
| SWCLK | gpiochip1 |
26 |
| SWDIO | gpiochip1 |
25 |
| SRST | gpiochip1 |
38 |
Selector for all probe-rs commands:
0:0:gpiochip1,swclk=26,swdio=25,srst=38Chip description (one-time)
probe-rs doesn’t currently bundle the STM32U5 family. Generate a YAML
description from STMicroelectronics’ CMSIS pack with target-gen:
$ curl -sSL -o pack.pack \ https://www.keil.com/pack/Keil.STM32U5xx_DFP.3.2.0.pack$ target-gen pack pack.pack ./u5-targets/Pass the resulting STM32U5_Series.yaml via --chip-description-path;
use the full STM package code as the chip name (STM32U585OIYxQ for the
UNO Q):
$ probe-rs info \ --probe '0:0:gpiochip1,swclk=26,swdio=25,srst=38' \ --chip STM32U585OIYxQ \ --chip-description-path ./u5-targets/STM32U5_Series.yamlAuto-boot quirk
Stock UNO Q boards ship with the STM32U585’s NSBOOTADD1R option byte set
to 0x0BF90000, so reset lands in the chip’s ROM bootloader rather than
user flash. probe-rs flashes user firmware correctly, but the chip won’t
auto-boot it on reset until NSBOOTADD1R is repointed at 0x08000000.
This is a one-time per-board option-byte change; use any STM32 option-byte
programming tool.
Flashing and running firmware
$ sudo probe-rs run \ --probe '0:0:gpiochip1,swclk=26,swdio=25,srst=38' \ --chip STM32U585OIYxQ \ --chip-description-path ./u5-targets/STM32U5_Series.yaml \ firmware.elf Erasing ✔ [00:00:01] [#####] 16.00 KiB / 16.00 KiB Programming ✔ [00:00:02] [#####] 11.51 KiB / 11.51 KiB Finished in 4.7s[INFO ] firmware bootedprobe-rs streams defmt log output over RTT until ^C.