R4

Arduino UNO R4 Minima

cycle-driven RA4M1 emulator · Rust + WebAssembly

R7FA4M1AB3CFM Cortex-M4F @ 48MHz 217 proofs green ~312 KB wasm
Board paused
UNO R4 MINIMA · RA4M1 LED · D13 TX RX RA4M1 48 MHz
0
-
none
-
GPIO · live PORT output

Real Serial sketch over emulated USBFS: the page plays virtual host (attach → reset → descriptors → line coding → DTR), then Serial.println("hello") lands here. Afterwards the bus idles into suspend (LED on) and resumes on activity (LED off) — the suspend/resume verdict.

      Echo sketch: bytes you send travel host → bulk-OUT → Serial.read → Serial.write → bulk-IN → back here. Pipes are discovered from PIPECFG like a real host.

      Wire master (IIC1) vs a bare-metal slave (IIC0 @ 0x42): the master writes 0xBE, the slave replies 0xEF. Flags below are live MMIO — data registers are never touched (reading one would eat the firmware's byte).

        SPI0 master vs SPI1 slave on one chip: the slave stages 0x5A, the master shifts 0xA5 — both bytes cross in one exchange. Status below is live MMIO.

          Virtual SD card in SPI mode: Arduino SPI runs the real init (CMD0/CMD8/ACMD41), reads block 0 (MBR signature), writes a pattern to block 1 and reads it back. The dump below is read straight off the virtual card afterwards.

            CAN0 self-test loopback into the RX FIFO: mailbox 0 transmits (SID 0x123), the frame lands in the FIFO and is read back through the MB24 port. FIFO reads below never pop — only the firmware's RFPCR write does.

              Arduino EEPROM library on the dataflash window: two bytes go through the real FSP erase/program path and are read back from 0x40100000 itself. The bytes below are live dataflash reads.

                GPT0 PWM at 25% duty on D6 (P106): the pin follows the timer's compare output live — the grid cell blinks and the measured duty is shown. An LED cannot show duty, so the numbers are the verdict.

                  Real ArduinoCore analogWrite(6, 64) on GPT0 (490 Hz, 8-bit): the sketch hits R_GPT_DutyCycleSet, which programs the GTCCRD buffer with GTBER transfer — the live GTPR/GTCCRB/GTIOR below are the verdict (bare-metal duty waveform is measured in the PWM tab).

                    Real ArduinoCore analogWave.sine(10): an FspTimer PERIODIC overflow drives R_DTC repeat transfers of 24 sine samples into DAC12 DADR — the live DADR readout below is the verdict (the sine value, not a pin).

                      Real ArduinoCore analogRead(A0) (ADC ch9, 14-bit) → analogWrite(DAC, v >> 2) (DAC12, 12-bit) + D13 threshold at v > 100. Drag the slider mid-run — the firmware re-samples every delay(50) loop, no reboot needed. ADDR9 / DADR0 / LED below are the verdict.

                        Real ArduinoCore tone(LED_BUILTIN, 440): an FspTimer in PERIODIC mode toggles D13 from its overflow IRQ. The LED and grid cell follow live — the toggle is the verdict.

                          Real ArduinoCore SoftwareSerial loopback at 9600 baud: TX on D3 (P104) is wired on-page to RX on D2 (P105, IRQ0); GPT4/GPT5 timers plus DMAC0/DMAC1 move one PCNTR sample per half-bit. The sketch sends 0xA5 and prints got=A5 on Serial1 — the terminal below shows it.

                            Real ArduinoCore RTC.setAlarmCallback (seconds-match at :00): the sketch sets 11:59:55 and the alarm callback lights D13 when the match crosses. The register verdict is edge-latched — one IRQ per :00 crossing, not a level re-fire.

                              CAN bus-off recovery on the real Arduino_CAN stack: the sketch transmits in a loop and checks isError(). The page injects a TX error storm (TEC saturates, BOEF latches), recovers via halt→operation (counters reset, TX completes again). The LED is the verdict.

                                Four small bare-metal proofs with no Arduino consumer, each ending on the LED: CAN1 polled self-test loopback (no ELC events on CAN1), DAC8 retain + DAM gate, KINT key-3 press via the virtual key jig, SSI0 TX-drain/RX-pattern round-trip. One runner, four verdicts.

                                  Real-time clock on real FSP: the sketch sets 11:59:58 and the core ticks seconds. The clock below is read live from the BCD counters — watch it roll over to 12:00.

                                  --:--:--

                                    Capacitive touch in mutual mode (RX ch5 / TX ch3): trigger, read the sensor + reference counters live, compare against the deterministic default. No touch hardware needed.

                                      USB HID keyboard through real TinyUSB: enumerate (CDC+HID), read the boot-keyboard report descriptor, send SET_IDLE — then the sketch's 'a' key report arrives on the interrupt pipe and the key shows below.

                                        -

                                        Watchdog on the real ArduinoCore WDT library: one sketch refreshes every 10 ms forever (no reset may latch), the other starts the watchdog and never refreshes (reset must latch). The model flag below is the verdict.

                                          Interrupt and analog signal chain on real Arduino APIs: press the virtual button (IRQ0 falling edge lights D13 via attachInterrupt), ping Serial1 (SCI2 loopback), and watch the OPAMP follower and ADC readings live.

                                            Engine room: six proofs that never need the Serial monitor. Each boots its real firmware and reads the verdict off the virtual wire or pins — CAN loopback, CAN errors, DTC-driven DAC samples, Wire EEPROM, SPI loopback, and USB suspend/resume callbacks.

                                              12×8 LED matrix, charlieplexed on real GPIO (the same 11 pins as hardware): the bare-metal sketch multiplexes a smiley faster than the eye, and the Arduino-lib sketch multiplexes the big heart (WiFi-fqbn build, same RA4M1 silicon — matrix pins D28–D38 exist only in the WiFi g_pin_cfg). The grid below accumulates lit LEDs with persistence — like vision does. No panel on Minima; the pattern is the verdict.

                                                Bare-metal EK-RA4M1 target (R7FA4M1AB3CFP, same RA4M1 silicon as Minima in a 100-pin LQFP): no Arduino bootloader — flash boots at 0x00000000 — and the user LED1 is on P106 (EK manual §5.4.4), not Minima's P111/D13. This runs the zero-boot P106 proof live; flip the Board selector above to EK-RA4M1 to watch LED1 follow PORT1.6 on the grid.

                                                  The full coverage table now lives on its own page so it can be read properly. Open the Docs page for every peripheral, the proof inventory, and how to build and test.

                                                  FeatureMinima HWStatusProof / note
                                                  GPT PWM outputyes (D3/D5/D6/D9/D10/D11)DoneGTIO function 0 via PFS; 25% duty on D6; PWM tab
                                                  AnalogWave sine (GPT→DTC→DAC)yesDoneanalogWave.sine(10), 24 samples into DADR; AnalogWave tab
                                                  DMAC memcopy / DTC repeatyesDonesync path; GPT->DAC proof + AnalogWave sine tab
                                                  USBFS CDC serialyes (native USB)Doneenumerate / hello / echo; Serial + Echo tabs

                                                  Read the whole table on the Docs page — this tab keeps only a short pointer.