Arduino Due

ArduinoMCU 32-bitarduino

⚡ The essentials in 60 seconds

The Arduino Due, released in October 2012, marks a significant turning point in the history of maker electronics as the first board in the Arduino ecosystem to move beyond the familiar 8-bit architecture. By adopting a 32-bit ARM Cortex-M3 microcontroller, specifically the AT91SAM3X8E, the Due offered a dramatic leap in processing power and memory capacity compared to its predecessors. At the heart of this board is a single-core processor running at 84 MHz, a frequency that dictates how many instruction cycles the chip can execute per second. For context, this is roughly three times the speed of the classic Arduino Uno, but the real advantage lies in the architecture itself, which allows for more complex mathematical operations and faster data handling. This increased capability is supported by substantial memory resources: 512 KB of flash storage for your program code and 96 KB of SRAM for temporary data. To put this in perspective, the Due offers approximately thirty times the flash memory and twelve times the RAM of the standard Uno, making it suitable for projects that require large data buffers, complex algorithms, or extensive libraries that would simply not fit on smaller boards.

Despite its power, the Due is a bare-metal microcontroller board, meaning it does not include an operating system, Wi-Fi, Bluetooth, or Ethernet capabilities. It is designed to run code directly on the hardware, relying on external modules or shields if network connectivity or graphics processing is required. One of the most critical aspects for users to understand is the voltage logic. Unlike the majority of Arduino boards that operate at 5 volts, the Due runs at 3.3 volts. This is not merely a specification but a strict operational limit; applying 5 volts to any of the input/output pins can permanently damage the board. While the physical pin layout follows the standard Arduino shield compatibility, users must be cautious when connecting older 5-volt peripherals, often requiring level-shifting circuits to ensure safe communication. Furthermore, the current drive capability per pin is significantly lower than on AVR-based boards, providing only 3 to 9 milliamps per pin depending on the group, with a total limit of 130 milliamps across all lines. This means that driving LEDs, relays, or motors directly from the pins is often insufficient, and external driver circuits are frequently necessary.

The input and output capabilities of the Due are extensive, featuring 54 digital I/O pins and 12 analog inputs. A standout feature is the analog-to-digital converter (ADC), which offers 12-bit resolution. In simpler terms, this means the board can distinguish between 4,096 different voltage levels, whereas the standard Uno can only distinguish between 1,024 levels. This higher precision is invaluable for sensors requiring fine detail, though it is important to note that the default software settings often mimic the 10-bit resolution of older boards for compatibility, requiring a specific command to unlock the full 12-bit potential. Complementing the high-resolution inputs are two true 12-bit digital-to-analog converter (DAC) outputs. This is a unique feature in the classic Arduino lineup, allowing the board to generate smooth, continuous analog voltages rather than just the rapid on-off pulses used by PWM on other models. This makes the Due particularly well-suited for audio synthesis, precise control signals, or generating custom waveforms without the need for external filtering components.

Communication options are equally robust, with four hardware serial ports (UARTs) available, allowing the board to communicate with multiple devices like GPS modules, Bluetooth radios, or other microcontrollers simultaneously without relying on software emulation. Additionally, the Due features two CAN controllers. CAN, or Controller Area Network, is a robust vehicle bus standard designed to allow microcontrollers and devices to communicate with each other in applications without a host computer. While the silicon supports this, the board itself does not include the physical transceivers needed to connect to a CAN bus, so users must add an external transceiver module to interface with automotive or industrial networks. The board also includes two I2C interfaces and one SPI interface, providing ample options for connecting sensors, displays, and other peripherals.

The Due’s connectivity is further enhanced by its dual-USB architecture. It features a micro-USB connector for programming, which uses an ATmega16U2 chip to bridge the serial connection, and a second native USB port driven directly by the main processor. This native port supports USB On-The-Go (OTG) functionality, meaning the Due can act as a USB host. This allows it to read data from devices like keyboards, mice, or USB flash drives, a capability that opens up new possibilities for interactive installations and data logging. The board also includes a JTAG header for advanced debugging and an erase button, which is necessary because the flash memory must be erased before reprogramming if the bootloader state is lost.

Physically, the Due maintains the larger form factor of the Arduino Mega, measuring 101.5 by 53.3 millimeters, but it is notably lighter at 36 grams. It is powered via USB or a barrel jack accepting 7 to 12 volts. While the official launch price is not definitively recorded in current accessible sources, the board remains available for purchase, reflecting its enduring relevance. However, users should be aware of some ecosystem considerations. The SAM3X platform is in maintenance mode, and modern alternative runtimes like MicroPython or CircuitPython do not support it. Additionally, the board has no EEPROM for persistent storage, requiring users to write to flash memory or use external chips to save data when power is removed. Despite these limitations, the Arduino Due remains a powerful tool for advanced projects requiring high-speed processing, precise analog control, and complex communication protocols, serving as a bridge between simple hobbyist electronics and more professional embedded systems.

Forum (1 topic) →

AttrSpecsverified
mcuMicrochip (ex-Atmel) AT91SAM3X8E (a.k.a. SAM3X8E), single-core ARM Cortex-M3, 84 MHz (official tech-specs; build.f_cpu=84000000L in boards.txt). Board main oscillator: 12 MHz (VARIANT_MAINOSC in variant.h). The chip datasheet is the Atmel 11057 SAM3X/SAM3A combined datasheet (PDF) (the link used by the store page).✔
gpu_radios_storagenone — bare-metal MCU board. No WiFi/BT/Ethernet, no filesystem; network or graphics need external modules/shields (board page).✔
memory512 KB flash, 96 KB SRAM, 0 KB EEPROM (official tech-specs, Wikipedia). Sketch space per the core: upload.maximum_size=524288 bytes (boards.txt).✔
digital_i_o54 pins at 3.3 V logic. Official warning: "Unlike most Arduino boards, the Arduino Due board runs at 3.3V. The maximum voltage that the I/O pins can tolerate is 3.3V. Applying voltages higher than 3.3V to any I/O pin could damage the board." (store product JSON).✔
per_pin_drive_current_much_lower_than_avr_boards9 mA (group 1) / 3 mA (group 2) per I/O pin, and 130 mA total across all I/O lines (official tech-specs).✔
pwm12 pins (digital 2–13; PWM peripheral channels + TC channels per variant.cpp). Default analogWrite is 8-bit at 1 kHz (PWM_RESOLUTION 8, PWM_FREQUENCY 1000 in variant.h); resolution/frequency are software-configurable via analogWriteResolution (wiring_analog.c).✔
analog_in12 inputs, hardware 12-bit ADC (ADC_RESOLUTION 12 in variant.h) — but analogRead defaults to 10-bit output for AVR compatibility (static int _readResolution = 10; in wiring_analog.c); use analogReadResolution(12) to get full resolution.✔
analog_out2 true DAC outputs (12-bit DACC, DACC_RESOLUTION 12 in variant.h) on pins DAC0 = digital pin 66 (PB15) and DAC1 = 67 (PB16) (variant.cpp pin table); driven through analogWrite (wiring_analog.c).✔
serial4 hardware UART/USARTs — Serial = SAM3X UART on pins 0/1 (PA8/PA9), wired to the Programming Port (ATmega16U2 bridge); Serial1 = USART0 on 18/19; Serial2 = USART1 on 16/17; Serial3 = USART3 on 14/15 (variant.cpp, variant.h). Plus SerialUSB, the CDC-ACM virtual port on the native USB (variant.h SERIAL_PORT_USBVIRTUAL).✔
i_c2 TWI controllers. Wire = TWI1 on pins 20 (SDA) / 21 (SCL) (near AREF, R3-style header); Wire1 = TWI0 on pins 70/71 (PA17/PA18), the 4-pin header near RESET (variant.h Wire Interfaces block). Note the inverted numbering: Wire→TWI1, Wire1→TWI0.✔
spiSPI0 — MISO=74 (PA25), MOSI=75 (PA26), SCK=76 (PA27), hardware NPCS0/1/2 on pins 10/4/52 (NPCS3 pin 78 is unconnected) (variant.h, variant.cpp).✔
can2 CAN controllers in the silicon; official spec: "CAN: Yes (ext. transceiver needed)" — the board has no CAN transceivers (official tech-specs, board page "CAN support"). CAN0 signals are defined in the core as pins 68/69 (CANRX0/CANTX0 = PA1/PA0) and CAN1 as 88/89 (variant.h).✔
usbMicro-USB connector for the Programming Port (16U2 serial bridge) plus a second native USB OTG port driven by the SAM3X itself (official tech-specs, board page). USB IDs: Programming Port 0x2341/0x2A03 : 0x003D, Native 0x2341/0x2A03 : 0x003E (boards.txt). Wikipedia's board table summarizes the host interface as "16U2 + native" (Wikipedia).✔
debugJTAG header on board; reset and erase buttons (features.md).✔
powerUSB or barrel-plug jack (the official feature list even suggests a 9 V battery on the barrel plug); input voltage (nominal) 7–12 V, I/O voltage 3.3 V (official tech-specs, features.md).✔
size_weight101.5 × 53.3 mm (Mega form factor footprint), 36 g (official tech-specs; Wikipedia lists 101.6 × 53.3 mm).✔
  • Manufacturer: Arduino (arduino.cc / Arduino AG). Board page and store listing are official Arduino properties (board page, store product JSON).
  • Year: Released October 22, 2012 (Wikipedia — List of Arduino boards and compatible systems). It was the first Arduino board based on a 32-bit ARM core microcontroller (board page).
  • Status: Active — still listed on the official store at €52.50 (SKU A000062, product JSON fetched live; the rendered page's price block does not expose the price to scrapers) (store product JSON), and Microchip lists the ATSAM3X8E MCU as "Status: In Production" (Microchip product page).
  • Launch price:
  • Variants: - SKU A000062 (current, headers soldered) and legacy SKU A000056 — both listed in the official product metadata (docs-content product.md). - Arduino Due without headers — same board sold with unsoldered pin headers (store link referenced in the product description). - Sold as "Genuino Due" outside the US during the 2015–2016 trademark split; the Genuino brand was later dropped (Wikipedia — Arduino). The core still carries the Genuino USB VID 0x2A03 alongside Arduino's 0x2341 (boards.txt). - A large market of third-party clones exists; the official core and firmware work on them, but component quality varies (see Problems).

+ Strengths

  • First 32-bit Arduino: Cortex-M3 at 84 MHz with 512 KB flash / 96 KB SRAM — roughly 30× the flash and 12× the SRAM of the Uno's ATmega328P (board page, official tech-specs).
  • Two true 12-bit DAC outputs (DAC0/DAC1) — still unique in the classic Arduino line-up; the Uno/Mega have none (board page, variant.h).
  • 12-bit ADC (vs 10-bit on AVR boards), usable end-to-end with analogReadResolution(12) (variant.h, wiring_analog.c).
  • Two CAN controllers on-chip (external transceiver required) — the classic way to put an Arduino on a car/industrial CAN bus (official tech-specs, due_can library).
  • USB host capability: the native port is OTG-capable; the official feature list advertises "Use the Due as USB host for peripherals such as mice", with an official keyboard-host tutorial and the USBHost library (features.md, USBHost library).
  • Dual-USB architecture: a "safe" Programming Port (16U2 bridge, always recoverable) plus a Native port that can present any USB device class via the core/USBHost stack (boards.txt).
  • Mega-class I/O count in a slimmer footprint: 54 digital + 12 analog + 2 DAC + 4 UART + 2 TWI + SPI + CAN, following the Arduino 1.0 shield pinout with IOREF for 3.3 V shield adaptation (store product JSON).
  • JTAG header + erase button for low-level recovery and debugging (features.md).
  • Rich timer/PWM silicon: PWM peripheral channels plus 9 TC (timer counter) channels mapped across pins 2–13, enabling higher-rate or phase-accurate PWM beyond the AVR presets (variant.cpp).

− Weaknesses

  • 3.3 V only — not 5 V tolerant. The official product page carries an explicit bold warning that applying >3.3 V to any I/O pin could damage the board; 5 V shields/signals need level shifting even though the shield footprint fits (store product JSON).
  • Weak per-pin drive current. 9 mA / 3 mA per pin group and 130 mA total across all I/O lines — far below the AVR boards' 20–40 mA — so LEDs/relays/solenoids frequently need drivers (official tech-specs).
  • analogRead silently returns 10-bit values even though the ADC is 12-bit (_readResolution = 10 default); many tutorials assume 0–4095 and get 0–1023 until they call analogReadResolution(12) (wiring_analog.c).
  • Native-port CDC quirks. SerialUSB only exists once the USB host has enumerated the CDC class; sketches that block on it with no host attached, or that re-enumerate on reset, are a recurring forum topic (forum topic 1183292 — CDC on native-USB Arduinos).
  • Board invisible on both ports. A classic failure mode: neither the Programming nor the Native port enumerates (bad cable/clone chip/bricked bootloader); recovery goes through the erase button + SAM-BA (forum topic 1161811).
  • Flash must be erased before re-programming. The SAM3X boot code requires a full flash erase when a sketch is already running; the automatic 1200-baud touch handles this, but when the bootloader state is lost you must hold the erase button and re-upload manually (forum topic 1278587).
  • Confusing I²C controller numbering. Wire maps to TWI1 (pins 20/21) while Wire1 maps to TWI0 (the 4-pin header, pins 70/71) — datasheet-level TWI0/TWI1 references do not line up with the Arduino names (variant.h).
  • CAN advertised, transceiver not fitted. The marketing page says "two CAN buses", but the official spec table adds "ext. transceiver needed" — you must add a 3.3 V CAN transceiver (and confirm the signals are reachable on your clone/revision) before anything appears on the wire (official tech-specs vs board page).
  • No EEPROM. 0 KB EEPROM vs 1 KB on the Uno — persisting calibration data needs flash-write tricks or external I²C SPI EEPROM (Wikipedia board table).
  • Aging platform / ecosystem drift. The SAM core is in maintenance mode while Arduino pushes mbed/renesas platforms; MicroPython/CircuitPython never got a SAM3X port, and Mbed (which did support the Due) was sunset in July 2026 (MicroPython ports list, Mbed sunset notice).
  • Retour d'expérience expert expert — expert-arduino
    • Petit retour d'experience sur la Due après plusieurs mois d'utilisation. Les specs sont solides : premier 32-bit avec ses 84 MHz et surtout les deux sorties DAC 12-bit reelles, un vrai plus pour la generation analogique propre. Par contre, attention aux pieges classiques. D'abord le 3.3V exclusif, … — expert-arduino
    • Merci pour ce resumee très clair. Je debute avec la Due pour un projet audio et je confirme le souci du courant faible, j'ai du mettre des transistors pour mes amplis. Par contre, je bloque completement sur la partie USB. Quand je branche le cable en micro-usb, ni le port Programming ni le Native n… — maker-debutant
    • Salut maker-debutant, ne panique pas, c'est un classique. Si les deux ports sont invisibles, c'est souvent un bootloader bloque ou un mauvais cable (certains cables chargeurs ne font pas de data). Essaie deja de maintenir le bouton Erase enfonce pendant que tu branches l'USB, puis relache-le pour v… — bricoleur-75

Community feedback and projects

  • Marlin 3D-printer firmware on Due-based controller boards

    Marlin 3D-printer firmware on Due-based controller boards — Marlin's official board list has a whole "SAM3X8E ARM Cortex-M3 — found in the Arduino Due" family: RAMPS-FD v1/v2, RADDS, DUE3DOM / DUE3DOM Mini, RAMPS4DUE, RAMPS Duo, UltiMachine Archim 1/2, Kratos…

  • Official "Keyboard Controller" USB-host tutorial

    Official "Keyboard Controller" USB-host tutorial — use the Due as a USB host that reads a keyboard and acts on it, built on the USBHost library; linked directly from the official Due feature page (, ). (unverified au 2026-10-13)

  • CAN-bus vehicle/industrial interfaces

    CAN-bus vehicle/industrial interfaces — with the community due_can library ("object oriented canbus library for Arduino Due compatible boards") — e.g. a Mitsubishi Outlander PHEV on-board-charger controller built on Due CAN (, ). (unverified au 2026-10-13) Cu…

  • "Build your own Due" / custom carrier boards

    "Build your own Due" / custom carrier boards — documented project for folding the Due circuitry into a custom PCB . (unverified au 2026-10-13)

  • 3.3 V only — not 5 V tolerant. The official product page carries an explicit bold warning that applying >3.3 V to any I/O pin could damage the board; 5 V shields/signals need level shifting even though the shield footprint fits (store product JSON).
  • Weak per-pin drive current. 9 mA / 3 mA per pin group and 130 mA total across all I/O lines — far below the AVR boards' 20–40 mA — so LEDs/relays/solenoids frequently need drivers (official tech-specs).
  • analogRead silently returns 10-bit values even though the ADC is 12-bit (_readResolution = 10 default); many tutorials assume 0–4095 and get 0–1023 until they call analogReadResolution(12) (wiring_analog.c).
  • Native-port CDC quirks. SerialUSB only exists once the USB host has enumerated the CDC class; sketches that block on it with no host attached, or that re-enumerate on reset, are a recurring forum topic (forum topic 1183292 — CDC on native-USB Arduinos).
  • Board invisible on both ports. A classic failure mode: neither the Programming nor the Native port enumerates (bad cable/clone chip/bricked bootloader); recovery goes through the erase button + SAM-BA (forum topic 1161811).
  • Flash must be erased before re-programming. The SAM3X boot code requires a full flash erase when a sketch is already running; the automatic 1200-baud touch handles this, but when the bootloader state is lost you must hold the erase button and re-upload manually (forum topic 1278587).
  • Confusing I²C controller numbering. Wire maps to TWI1 (pins 20/21) while Wire1 maps to TWI0 (the 4-pin header, pins 70/71) — datasheet-level TWI0/TWI1 references do not line up with the Arduino names (variant.h).
  • CAN advertised, transceiver not fitted. The marketing page says "two CAN buses", but the official spec table adds "ext. transceiver needed" — you must add a 3.3 V CAN transceiver (and confirm the signals are reachable on your clone/revision) before anything appears on the wire (official tech-specs vs board page).
  • No EEPROM. 0 KB EEPROM vs 1 KB on the Uno — persisting calibration data needs flash-write tricks or external I²C SPI EEPROM (Wikipedia board table).
  • Aging platform / ecosystem drift. The SAM core is in maintenance mode while Arduino pushes mbed/renesas platforms; MicroPython/CircuitPython never got a SAM3X port, and Mbed (which did support the Due) was sunset in July 2026 (MicroPython ports list, Mbed sunset notice).

Code library — examples written for this board

  • clignotante.ino Arduino

    The go-to sanity check: the LED on pin 13 blinks at 1 Hz. millis() replaces delay() to keep the loop free. If nothing blinks, suspect the upload or the board selection.

  • bouton-led.ino Arduino

    A button wired to GND lights the LED while pressed. INPUT_PULLUP enables the internal resistor, and the 30 ms window filters the contact's mechanical bounce.

  • dac-onde.ino Arduino

    Unlike AVR Arduinos, the Due has two true 12-bit DAC outputs: the sine wave comes out straight, no filter or PWM. On a scope you see a clean curve centered at 1.65 V.

  • adc-12-bits.ino Arduino

    The Due converts at 12 bits under 3.3 V: four times the steps of an AVR. A 16-sample moving average cleans the noise, and the voltage is returned in volts.

  • pwm-12-bits.ino Arduino

    Due PWM pins 2-13 accept software resolution up to 12 bits: the ramp becomes perfectly continuous, no visible steps. One of the few practical gains of moving AVR → Due.

  • gps-serial1.ino Arduino

    The Due lines up four hardware UARTs: Serial1 (pins 19/18) stays free while USB serves debugging. The filter keeps only the NMEA GGA sentence, the most useful (time, latitude, longitude).

  • pont-usb-serial1.ino Arduino

    Before writing a driver you must see what the module says: this bridge copies everything between UART1 and USB, both ways — so you can also type AT commands. The classic GSM/GPS bring-up tool.

  • servo-balayage.ino Arduino

    The Servo library generates the control pulse (1-2 ms) and sweeps the angle end to end. Feeding a mid-size servo from a dedicated 5 V rail avoids brown-out resets from current spikes.

  • test-can.ino Arduino

    The SAM3X integrates two CAN controllers: with a plain SN65HVD230/TJA1050 transceiver the Due becomes a CAN bus node (automotive, industry). The due_can library hides the registers. Mind the 3.3 V pi…

  • usb-native.ino Arduino

    The Due has two USB connectors: Programming (16U2 bridge) and Native, wired straight to the SAM3X. SerialUSB is a second serial port, and while(!SerialUSB) prevents losing boot messages.

Examples and repos found online