The Arduino Nano Every keeps the familiar 45 × 18 mm Nano form factor but replaces the classic ATmega328P with the much newer ATmega4809.
At first glance it looks almost identical to the classic Nano. The physical header layout is intentionally compatible, but the internal architecture is significantly different.
The Nano Every gives you:
- 48 kB Flash instead of 32 kB;
- 6 kB SRAM instead of 2 kB;
- 256 bytes EEPROM;
- a newer megaAVR 0-series peripheral architecture;
- more flexible interrupts;
- an event system;
- modern TCA/TCB timers;
- single-wire UPDI programming/debugging;
- a separate SAMD11 USB bridge.
It remains a 5 V Nano, which makes it useful for many legacy sensors and accessories, but software written for direct ATmega328P register access is not automatically portable.
This guide maps the Nano Every pins, explains GPIO, ADC, PWM, SPI, I²C, UART and interrupts, and shows how the SAMD11 bridge uses UPDI to program the ATmega4809.
Arduino Nano Every Specifications
| Feature | Arduino Nano Every |
|---|---|
| Main MCU | ATmega4809 |
| Architecture | 8-bit megaAVR 0-series |
| MCU maximum frequency | Up to 20 MHz |
| Current official Arduino core setting | 16 MHz |
| Operating voltage | 5 V |
| Flash | 48 kB |
| SRAM | 6 kB |
| EEPROM | 256 bytes |
| Standard digital header pins | D0-D13 |
| Analog pins | A0-A7 |
| Externally usable digital-capable positions in Arduino core | 22: D0-D13 + A0-A7 |
| ADC | 10 bit |
| Official PWM pins | D3, D5, D6, D9, D10 |
| Hardware SPI | Yes |
| Hardware I²C/TWI | Yes |
| UART on Nano header | D0 RX, D1 TX |
| Interrupts | All digital pins supported by Arduino attachInterrupt() |
| Programming/debug interface | UPDI |
| USB bridge | ATSAMD11D14A |
| USB connector | Micro-USB |
| VIN | 7-21 V |
20 MHz MCU, but Current Arduino Core Runs at 16 MHz
This is a useful Nano Every detail because Arduino’s hardware page describes the ATmega4809 as a 20 MHz processor.
The chip itself is capable of running at up to 20 MHz.
However, Arduino’s current official ArduinoCore-megaavr board definition still configures Nano Every with:
|
1 2 3 4 |
F_CPU = 16000000 |
and the clock fuse configuration is also set for the 16 MHz oscillator mode.
So for normal Arduino sketches using the official board package, treat the Nano Every as a 16 MHz board unless you deliberately change the low-level clock configuration.
Do not simply change timing assumptions to 20 MHz without also ensuring the clock fuse, core timing and serial baud calculations all match.
Complete Nano Every Pin Mapping
| Arduino pin | ATmega4809 port pin | Main functions |
|---|---|---|
| D0 | PC5 | Digital I/O, UART RX, interrupt |
| D1 | PC4 | Digital I/O, UART TX, interrupt |
| D2 | PA0 | Digital I/O, interrupt |
| D3 | PF5 | Digital I/O, PWM, interrupt |
| D4 | PC6 | Digital I/O, interrupt |
| D5 | PB2 | Digital I/O, PWM, interrupt |
| D6 | PF4 | Digital I/O, PWM, interrupt |
| D7 | PA1 | Digital I/O, interrupt |
| D8 | PE3 | Digital I/O, SPI SS alias in current core, interrupt |
| D9 | PB0 | Digital I/O, PWM, interrupt |
| D10 | PB1 | Digital I/O, PWM, interrupt |
| D11 | PE0 | Digital I/O, SPI COPI/MOSI, interrupt |
| D12 | PE1 | Digital I/O, SPI CIPO/MISO, interrupt |
| D13 | PE2 | Digital I/O, SPI SCK, built-in LED, interrupt |
| A0 / D14 | PD3 | ADC input, digital I/O, interrupt |
| A1 / D15 | PD2 | ADC input, digital I/O, interrupt |
| A2 / D16 | PD1 | ADC input, digital I/O, interrupt |
| A3 / D17 | PD0 | ADC input, digital I/O, interrupt |
| A4 / D18 | PF2 plus board I²C routing | ADC input, digital I/O, SDA, interrupt |
| A5 / D19 | PF3 plus board I²C routing | ADC input, digital I/O, SCL, interrupt |
| A6 / D20 | PD4 | ADC input, digital I/O, interrupt |
| A7 / D21 | PD5 | ADC input, digital I/O, interrupt |
Physical Header Layout
The Nano Every deliberately follows the same physical Nano pin order:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Left side Right side D1 / TX VIN D0 / RX GND RESET RESET GND 5V D2 A0 D3 A1 D4 A2 D5 A3 D6 A4 / SDA D7 A5 / SCL D8 A6 D9 A7 D10 AREF D11 3V3 D12 D13 / SCK |
This makes many mechanical Nano accessories compatible, but electrical and peripheral compatibility still needs to be checked.
Same Physical Pinout Does Not Mean Same Peripheral Mapping
This is one of the most important Nano Every lessons.
The classic Nano and Nano Every look pin-compatible, but some functions changed.
For example:
| Feature | Classic Nano | Nano Every |
|---|---|---|
| PWM pins | D3, D5, D6, D9, D10, D11 | D3, D5, D6, D9, D10 |
| A6/A7 digital use | No, analog-only | Yes, digital-capable |
| Dedicated attachInterrupt pins | D2, D3 | All digital pins |
| Programming | Classic AVR bootloader/ISP architecture | UPDI through SAMD11 bridge |
| USB bridge | FT232RL on official classic Nano | ATSAMD11D14A |
For the older board’s complete mapping, see our classic Arduino Nano pinout guide.
Digital GPIO
The standard digital header still provides:
|
1 2 3 4 |
D0 to D13 |
and the Arduino core also lets A0-A7 operate as digital pins.
Examples:
|
1 2 3 4 5 6 7 8 |
pinMode(8, OUTPUT); digitalWrite(8, HIGH); pinMode(A6, INPUT_PULLUP); int state = digitalRead(A6); |
This second example is important because it would not work the same way on the classic ATmega328P Nano, where A6 and A7 are analog-only.
A6 and A7 Are Real GPIO on Nano Every
On Nano Every:
|
1 2 3 4 5 |
A6 = D20 A7 = D21 |
They connect to normal ATmega4809 GPIO pins:
|
1 2 3 4 5 |
A6 → PD4 A7 → PD5 |
So they can be used with:
|
1 2 3 4 5 6 7 |
pinMode() digitalRead() digitalWrite() attachInterrupt() |
as well as analogRead().
GPIO Voltage
Nano Every is a 5 V board.
This is useful when migrating projects based on:
- classic Nano modules;
- 5 V sensors;
- relay boards;
- older LCD modules;
- 5 V logic devices.
Do not assume other modern Nano-family boards are also 5 V. Nano ESP32, Nano 33 IoT, Nano 33 BLE and several others use 3.3 V logic.
GPIO Current
Arduino’s current Nano Every pinout notes:
|
1 2 3 4 5 6 |
20 mA recommended per pin 40 mA absolute maximum per pin 200 mA package total maximum |
Also respect port-group current limits.
As usual, the 40 mA figure is an absolute maximum rating, not a normal design target.
For reliable design, stay comfortably below the maximum and use drivers for power loads.
PWM Pins
The official Arduino core currently marks these pins as supported for PWM:
|
1 2 3 4 5 6 7 8 |
D3 D5 D6 D9 D10 |
That is only five standard PWM pins.
This is different from the classic Nano, where D11 is also an official PWM pin.
D11 Is Not an Official PWM Pin on Nano Every
This is a common migration surprise.
On classic Nano:
|
1 2 3 4 5 6 |
D11 → PWM → SPI MOSI |
On Nano Every’s current Arduino core:
|
1 2 3 4 5 6 7 |
D11 → digital I/O → SPI COPI/MOSI → not officially mapped as analogWrite PWM |
If an old project depends on:
|
1 2 3 4 |
analogWrite(11, value); |
do not assume it will behave identically after moving to Nano Every.
PWM Timer Mapping
The current Nano Every board variant maps PWM through the ATmega4809’s newer timers:
| Pin | Arduino core timer mapping |
|---|---|
| D3 | TCB1 |
| D5 | TCA0 |
| D6 | TCB0 |
| D9 | TCA0 |
| D10 | TCA0 |
The ATmega4809’s timer architecture is very different from the ATmega328P’s Timer0/Timer1/Timer2 layout.
TCA and TCB Timers
The ATmega4809 includes:
- one 16-bit Timer/Counter Type A: TCA;
- four 16-bit Timer/Counter Type B units: TCB0-TCB3;
- a separate real-time counter;
- an event system that can route peripheral events without CPU intervention.
This provides more internal flexibility than the classic ATmega328P, but it also means old code that directly accesses registers such as:
|
1 2 3 4 5 6 7 |
TCCR1A TCCR1B OCR1A TIMSK1 |
does not transfer directly.
Do Not Assume AVR Register Compatibility
The Nano Every is still an AVR board, but it is not an ATmega328P with more memory.
Register names, peripheral blocks and port structures changed substantially.
Code such as:
|
1 2 3 4 |
PORTB |= _BV(5); |
or:
|
1 2 3 4 |
TCCR2A = ... |
must be reviewed or rewritten.
Normal Arduino APIs such as:
|
1 2 3 4 5 6 7 8 9 10 |
digitalWrite() analogRead() analogWrite() Wire SPI Serial1 attachInterrupt() |
are much more portable.
ATmega328P Register Emulation Mode
The Arduino megaAVR board package includes an optional:
|
1 2 3 4 5 |
Registers emulation → ATMEGA328 |
mode for Nano Every.
This can help some older code compile, but it is not magic hardware compatibility.
Use it as a migration aid, not as proof that every low-level 328P library will behave identically.
ADC Inputs
The Nano Every physically exposes eight analog inputs:
|
1 2 3 4 5 6 7 8 9 10 11 |
A0 A1 A2 A3 A4 A5 A6 A7 |
The ATmega4809 itself contains a 16-channel ADC, but only a subset of those channels is exposed through the normal Nano headers.
ADC Resolution
The ATmega4809 ADC is 10 bit.
So:
|
1 2 3 4 |
analogRead(A0) |
normally returns:
|
1 2 3 4 |
0 to 1023 |
With a nominal 5 V reference, the ideal quantisation step is:
|
1 2 3 4 5 |
5 V / 1024 ≈ 4.88 mV |
As always, that is resolution rather than guaranteed absolute accuracy.
ADC Channel Mapping
The current Arduino variant maps the analog pins to ATmega4809 ADC channels as follows:
| Arduino pin | ADC channel |
|---|---|
| A0 | AIN3 |
| A1 | AIN2 |
| A2 | AIN1 |
| A3 | AIN0 |
| A4 | AIN12 |
| A5 | AIN13 |
| A6 | AIN4 |
| A7 | AIN5 |
The channel order is therefore not simply A0 = ADC0, A1 = ADC1 and so on.
Normal analogRead(Ax) code hides this mapping from you.
AREF
The AREF pin remains available in the Nano physical format.
Use Arduino’s reference-selection API rather than directly manipulating the ADC reference unless you have a specific low-level requirement.
As always, never apply an external reference outside the permitted electrical range.
No True DAC
Nano Every does not include a true voltage DAC.
analogWrite() generates PWM on supported PWM pins.
If you need a real analog voltage output, use:
- an external I²C/SPI DAC;
- PWM plus a low-pass filter;
- a board with an integrated DAC.
UART: D0 and D1
The hardware serial pins remain physically familiar:
|
1 2 3 4 5 |
D0 = RX D1 = TX |
Use them through:
|
1 2 3 4 |
Serial1 |
for the external hardware UART.
Serial vs Serial1 Is Important on Nano Every
The board has a separate SAMD11 USB bridge.
So:
|
1 2 3 4 |
Serial |
is the USB-bridge virtual serial connection used by Serial Monitor.
While:
|
1 2 3 4 |
Serial1 |
is the ATmega4809 UART exposed on D0/D1.
This is more flexible than boards where the same physical UART is directly shared with the USB serial converter.
USB Bridge Architecture
The Nano Every uses a small ATSAMD11D14A as its USB interface processor.
The architecture is:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
PC USB ↓ ATSAMD11D14A USB bridge │ ├── serial connection └── UPDI programming ↓ ATmega4809 |
The ATmega4809 itself does not provide native USB.
SAMD11 Logic Voltage Warning
Arduino’s datasheet notes that the SAMD11 operates at 3.3 V and is connected to the 5 V ATmega4809 through level shifting.
If you access SAMD11 test/debug signals directly, do not assume they are 5 V tolerant.
This only matters for advanced board-level work; the normal Nano headers remain a 5 V environment.
SPI Pins
The visible hardware SPI pins are:
|
1 2 3 4 5 6 |
D11 = COPI / MOSI D12 = CIPO / MISO D13 = SCK |
The Arduino core’s current SS alias is:
|
1 2 3 4 |
D8 |
This is another subtle difference from the classic Nano convention where D10 is normally treated as the hardware SS pin.
Basic SPI Example
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <SPI.h> const int chipSelect = 10; void setup() { pinMode(chipSelect, OUTPUT); digitalWrite(chipSelect, HIGH); SPI.begin(); } |
For most SPI peripherals, chip select can be any convenient GPIO chosen by your application, so you do not have to use the core’s SS alias.
D13 Is Still the Built-In LED
D13 remains:
|
1 2 3 4 |
LED_BUILTIN |
and is also:
|
1 2 3 4 |
SPI SCK |
So the onboard LED can flicker during SPI traffic.
I²C Pins
From the user’s perspective, the physical I²C pins remain:
|
1 2 3 4 5 |
A4 = SDA A5 = SCL |
Use:
|
1 2 3 4 5 6 7 8 |
#include <Wire.h> void setup() { Wire.begin(); } |
The Nano Every board internally uses the ATmega4809’s flexible peripheral routing so the standard Nano header remains compatible with the expected A4/A5 I²C positions.
A4 and A5 Are Also ADC/GPIO
Like many Arduino boards, these pins are multifunction:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
A4 → ADC → digital GPIO → I²C SDA A5 → ADC → digital GPIO → I²C SCL |
Do not expect them to act as independent analog channels while actively being used by the I²C bus.
Interrupts: Every Digital Pin Is Usable
This is a major improvement over the classic Nano.
Arduino’s current attachInterrupt() reference lists:
|
1 2 3 4 5 |
Nano Every → all digital pins usable for interrupts |
So you are not limited to D2 and D3.
Interrupt Example on D8
|
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 |
volatile bool eventFlag = false; void onEvent() { eventFlag = true; } void setup() { pinMode(8, INPUT_PULLUP); attachInterrupt( digitalPinToInterrupt(8), onEvent, FALLING ); } void loop() { if (eventFlag) { eventFlag = false; // handle event here } } |
This would not be a normal attachInterrupt() pin on the classic ATmega328P Nano.
Interrupts on A0-A7
Because A0-A7 are digital-capable pins in the Nano Every Arduino variant, they can also participate in digital interrupt use where appropriate.
For example:
|
1 2 3 4 5 6 7 8 9 10 |
pinMode(A7, INPUT_PULLUP); attachInterrupt( digitalPinToInterrupt(A7), onEvent, CHANGE ); |
Keep ISRs Short
The normal interrupt rules still apply.
Inside an interrupt service routine:
- set flags;
- increment counters;
- capture state;
- return quickly.
Avoid:
delay();- blocking I²C transactions;
- long Serial output;
- complex processing.
Event System
The ATmega4809 includes an internal Event System.
This allows selected peripherals to trigger other peripherals without waiting for CPU software to react.
Conceptually:
|
1 2 3 4 5 6 7 8 |
external edge ↓ event system ↓ timer capture |
or:
|
1 2 3 4 5 6 7 8 |
timer overflow ↓ event system ↓ another peripheral action |
This is a major architectural improvement over the ATmega328P for advanced low-latency designs.
UPDI: Unified Program and Debug Interface
The ATmega4809 does not use the old-style six-pin AVR ISP arrangement as its primary programming/debug mechanism.
Instead it uses UPDI:
|
1 2 3 4 |
Unified Program and Debug Interface |
UPDI is a single-wire interface used for:
- Flash programming;
- EEPROM access;
- fuse configuration;
- device identification;
- debug access with suitable tools.
How Nano Every Uses UPDI
The onboard SAMD11 bridge handles USB communication with the computer and programs the ATmega4809 through UPDI.
The normal upload path is:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Arduino IDE ↓ USB ↓ SAMD11 bridge ↓ UPDI ↓ ATmega4809 |
This is why the official megaAVR board configuration uses a UPDI-based upload protocol rather than the classic Nano bootloader workflow.
Do You Need an External UPDI Programmer?
No, not for normal Arduino development.
The onboard SAMD11 already performs the programming function.
An external UPDI programmer becomes useful only when:
- doing low-level development;
- recovering damaged board firmware;
- working with a bare ATmega4809;
- debugging custom hardware;
- programming outside the normal Arduino upload path.
UPDI Is Not on the Standard Nano Header
The standard 30-pin Nano headers do not include a labelled UPDI pin.
Arduino’s board design includes production/test access on the underside of the board for advanced work.
For normal sketches you should not need to access those pads.
SAMD11 Can Be Reprogrammed Too
The SAMD11 contains its own firmware implementing:
- USB serial bridging;
- ATmega4809 programming through UPDI.
Arduino’s datasheet notes that the SAMD11 firmware can itself be reprogrammed for specialised USB behaviour.
This is an advanced feature and can break the normal upload/serial workflow if done incorrectly.
Why Nano Every Has No Native USB on the Main MCU
The ATmega4809 is not a native USB microcontroller.
So applications running on the ATmega4809 cannot simply transform the main processor into a USB keyboard or USB MIDI device in the same direct way as:
The SAMD11 can theoretically implement other USB classes, but that involves reprogramming the bridge processor rather than normal Nano Every sketch development.
Memory Improvement over Classic Nano
| Memory | Classic Nano | Nano Every |
|---|---|---|
| Flash | 32 kB | 48 kB |
| SRAM | 2 kB | 6 kB |
| EEPROM | 1 kB | 256 bytes |
The biggest practical improvement is SRAM.
Six kilobytes is still small by modern ESP32 standards, but it gives three times the workspace of the classic Nano.
Why EEPROM Is Smaller
The ATmega4809 includes 256 bytes of dedicated EEPROM rather than the classic Nano’s 1 kB.
If an old project stores large lookup tables or configuration blocks in EEPROM, check usage before migrating.
For ordinary calibration values and settings, 256 bytes may still be sufficient.
More USART Hardware than the Header Exposes
The ATmega4809 itself contains four USART peripherals.
Not all of them are exposed as ordinary user serial ports on the Nano header because some resources are used internally by the board design and USB bridge.
For normal Arduino code:
|
1 2 3 4 5 6 7 8 |
Serial → USB virtual serial through SAMD11 Serial1 → D0/D1 external UART |
is the most useful distinction.
Power Pins
The board exposes:
- VIN;
- 5V;
- 3V3;
- GND;
- AREF;
- RESET.
VIN
Arduino’s current pinout specifies:
|
1 2 3 4 |
7-21 V |
for VIN input.
The board uses an onboard regulator to generate its logic supply.
As always, high VIN combined with significant load current increases regulator dissipation.
5 V Logic Rail
The board operates at 5 V and therefore remains much friendlier to classic Nano hardware than many newer 3.3 V Nano-family boards.
That is a major reason the Nano Every remains useful as a migration target.
3.3 V Pin
The board also exposes a 3.3 V supply pin for low-current peripherals.
Do not assume that using the 3.3 V supply changes the ATmega4809 GPIO logic level; the main MCU I/O still operates in the board’s 5 V environment.
RESET
The Nano Every keeps two RESET positions in the traditional Nano header layout.
Pulling RESET low resets the ATmega4809 application processor.
Compatibility with Classic Nano Shields and Carriers
Mechanically, compatibility is very good because the header footprint is intentionally preserved.
Electrical compatibility is also helped by the 5 V operating voltage.
But always check:
- PWM pin assumptions;
- direct AVR register code;
- timer dependencies;
- A6/A7 behaviour;
- SPI SS assumptions;
- EEPROM size;
- library architecture support.
Classic Nano Libraries: What Usually Works?
Libraries that mainly use standard Arduino APIs are the best candidates:
|
1 2 3 4 5 6 7 8 9 10 11 |
digitalRead() digitalWrite() analogRead() analogWrite() Wire SPI Serial1 attachInterrupt() |
Libraries are more likely to fail if they:
- access ATmega328P registers directly;
- use AVR assembly written for the 328P peripheral layout;
- assume D11 is always PWM;
- assume Timer0/1/2 register names;
- assume only D2/D3 support interrupts.
Why the Nano Every Can Be Easier for Encoders
All digital pins supporting attachInterrupt() is useful for:
- rotary encoders;
- multiple frequency inputs;
- button matrices with interrupt wake-up;
- pulse counters;
- multi-channel sensor inputs.
You are no longer forced to reserve only D2 and D3 for every timing-sensitive input.
Why It Can Be Better for Compact 5 V Control Projects
Nano Every combines:
- small Nano size;
- 5 V GPIO;
- three times classic Nano SRAM;
- all-pin interrupt support;
- newer timers;
- same familiar physical header arrangement.
That makes it useful for compact robotics, control panels and legacy 5 V systems that do not need Wi-Fi or Bluetooth.
Quick Pin 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 |
UART D0 RX D1 TX PWM D3 D5 D6 D9 D10 SPI D11 COPI / MOSI D12 CIPO / MISO D13 SCK SS alias in current core: D8 I2C A4 SDA A5 SCL ADC A0-A7 10 bit Digital-capable analog pins A0-A7 Interrupts All digital pins Built-in LED D13 Programming UPDI through onboard SAMD11 |
Best Practices
- Use the normal Arduino API when porting classic Nano code.
- Do not assume ATmega328P register names exist on the ATmega4809.
- Remember D11 is not an official PWM pin on Nano Every.
- Remember A6/A7 are digital-capable on Nano Every.
- Use
Serial1for the external D0/D1 UART. - Use
Serialfor the USB virtual serial connection. - Exploit all-pin interrupt support where it simplifies the design.
- Do not modify the SAMD11 bridge firmware unless you understand how to recover it.
- Do not assume Arduino’s 20 MHz product wording means the current official core is running the MCU at 20 MHz; it is presently configured for 16 MHz.
- Check EEPROM requirements when migrating larger classic Nano projects.
Final Thoughts
The Arduino Nano Every is not merely a classic Nano with a slightly larger AVR.
The ATmega4809 introduces a newer megaAVR architecture with more memory, modern timers, an event system, flexible interrupts and UPDI programming while keeping the familiar 5 V Nano footprint.
The main pinout points to remember are:
|
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 |
D0/D1 → external UART D3/D5/D6/D9/D10 → official PWM D11/D12/D13 → SPI data/clock A4/A5 → I2C A0-A7 → 10-bit ADC → also digital GPIO all digital pins → attachInterrupt() capable UPDI → programming/debug path → handled onboard by SAMD11 |
The two migration traps most likely to surprise classic Nano users are:
- D11 loses the standard PWM role;
- A6 and A7 gain normal digital GPIO capability.
The other major change is below the software API: the old ATmega328P timer and port-register model is gone. If your project is built around direct register manipulation, treat Nano Every as a new microcontroller platform.
If the project uses portable Arduino APIs, however, Nano Every provides a straightforward way to keep the compact 5 V Nano form factor while gaining significantly more RAM, more Flash and much more flexible interrupt hardware.