Arduino UNO Q

Enablement

LAVA by default is configured to work with this DUT + LAA setup. If you opt for a different setup you’ll have to change your DUT + LAA device configuration on LAVA.

The Arduino UNO Q has a Qualcomm QRB2210 running Debian and an STM32U585 microcontroller (Arm Cortex-M33) running Zephyr. The LAA tests Zephyr on the STM32U585. The SWD pins of the STM32U585 are only wired to the QRB2210, so the image goes to the board over adb, and OpenOCD on the QRB2210 writes it.

This document applies to the following boards:

  • Arduino UNO Q (ABX00162): arduino-uno-q

Components

The following components are required to automate the board:

  • Flylead MIB

  • USB-C male to USB-C male cable

  • Three jumper wires for the serial console

Hardware modification

None. The board doesn’t need a reset wire. The LAA resets it by turning the USB power off and on.

Connections

Power

Set the flylead MIB VIO jumper J17 to 3V3.

Connect a USB C-to-C cable from the LAA USB port 1 to the JUSB1 USB-C connector of the board. The board needs 5 V at 3 A, doesn’t have a power button, and boots when it gets power.

laam laacli power 3v3 on
laam laacli usb 1 on

The same cable carries adb to the QRB2210 for the flasher.

Serial

The console is the STM32U585’s USART1 on the JDIGITAL header. Connect it to the J12 (UART 4) connector of the flylead MIB:

J12 pin

Signal

UNO Q pin

2

SIB_UART4_RX

D1 (PB6, USART1_TX)

3

SIB_UART4_TX

D0 (PB7, USART1_RX)

4

GND

GND, next to AREF

Leave J12 pin 1 (Vio) unconnected.

The console is /dev/ttymxc3, on port 2000 at 115200 8N1:

laam serials connect ttymxc3

Software

Flashing

The flasher doesn’t need a tool in the LAA overlay. The deploy steps are in the device dictionary’s flasher_deploy_commands:

  1. Power on the board. Debian boots on the QRB2210.

  2. Copy zephyr.elf to /tmp on the board with adb wait-for-device push, in a linaro/kir container.

  3. Run OpenOCD on the board with adb shell. It uses /opt/openocd/bin/openocd and openocd_gpiod.cfg from the Debian image, and writes and verifies the STM32U585 flash over SWD.

Waiting for Debian adds about 25 seconds to the deploy.

OpenOCD doesn’t reset the STM32U585 after the flash. The boot action connects to the console first and then turns the USB power off and on, so the console shows the Zephyr boot banner from the first byte.

During reset-init, OpenOCD prints Error: Translation from khz to adapter speed not implemented. The GPIO SWD adapter can’t change its speed. The write and the verify still pass, and OpenOCD exits with 0.

Debian image

The flasher needs adb on the QRB2210. The Debian image 20260528-558 has adb on the USB-C connector, and the board shows up as 2341:0078. An older image showing only a USB Ethernet gadget (1d6b:0104) doesn’t have adb. To reflash such board, see Recovery.

Recovery

Recovery isn’t automated

Reflashing Debian on the QRB2210 needs a jumper on the JCTL header, set by hand.

JCTL is the header with 2 rows of 5 pins below the USB-C connector. Its pins use 1.8 V logic. Seen from the top, with the USB-C connector at the top:

VBUS_DISABLE   o o   +1V8 (out)
PMIC_RESET     o o   GND
SOC_SE4_RX     o o   VOL_UP
SOC_SE4_TX     o o   VOL_DOWN
USB_BOOT       o o   GND

A jumper on the bottom row (USB_BOOT to GND) starts the QRB2210 in EDL mode.

Prepare the LAA once:

  • qcserial claims the EDL device as ttyUSB0, so qdl doesn’t get an answer from the board. Unload it with sudo modprobe -r qcserial and blacklist it in /etc/modprobe.d/.

  • qdl needs write access to the USB device node. After each enumeration, run sudo chown torizon /dev/bus/usb/001/<device>.

Reflash the board:

  1. Download qdl v2.4-26 for Linux ARM64 from arduino/qdl-packing.

  2. Download then unpack the Arduino Debian image using tar --zstd -xf.

  3. Turn the power off, put the jumper on the bottom row of JCTL and turn the power on. lsusb shows 05c6:9008. Remove the jumper.

  4. In the flash/ directory of the image, run:

    qdl --allow-missing --storage emmc prog_firehose_ddr.elf rawprogram0.xml patch0.xml
    

arduino-flasher-cli 0.5.4 doesn’t work on the LAA. It runs qdl twice, and the second run opens the old USB device before the board has reset. It fails with failed to read sahara request from device.

Health check

There isn’t a health check yet.