The Arduino Due is Arduino’s classic large-format 32-bit ARM board.
It is based on the:
|
1 2 3 4 5 6 |
Atmel / Microchip SAM3X8E Arm Cortex-M3 84 MHz |
and provides:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
54 dedicated digital I/O 12 analog inputs 12 PWM-capable digital pins 2 true DAC outputs 4 hardware UARTs 2 I2C/TWI buses SPI 2 CAN controllers in the SAM3X8E native USB OTG 512 kB Flash 96 kB SRAM |
The most important electrical warning is:
|
1 2 3 4 5 6 |
Arduino Due is a 3.3 V board. Its I/O pins are NOT 5 V tolerant. |
Applying more than 3.3 V to a Due I/O pin can damage the SAM3X8E.
Quick Pinout Reference
| Function | Pins |
|---|---|
| Dedicated digital GPIO | D0-D53 |
| Analog inputs | A0-A11 |
| Analog pins as digital | D54-D65 |
| PWM | D2-D13 |
| UART0 / Serial | D0 RX, D1 TX |
| Serial1 | D19 RX1, D18 TX1 |
| Serial2 | D17 RX2, D16 TX2 |
| Serial3 | D15 RX3, D14 TX3 |
| I2C / Wire | D20 SDA, D21 SCL |
| I2C / Wire1 | SDA1, SCL1 dedicated header pins |
| SPI | Central 6-pin SPI header |
| DAC | DAC0, DAC1 |
| CAN0 | CANRX, CANTX |
| Native USB | Native USB Micro-B port / SerialUSB |
| Programming USB | Programming Micro-B port via ATmega16U2 |
| Built-in LED | D13 |
| Logic voltage | 3.3 V only |
Main Processor: SAM3X8E
The Due uses the SAM3X8E, a 32-bit Cortex-M3 microcontroller running at:
|
1 2 3 4 |
84 MHz |
This was a major step up from the 8-bit AVR boards that dominated early Arduino hardware.
Compared with an Arduino Mega 2560, the Due provides:
- 32-bit processing;
- far more SRAM;
- 12-bit ADC hardware;
- true DAC outputs;
- native USB;
- CAN;
- higher clock speed.
Memory
The SAM3X8E provides:
|
1 2 3 4 5 |
512 kB Flash 96 kB SRAM |
The SRAM is organised as:
|
1 2 3 4 5 6 |
64 kB + 32 kB |
and the full 512 kB Flash is available to user applications because the bootloader is stored in dedicated ROM rather than consuming normal program Flash.
Digital GPIO: D0-D53
The Due exposes:
|
1 2 3 4 |
D0-D53 |
as dedicated digital header pins.
They can be used with normal Arduino functions:
|
1 2 3 4 5 6 7 8 9 10 |
pinMode(pin, INPUT); pinMode(pin, INPUT_PULLUP); pinMode(pin, OUTPUT); digitalRead(pin); digitalWrite(pin, HIGH); digitalWrite(pin, LOW); |
A0-A11 Also Work as Digital Pins
The current Arduino SAM core maps:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
A0 = D54 A1 = D55 A2 = D56 A3 = D57 A4 = D58 A5 = D59 A6 = D60 A7 = D61 A8 = D62 A9 = D63 A10 = D64 A11 = D65 |
So the core defines:
|
1 2 3 4 |
66 digital pin numbers |
covering:
|
1 2 3 4 5 6 |
D0-D53 + A0-A11 / D54-D65 |
3.3 V Only: The Critical Due Rule
Unlike Arduino Mega 2560 and UNO R3, Due uses:
|
1 2 3 4 |
3.3 V logic |
Arduino explicitly warns that the maximum I/O voltage is:
|
1 2 3 4 |
3.3 V |
Do not connect a 5 V output directly to a Due GPIO.
Typical devices that may require level conversion include:
- 5 V LCD modules;
- older sensors;
- 5 V UART devices;
- legacy Arduino shields;
- 5 V I2C pull-ups.
IOREF Helps Compatible Shields Adapt
The Due follows the Arduino 1.0 shield pinout and provides:
|
1 2 3 4 |
IOREF = 3.3 V |
A correctly designed shield can read IOREF and adapt its logic level accordingly.
But not every older shield does this.
A shield physically fitting the Due does not guarantee electrical compatibility.
GPIO Current Limits
The Due does not have one simple per-pin current figure for every GPIO.
Arduino documents that individual SAM3X pins can typically source either:
|
1 2 3 4 5 6 |
3 mA or 15 mA |
depending on the pin, and sink:
|
1 2 3 4 5 6 |
6 mA or 9 mA |
depending on the pin.
The official board specification lists:
|
1 2 3 4 5 6 |
130 mA maximum total DC output current across all I/O lines |
For LEDs, relays, motors and other meaningful loads, use a transistor, MOSFET or driver IC.
PWM Pins
Arduino documents 12 PWM-capable digital pins:
|
1 2 3 4 |
D2-D13 |
Use:
|
1 2 3 4 |
analogWrite(pin, value); |
By default, Arduino uses 8-bit-style values:
|
1 2 3 4 |
0-255 |
for compatibility with AVR boards.
PWM Resolution Can Be Changed
Due supports:
|
1 2 3 4 |
analogWriteResolution(bits); |
so your sketch can request a different output resolution where the underlying timer/PWM peripheral supports it.
This is a major difference from classic AVR Arduino boards, where analogWrite() is normally fixed around 8-bit PWM behaviour.
PWM Does Not Mean DAC
The Due has both:
|
1 2 3 4 5 6 |
PWM outputs and true DAC outputs |
They are different.
PWM rapidly switches a digital output between HIGH and LOW.
The DAC generates a real analogue voltage level.
Analog Inputs: A0-A11
The Due provides:
|
1 2 3 4 5 |
12 analog inputs A0-A11 |
The SAM3X8E ADC supports:
|
1 2 3 4 5 |
12-bit resolution 4096 levels |
but Arduino defaults analog reads to:
|
1 2 3 4 5 |
10 bits 0-1023 |
for compatibility with older Arduino sketches.
Enable Full 12-Bit ADC Resolution
Use:
|
1 2 3 4 |
analogReadResolution(12); |
then:
|
1 2 3 4 |
analogRead(A0); |
can return:
|
1 2 3 4 |
0-4095 |
ADC Input Range Is 0-3.3 V
The analog pins measure between:
|
1 2 3 4 5 6 |
0 V and 3.3 V |
Applying more than 3.3 V to an analog input can damage the SAM3X8E.
This is especially important when moving a sensor circuit from Mega 2560, where 5 V ADC signals are normal.
AREF Behaviour Is Different from AVR
Arduino notes that:
|
1 2 3 4 |
analogReference() |
is ignored on Due in normal use.
The AREF pin is connected to the SAM3X analogue reference through a resistor bridge.
Using an external analogue reference requires hardware modification rather than the simple AVR-style software selection.
Two True DAC Outputs
The Due provides:
|
1 2 3 4 5 |
DAC0 DAC1 |
with:
|
1 2 3 4 |
12-bit DAC hardware |
Use:
|
1 2 3 4 5 |
analogWriteResolution(12); analogWrite(DAC0, value); |
for up to 4096 software levels.
The DAC Does Not Swing from 0 to 3.3 V
This is an important Due detail.
Arduino documents the practical DAC output range as approximately:
|
1 2 3 4 |
0.55 V to 2.75 V |
not a full:
|
1 2 3 4 |
0-3.3 V |
range.
This matters for:
- waveform generation;
- analogue control;
- audio;
- reference generation.
Four Hardware UARTs
The Due provides four hardware serial ports.
| Arduino object | RX | TX |
|---|---|---|
| Serial | D0 | D1 |
| Serial1 | D19 | D18 |
| Serial2 | D17 | D16 |
| Serial3 | D15 | D14 |
All use:
|
1 2 3 4 |
3.3 V TTL levels |
so external 5 V serial devices may require level conversion.
Serial Is Shared with the Programming Interface
D0/D1 are connected to the board’s ATmega16U2 USB-to-serial interface.
This means hardware connected to:
|
1 2 3 4 5 |
D0 D1 |
can interfere with uploads or serial communication through the Programming USB port.
For external peripherals, prefer:
|
1 2 3 4 5 6 |
Serial1 Serial2 Serial3 |
where possible.
Programming USB Port
The Due has two Micro-B USB connectors.
The:
|
1 2 3 4 |
Programming Port |
uses an:
|
1 2 3 4 |
ATmega16U2 |
USB interface to communicate with the SAM3X8E.
It is the familiar choice for:
- sketch uploads;
- serial monitor;
- automatic reset.
Native USB Port
The:
|
1 2 3 4 |
Native USB Port |
connects directly to the SAM3X8E USB peripheral.
In Arduino code it is associated with:
|
1 2 3 4 |
SerialUSB |
rather than the normal UART-backed:
|
1 2 3 4 |
Serial |
Native USB Supports USB OTG
The SAM3X8E USB interface can operate in:
- USB device mode;
- USB host mode;
- USB OTG roles.
This enables projects involving:
- keyboard;
- mouse;
- USB peripherals;
- custom USB device behaviour.
Keyboard and Mouse Support
Arduino explicitly documents Due support for USB keyboard/mouse functionality through the native USB system.
This is something the ATmega2560-based Mega cannot do directly from its main application MCU.
Which USB Port Should You Use?
For the simplest programming workflow:
|
1 2 3 4 |
Programming USB |
is generally easiest.
Use the:
|
1 2 3 4 |
Native USB |
port when your application specifically needs:
- SerialUSB;
- USB device functions;
- USB host/OTG capability.
I2C / TWI Bus 1: Wire
The main Arduino I2C bus is:
|
1 2 3 4 5 |
D20 = SDA D21 = SCL |
Use:
|
1 2 3 4 5 6 |
#include <Wire.h> Wire.begin(); |
This bus includes onboard/internal pull-up support as documented by Arduino.
I2C / TWI Bus 2: Wire1
The Due also provides a second independent I2C bus on dedicated:
|
1 2 3 4 5 |
SDA1 SCL1 |
header pins.
Use:
|
1 2 3 4 |
Wire1.begin(); |
Wire1 Needs External Pull-Ups
Arduino specifically notes:
|
1 2 3 4 |
SDA1 / SCL1 do not have onboard pull-up resistors |
so an I2C bus using Wire1 requires suitable external pull-up resistors unless the connected breakout boards already provide them.
Why Two I2C Buses Are Useful
Two buses allow you to:
- separate high-speed and low-speed sensors;
- use devices with conflicting fixed addresses;
- isolate long cable runs;
- keep display traffic separate from sensor traffic.
SPI Is on the Central 6-Pin Header
This is one of the most important Due pinout differences from Mega 2560.
Due hardware SPI is exposed on the:
|
1 2 3 4 |
central 6-pin SPI header |
with:
|
1 2 3 4 5 6 7 8 |
MISO / CIPO MOSI / COPI SCK power ground |
signals.
Do Not Use Mega D50-D53 SPI Assumptions
On Mega 2560:
|
1 2 3 4 5 6 7 |
D50 = MISO D51 = MOSI D52 = SCK D53 = SS |
On Due, those header numbers are not the primary SPI signal location.
The central SPI header is the correct standard connection point.
SPI Chip Select Pins
The Due’s SAM core supports hardware SPI chip-select handling and maps common board SS selections such as:
|
1 2 3 4 5 6 |
D10 D4 D52 |
to SPI peripheral chip-select channels.
Most Arduino libraries still allow any suitable digital GPIO to be used as a software-controlled chip-select.
CAN Bus
The SAM3X8E contains:
|
1 2 3 4 |
2 CAN controllers |
and the Arduino Due hardware exposes the primary:
|
1 2 3 4 5 |
CANRX CANTX |
signals.
A CAN transceiver is still required.
The MCU generates logic-level CAN TX/RX signals; it does not directly drive the differential CANH/CANL bus.
CAN Requires an External Transceiver
A typical connection is:
|
1 2 3 4 5 6 7 8 9 10 11 |
Due CANTX → CAN transceiver TXD Due CANRX ← CAN transceiver RXD transceiver ↔ CANH / CANL |
Use a 3.3 V-compatible transceiver or verify logic-level compatibility carefully.
Arduino API Support for Due CAN
Arduino’s classic Due product documentation notes that the CAN pins are present but were not covered by the standard Arduino API in the same way as basic GPIO or Wire.
In practice, Due CAN projects commonly use dedicated SAM3X CAN libraries.
So:
|
1 2 3 4 |
hardware support exists |
but:
|
1 2 3 4 |
library/API choice matters |
Two CAN Controllers vs Exposed Pins
The current Arduino SAM core contains definitions for:
|
1 2 3 4 5 |
CAN0 CAN1 |
with primary CAN0 pins:
|
1 2 3 4 5 |
CANRX CANTX |
and complementary CAN1 mappings inside the variant definition.
For normal board-level use, follow the official Due pinout and the requirements of the CAN library you select rather than assuming both controllers have equally convenient header access.
External Interrupts
The Due’s current Arduino SAM core defines:
|
1 2 3 4 |
digitalPinToInterrupt(pin) |
for the board’s digital-numbered pins.
Unlike AVR boards where only a small subset of pins support the classic external-interrupt API, interrupt handling on the SAM3X is much more flexible.
This includes the analog header pins when they are addressed digitally as:
|
1 2 3 4 |
D54-D65 |
Use digitalPinToInterrupt()
Portable Arduino code should still use:
|
1 2 3 4 5 6 7 8 |
attachInterrupt( digitalPinToInterrupt(pin), myISR, RISING ); |
rather than relying on architecture-specific interrupt numbers.
Built-In LED
The standard built-in LED is connected to:
|
1 2 3 4 |
D13 |
and the current Due core defines:
|
1 2 3 4 |
LED_BUILTIN = 13 |
D13 is also PWM-capable on Due.
Power Input
Arduino specifies:
|
1 2 3 4 5 6 7 8 |
recommended input voltage: 7-12 V permissible range: 6-16 V |
The board can be powered from:
- DC barrel jack;
- USB;
- VIN.
3.3 V and 5 V Power Pins
The Due provides both:
|
1 2 3 4 5 |
3.3 V 5 V |
power rails on its headers.
But remember:
|
1 2 3 4 5 6 |
5 V power availability does NOT mean 5 V GPIO tolerance |
The SAM3X8E I/O remains 3.3 V only.
Regulator Current
Arduino’s official Due specification lists up to:
|
1 2 3 4 5 6 7 8 |
800 mA from the 3.3 V pin 800 mA from the 5 V pin |
subject to the board’s power source, thermal limits and total system loading.
Do not interpret these figures as permission to draw high current from GPIO.
Erase Button
The Due includes a dedicated:
|
1 2 3 4 |
ERASE |
button.
Holding it for several seconds while powered erases the SAM3X Flash.
This can be useful when:
- a sketch interferes with USB;
- the board becomes difficult to upload;
- you need to clear the application Flash completely.
Reset Button
The:
|
1 2 3 4 |
RESET |
button restarts the SAM3X8E without erasing its Flash contents.
Reset and Erase therefore perform very different functions.
JTAG Header
The Due provides a dedicated JTAG header for low-level debugging of the SAM3X8E.
This is useful for:
- breakpoints;
- register inspection;
- single stepping;
- professional embedded debugging.
Due vs Mega 2560 Pinout Philosophy
The boards share a similar large physical form factor, but they are electrically very different.
| Feature | Due | Mega 2560 |
|---|---|---|
| Logic | 3.3 V | 5 V |
| CPU | 32-bit Cortex-M3 | 8-bit AVR |
| Clock | 84 MHz | 16 MHz |
| SRAM | 96 kB | 8 kB |
| ADC | 12-bit hardware | 10-bit |
| DAC | 2 true DAC outputs | None |
| Native USB | Yes | No |
| CAN | Yes | No native controller |
Common Mistake 1: Applying 5 V to GPIO
This is the biggest Due mistake.
|
1 2 3 4 5 6 |
5 V signal → Due GPIO → possible damage |
Use level shifting where required.
Common Mistake 2: Using Mega SPI Pins
Do not assume:
|
1 2 3 4 |
D50-D53 |
are the Due’s normal SPI pins just because the board looks like a Mega.
Use the dedicated central SPI header.
Common Mistake 3: Forgetting ADC Defaults to 10 Bits
The hardware is 12-bit, but normal Arduino compatibility defaults to:
|
1 2 3 4 |
10-bit readings |
Use:
|
1 2 3 4 |
analogReadResolution(12); |
when you want the full ADC resolution.
Common Mistake 4: Assuming the DAC Is 0-3.3 V
The actual Due DAC output range is approximately:
|
1 2 3 4 |
0.55-2.75 V |
so design analogue interfaces accordingly.
Common Mistake 5: Confusing Serial and SerialUSB
These are different paths:
|
1 2 3 4 5 6 7 8 9 10 11 |
Serial → hardware UART0 → D0/D1 → programming USB interface SerialUSB → native SAM3X USB → native USB connector |
Choose the one that matches the USB port and application.
Common Mistake 6: Using Wire1 Without Pull-Ups
The dedicated:
|
1 2 3 4 5 |
SDA1 SCL1 |
bus requires external I2C pull-ups unless your connected hardware already supplies them.
Quick Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
Arduino Due MCU SAM3X8E Cortex-M3 84 MHz Logic 3.3 V ONLY not 5 V tolerant Memory 512 kB Flash 96 kB SRAM Digital D0-D53 Analog A0-A11 12-bit ADC hardware 10-bit Arduino default Analog as digital A0 = D54 ... A11 = D65 PWM D2-D13 DAC DAC0 DAC1 12-bit hardware approx. 0.55-2.75 V output UART Serial : D0 RX / D1 TX Serial1 : D19 RX / D18 TX Serial2 : D17 RX / D16 TX Serial3 : D15 RX / D14 TX I2C Wire : D20 SDA / D21 SCL Wire1 : SDA1 / SCL1 Wire1 needs pull-ups SPI central 6-pin SPI header CAN CANRX CANTX external transceiver required USB Programming USB via ATmega16U2 Native USB via SAM3X / SerialUSB USB OTG capable LED D13 Power 7-12 V recommended 6-16 V permissible Total GPIO current 130 mA maximum across all I/O lines |
Final Thoughts
The Arduino Due remains an unusual board in Arduino’s history because it combines the large Mega-style form factor with a much more capable 32-bit ARM processor.
Its strongest features are:
- 54 dedicated digital pins;
- 12 analog inputs;
- 12-bit ADC hardware;
- two true DAC outputs;
- four UARTs;
- two I2C buses;
- CAN hardware;
- native USB OTG;
- 96 kB SRAM.
The most important rules are:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Due GPIO = 3.3 V only A0-A11 = D54-D65 when used digitally PWM = D2-D13 SPI = central SPI header Wire = D20/D21 Wire1 = SDA1/SCL1 Serial ≠ SerialUSB DAC output ≠ full 0-3.3 V range |
If you treat it like a 5 V Mega simply because the PCB is similar, the Due can be damaged.
If you treat it as what it actually is—a 3.3 V SAM3X ARM board with large Arduino headers—it remains a flexible platform for control, data acquisition, USB and CAN projects.