skip navigational linksPJRC
Shopping Cart Download Website
Home Products Teensy Blog Forum
You are here: Teensy Hardware Tech Specs

PJRC Store
Teensy 4.1, $31.50
Teensy 4.0, $23.80
Teensy
Main Page
Hardware
Getting Started
Tutorial
How-To Tips
Code Library
Projects
Teensyduino
Reference

Teensy Technical Specifications

Feature Teensy
2.0
Teensy++
2.0
Teensy
LC
Teensy
3.2
Teensy
3.5
Teensy
3.6
Teensy
4.0
Teensy
4.1
Units
Price $16.00 $24.00 $11.65 $19.80 $24.25 $29.25 $19.95 $26.85 US Dollars
Processor
    Core
    FPU
    Rated Speed
    Overclockable
ATMEGA32U4
AVR
-
16
-
AT90USB1286
AVR
-
16
-
MKL26Z64VFT4
Cortex-M0+
-
48
-
MK20DX256VLH7
Cortex-M4
-
72
96
MK64FX512VMD12
Cortex-M4F
32
120
-
MK66FX1M0VMD18
Cortex-M4F
32
180
240
IMXRT1062DVL6
Cortex-M7
32 & 64
600
912
IMXRT1062DVJ6
Cortex-M7
32 & 64
600
912


bits
MHz
MHz
Flash Memory
    Bandwidth
    Cache
31.5
32
-
127
32
-
62
96
64
256
192
256
512
192
256
1024
411
8192
1984
66
65536
7936
66
65536
kbytes
Mbytes/sec
Bytes
RAM 2.5 8 8 64 256 256 1024 1024 kbytes
EEPROM 1024 4096 128 (emu) 2048 4096 4096 1080 (emu) 4284 (emu) bytes
Direct Memory Access - - 4 16 16 32 32 32 Channels
Digital I/O
Breadboard I/O
    Voltage Output
    Current Output
    Voltage Input
Interrupts
25
22
5V
20mA
5V
4
46
36
5V
20mA
5V
8
27
24
3.3V / 5V
5mA / 20mA
3.3V Only
18
34
24
3.3V
10mA
5V Tolerant
34
58
40+2
3.3V
10mA
5V Tolerant
58
58
40+2
3.3V
10mA
3.3V Only
58
40
24
3.3V
10mA
3.3V Only
40
55
42
3.3V
10mA
3.3V Only
55
Pins
Pins
Volts
milliAmps
Volts
Pins
Analog Input
    Converters
    Usable Resolution
    Prog Gain Amp
Touch Sensing
Comparators
12
1
10
1
-
1
8
1
10
1
-
1
13
1
12
-
11
1
21
2
13
2
12
3
27
2
13
-
-
3
25
2
13
-
11
4
14
2
10
-
-
4
18
2
10
-
-
4
Pins

Bits

Pins

Analog Output
    DAC Resolution
-
-
-
-
1
12
1
12
2
12
2
12
-
-
-
-
Pins
Bits
Timers
    PWM, 32 bit
    PWM, 16 bit
    PWM, 8-10 bit
      Total PWM Outputs
    PDB Type
    CMT Type
    Quadrature Enc
    LPTMR Type
    PIT/Interval
    IEEE1588
    Systick
    RTC
4 Total
-
2
2
7
-
-
-
-
-
-
-
-
4 Total
-
2
2
9
-
-
-
-
-
-
-
-
7 Total
-
3
-
10
-
-
-
1
2
-
1
0 **
12 Total
-
3
-
12
1
1
-
1
4
-
1
1 **
17 Total
-
4
-
20
1
1
-
1
4
4
1
1
19 Total
-
6
-
22
1
1
-
1
4
4
1
1
49 Total
3
32
-
27
-
-
4
-
4
4
1
1
49 Total
3
32
-
31
-
-
4
-
4
4
1
1




Pins
Communication
    USB
    Serial
        With FIFOs
        High Res Baud
    SPI
        With FIFOs
    I2C
    CAN Bus
        With CAN-FD
    Digital Audio In
    Digital Audio Out
        S/PDIF Input
        S/PDIF Output
        MQS Output
    SD Card
    Ethernet

1
1
-
-
1
-
1
-
-
-
-
-
-
-
-
-

1
1
-
-
1
-
1
-
-
-
-
-
-
-
-
-

1
3
-
-
2
1
2
-
-
1
1
-
-
-
-
-

1
3
2
3
1
1
2
1
-
2
2
-
0*
-
-
-

1
6
2
6
3
1
3
1
-
2
2
-
0*
-
1
1*

2
6
2
5
3
1
4
2
-
2
2
-
0*
-
1
1*

2
7
7
-
2
2
3
3
1
5*
5*
1
1
1
1*
-

2
8
8
-
2
2
3
3
1
5*
5*
1
1
1
1
1










stereo pins
stereo pins




uu
AVR Processor
AVR is an 8 bit processor introduced by Atmel in 1996. It performs quite well for simple control tasks, but the 8 bit architecture performs poorly for complex code involving numerical tasks or data processing.

Originally, Arduino only supported AVR chips. Today nearly all programs and libraries work with 32 bit Cortex-M processors, but a few very old programs may only work with AVR.

Cortex M0+ Processor
Cortex-M0+ is a 32 bit ARM processor optimized for low power and lower cost chips. It is a true 32 bit processor, able to perform 32 bit math with the same single-cycle instructions as 8 bit operations.

However, Cortex-M0+ supports fewer instructions than the more powerful ARM processors. When the compiler builds your program, certain complex operations which require only 1 instruction on Cortex-M4 may require 2 or 3. The reduced instruction set works remarkably well for simpler programs, but costs performance for numerically intensive ones.

Cortex-M0+ uses a single 32 bit bus to access all memory. This too works very well for simpler programs, but can decrease performance when processing large amounts of data.

Cortex M4 Processor
Cortex-M4 is a 32 bit ARM processor optimized for high performance control applications. The full set of ARM Thumb & Thumb2 instructions are supported, including hardware divide and multiplies producing 64 bit results.

Special Digital Signal Processing (DSP) instructions are provided. The Teensy Audio Library and arm_math.h utilize these instructions to accelerate sound and signal processing.

Cortex-M4 (without "F") does not include a floating point unit. All math done with floating point numbers uses software.

Cortex M4F Processor
Cortex-M4F is a 32 bit ARM processor optimized for high performance control applications. The full set of ARM Thumb & Thumb2 instructions are supported, including hardware divide and multiplies producing 64 bit results.

Cortex-M4F (with "F") includes a floating point processor for 32 bit (single precision) float variables. The FPU is approximately 30 times faster than software-based float math. 64 bit (double precision) floating point math is still done with software.

Special Digital Signal Processing (DSP) instructions are provided. The Teensy Audio Library and arm_math.h utilize these instructions to accelerate sound and signal processing.

Cortex M4F Processor
Cortex-M7 is a 32 bit ARM processor optimized for high performance control applications. Cortex-M7 is loaded with high performance features, such as dual-issue superscaler architecture (able to execute 2 instructions per clock), large caches, branch prediction, and two 64 bit buses to tightly coupled memory.

The full set of ARM Thumb & Thumb2 instructions are supported, including hardware divide and multiplies producing 64 bit results.

Cortex-M7 includes a floating point processor for 32 bit (single precision) float and 64 bit (double precision) variables.

Special Digital Signal Processing (DSP) instructions are provided. The Teensy Audio Library and arm_math.h utilize these instructions to accelerate sound and signal processing.

Flash Memory
Your program is stored in the flash memory. The flash memory size determines how large your program may be.

Unlike a traditional computer or single-board computer (eg: Raspberry Pi) where programs are loaded from storage media as the computer "boots", your program in flash memory is immediately available and begins running as soon as the processor starts executing.

Most programs written with Arduino and using 2 or 3 Arduino libraries need between 20K to 50K. Of course, as more libraries are used, or you write more code, program size grows. Embedding fonts, sound clips or graphics into your program can quickly increase its size.

Flash Memory Bandwidth
Individual Flash memory cells are limited by silicon technology to approximately 20-30 MHz access rates.

To support faster software execution from Flash memory, a "row" of flash memory bits is accessed simultaneously to increase the total bandwidth.

Older & slower chips lock the processor and flash memory clocks in sync. Newer & faster chips allow them to be configured separately. Even when the processor runs faster (overclocked), the flash memory bandwidth remains fixed.

Flash Memory Caching
Chips supporting faster speeds use a fast cache memory, to speed up access random and non-sequential access to slower Flash memory.

Larger cache memory allows more complex code with many branches to run faster, but additional cache memory can also increase power consumption.

RAM
All of your program's variables and temporary data are stored in RAM. Many libraries also require RAM to hold data.

Programs which generate graphics, process sound effects, or control large numbers of addressable LEDs often need larger RAM.

Some types of data processing are possible to write without much RAM, but much easier if a large array can be used. A board with more RAM may cost a few dollars extra, but save a tremendous amount of time and effort designing your code.

On ARM processors, RAM may also be used for speed critical functions with the FASTRUN keyword.

EEPROM Memory
EEPROM memory permanently retains data, but is easy to read & write using the EEPROM library.

Usually EEPROM is used for storing settings or calibration data.

EEPROM Emulation
On Teensy LC, EEPROM memory is emulated by software, using a 2K portion of the Flash memory which is reserved for this purpose. This is why Teensy LC provides only 62K Flash memory for your program.

The emulation provides 128 bytes of usable EEPROM space.

While writing, your entire program stops, because the Flash memory can not be read. These times are usually well under 1 millisecond. If your program must remain responsive while writing to EEPROM, an external chip or a board with proper EEPROM memory should be used.

Direct Memory Access (DMA)
The DMA controller can automatically move data between peripherals and memory, for vastly reduced software overhead.

Each DMA channel can be programmed to respond to different events. More channels allows more hardware to simultaneously leverage DMA.

USB ports, Ethernet and SD Card have their own specialized DMA engines which do not consume the general purpose DMA channels.

Digital I/O Pins
Digital pins are used to connect to almost almost anything. ... TODO, expand on this...
Breadboard Friendly Pins
When used on a solderless breadboard, only the pins on Teensy's 2 outside edges can be used.

These are the number of I/O pins which can actually be used with a breadboard. Other pins in the center, left side, or as only pads on the bottom side are not compatible with breadboard usage.

Digital Output Voltage
When digital pins output logic high, the voltage used is the chip's main power. On newer 32 bit Teensy, this is 3.3V. The older 8 bit boards use 5V power, unless modified to run at 3.3V.

Output voltage is important because it affects compatibility with other electronics you connect. Most modern electronic devices use 3.3V signals. Many older devices use 5V signals. Some can accept 3.3V signals, but others require a full 5V signal at their inputs.

Teensy LC 5 Volt Output
Teensy LC uses 3.3V output for its digital pins. However, it has one 3.3V to 5V buffer connected to pin 17, so you get a copy of the signal at pin 17 amplified to 5V. This is intended for connection to WS2812B or similar addressable LED strips, which sometimes do not work reliably with a 3.3V signal.
Digital Output Current
When acting as a digital output, the pins are capable of delivering current which can be useful for powering small loads, like a LED. Larger loads than the pin can supply generally require use of a transistor or solid state relay.

Current limits are specified different ways. These numbers are the recommended maximum, which are design guidelines. Some other sites publish much higher "absolute maximum" ratings, which are based on possible damange to the chip. Usually you should design your project to use no more than the recommended maximum under normal usage, and stay below the absolute maximum in temporary & abnormal conditions.

These maximums allow 0.5V drop within the chip. For example, when running from 3.3V power and delivering the full 10 mA maximum, a pin may output as little as 2.7V.

Limits also exist for the total current of all pins. Just because each pin is capable of a certain current does not mean you can expect to safely use all pins simultaneously delivering their maximum.

Teensy LC Output Current
Teensy LC has 4 digital pins capable of higher 20 mA current. If loads requiring more current need to be driven, they should be connected to these 4 pins.

The special 5V buffer chip, which provides a copy of the signal at pin 17 amplified to 5V, is rated for 8 mA output.

The other 23 digital pins are rated for 5 mA current.

Digital Input Voltage
When digital pins are used as inputs, they expect a digital signal with a specific voltage level.

3.3V Only means signals higher than 3.3V may damage your Teensy.

5V Tolerant means the pins expects a 3.3V signal, but is designed to allow up to 5 volts.

5V means the pin is designed to accept a 5V signal. Usually 3.3V signals can also be properly received by these pins.

Interrupt Pins
Some pins can trigger a function to run, configured by the attachInterrupt() function. These functions are called Interrupts, because the normal execution of your program is interrupted when the input voltage changes, to run your special function.
Analog Inputs
Analog inputs allow you to measure analog voltages, typically from sensors and knobs (potentiometers). More inputs allow you to connect more sensors or inputs, without resorting to extra hardware.
Number of Analog to Digital Converters
Even though many pins can be used as analog inputs, they are routed to a shared circuit which makes the voltage measurement. These measurement take time, usually 2 to 100 microseconds, depending on the speed of your chip.

With more than 1 converter present, you can (with the right software) measure more than 1 analog signal simultaneously. This can improve speed. It also allows measuring related signals at the same moment, such as a voltage and a signal representing current, which can be useful if you wish to compute power.

Analog to Digital Resolution
Analog to digital conversion gives you a digital number which represents the analog voltage to a specific resolution. 10 bits resolves your signal to 1 of 1024 possible levels. More bits give you a finer measurement.

These numbers are the "usable" resolution, or "effective number of bits" in cases where the conversion provides more bits. PJRC believe specification of the total bits gives a misleading impression, because any extra bits provided by the hardware are not usable. They are usually just noise.

Fully utilizing the analog resolution depends on good circuit design, particularly use of low impedance signals and careful attention to ground current paths.

Programmable Gain Amplifiers
These special amplifiers allow you to measure very small signals.

The voltages at 2 pins are subtracted and that difference is amplified. Thermocouples, strain gauges and other small signals which could normally make a slight change can be mapped onto some or all of the analog to digitial conversion resolution.

Capacitive Touch Sensing
Touch sensing measures the capacitance present at a pin. These pins are used with the touchRead(pin) function. When the pin is connected to a large metal surface, the presence of a finger (or any other large object which is grounded or coupled to ground) can be detected by the change in capacitance.

Touch can also be detected using ordinary digital pins with the CapacitiveSensor library. But the special hardware built into these pins makes the measurement much faster, and usually with better long-term stability.

Analog Signal Comparators
Analog comparators allow you to receive the difference of 2 voltages as a digital signal. If one input is higher, the digital signal will be high, and if the other is higher, the digital result will be low.

This can be useful for comparing voltages to thresholds, such as a battery discharging below a safe level. While the analog to digital converter is more flexible and usually easier to use, these comparators can be useful for some special applications.

Digital To Analog Converters
True analog output (DAC) allows you to create an analog voltage under software control. These are used with analogWrite(), the same way as PWM pins, but the result is an actual analog voltage rather than a pulsing digital waveform.

The Teensy Audio Library supports playing sounds to these DAC pins. Two pins allows stereo output.

DAC Resolution
The analog voltage is created in fine steps. 12 bits resolution provides 4096 steps in voltage. Higher resolution allows you to create voltages closer to the desired output. For sound, higher resolution results in better sound quality.
General Purpose Timers
with Pulse Width Modulation
These general purpose timers are the most flexible, usable for many tasks. They also create the PWM outputs.

When used for another purpose, the PWM pins associated with a timer may be limited or may not function at all as PWM. More of these timers allows you to dedicate some to specific uses, and still have more for PWM outputs.

When used as PWM, all the pins for a specific timer pulse at the same frequency, controlled by analogWriteFrequency(). More timers allows you to use more individual PWM frequencies.

Timers with 16 bits are very flexible for alternate uses, like the FreqMeasure library. The 8 & 10 bit timers are still quite useful, but can not perform some tasks the 16 bit timers can.

PWM Pins
Pulse Width Modulation (PWM) pins are very useful. The rapid pulsing can be used to control the amount of power delivered to LEDs, motors or other devices where the rapid pulsing is averaged over time.

Remember some PWM pins may become unusable if their timer is reprogrammed for a different purpose.

Delay Timer
The Programmable Delay Block is a timer specialized for creating delays and triggering the analog to digital and digital to analog conversions with precise timing.

Use of this special timer allows the general purpose timers to be used for PWM other tasks.

The Teensy Audio library uses this timer if the ADC or DAC objects are used. The Servo library also defaults to use of this timer, but can also use the LPTMR.

Carrier Modulator Timer
This timer is meant for special communication tasks, typically infrared remote control.

Use of this special timer allows the general purpose timers to be used for PWM other tasks.

The IRremote library makes use of this timer. The FrequencyTimer2 library can be used to allow this timer to generate another frequency independent of the PWM timers.

Low Power Timers
LPTMR is a timer optimized for low power applications. It is the only timer which can function in all low power and sleep modes.

The Snooze library uses this timer for low power wakeup.

The Entropy, FreqCount, and Servo libraries can also make use of this timer.

Programmable Interval Timers
These timers are used to trigger events are regular repeating intervals. They are accessed using IntervalTimer.

Many libraries make use of IntervalTimer, rather than requiring the general purpose PWM timers. See the IntervalTimer page for a list of libraries known to use IntervalTimer. Because 2 or 4 of these timers are present, up to 2 or 4 libraries which need IntervalTimer can be used simultaneously without conflict, and without interfering with any other timers.

IEEE1588 Timers
IEEE1588 are associated with the Ethernet module. Currently there is no software supporting these timers.
System Tick Timer
The System Tick is a special timer built into the ARM processor, meant for keep track of system time. Teensyduino uses this to implement millis() and other Arduino compatible timing functions.

Use of this dedicated timer allows reliable time keeping, even if the general purpose timers are changed to different frequencies with analogWriteFrequency() or used for other tasks.

Real Time Clock/Calendar
The RTC is meant for keeping track of date & time. This timer uses a dedicated 32.768 kHz crystal, and continues to run while power is off if a 3V coin cell is connected to VBAT.

See the Time Library for details.

Teensy LC RTC
Teensy-LC has RTC logic on-chip, but lacks the 32.786 kHz crystal oscillator & VBAT battery backup power pin. An internal oscillator can be used but the accuracy is poor. This table shows zero, to give you an honest summary of the hardware's real capability. Even though the RTC technically exists, it's not useful for most practical purposes.
Teensy 3.2 RTC
Teensy 3.2 has a location to solder a 32.786 kHz crystal for its RTC. This crystal must be added for the RTC to function. See the Time Library Page for details and recommended crystal part numbers.
USB Port
Every Teensy has at least one USB port, used for programming and a variety of types of USB device communication. The USB port is configured from the Tools > USB Type menu in Arduino.
Serial Ports
Serial ports are useful for communicating with many different serial devices, like GPS receivers, wireless modules, RS-485 control networks and others.
Serial FIFO Feature
Some serial ports have a FIFO, which is a small buffer built into the port. This buffer allows the serial port to generate fewer interrupts and consume less CPU overhead when transmitting or receiving data. The FIFO also allows a longer time for interrupts to be blocked without losing data.

The FIFOs are used automatically by the serial objects in Teensyduino.

Teensyduino implements interrupt-based software buffers for both transmit and receive on all serial ports. These FIFOs do not increase the length of time software may spend without reading incoming data becoming lost, or without writing to obtain full no-gap transmission. The FIFOs are only about reducing the software overhead and tolerating longer interrupt disable times without data loss.

High Resolution Baud Rates
Serial baud rates are created by dividing the chip's CPU clock. Normally at higher baud rates, the selection of possible baud rates becomes coarse and limited to relatively few specific speeds. High resolution baud rate hardware slightly varies the times of each individual bit, to allow much finer control of baud rates, even at high speeds.
SPI Ports
SPI is a fast clocked serial communication protocol used by many chips. Usually several chips can share the same SPI port, if a separate pin is used for their "chip select" signal. More ports allows dedicated SPI connections.
SPI FIFO Feature
This FIFO is a small hardware buffer which allows faster SPI communication by reducing the "dead time" between individual bytes communicated. This FIFO is not automatically used. Special programming is needed. Only specific libraries, like ILI9341_t3, ST7735_t3 and Ethernet make use of this feature.
I2C Ports
I2C is a moderate speed clocked communication protocol used by many chips. Usually many chips can share the same I2C port, as long as they have unique 7 bit addresses. Multiple ports allows dedicated connections without sharing, and use of multiple chips with the same address which would have conflicted if sharing the same port.
CAN Bus
CAN bus is a communication protocol used on automobiles and some industrial control systems. A CAN transceiver chip is needed to convert the signals to CAN bus levels to communicate with other CAN devices.
CAN-FD
CAN-FD (Flexible Data Rate) is an extension to the CAN protocol which allows much higher data rates than the normal 1 Mbit/sec CAN maximum.
I2S Digital Audio
I2S is a digital audio streaming protocol, used to communicate with nearby chips for high quality audio input and output. Each I2S supports one stereo input and one stereo output.
I2S Digital Audio
Teensy 4.0 & 4.1 have 3 pins which can transmit or receive stereo audio, but not both. 2 pins are always input and 2 are always output.

For example, if you use the 3 configurable pins as output, you can transmit 5 stereo streams (10 audio channels) and receive 2 stereo streams (4 audio channels). Or you could choose to receive 4 stereo inputs (8 audio channels) by using 2 of the configurable pins, leaving 1 configurable pin and 2 output-only pins to be able to transmit 3 stereo streams (6 audio channels).

If only 14 simultaneous audio channels is too limiting, you can also use TDM protocol which supports up to 16 channels of audio per pin! Currently the Teensy Audio Library only supports TDM on the 2 input-only and 2 output-only pins, for a maximum of 32 audio channels input and 32 audio channels output.

S/PDIF Input
S/PDIF is a single-wire or optical fiber communication protocol for digital audio. S/PDIF Input allows Teensy to receive audio in this digital format.
S/PDIF Output
S/PDIF is a single-wire or optical fiber communication protocol for digital audio. S/PDIF Output allows Teensy to transmit audio in this digital format.
S/PDIF Using I2S Port
S/PDIF digital audio may be transmitted using the normal I2S digital audio port. But while using the I2S hardware for S/PDIF, it can not be used for I2S for the audio shield or other audio ADC, DAC or Codec chips.
MQS Audio Output
MQS (Medium Quality Sound) is a digital pulsed output, similar to PWM, but with noise shaping to improve audio quality. MSQ can be used to drive speakers, or it can be low-pass filtered to give an analog audio signal.
Native SD Card
SD cards can use 2 different protocols, SPI or 4 bit SDIO. This port allows use of a SD card with the much faster SDIO communication, for improved performance and to eliminate the need to share SPI signals between a SD card and other SPI chips.
Ethernet
Ethernet is a fast computer networking protocol. The ethernet port supports 10 and 100 MBit/sec communication with efficient DMA transfer to memory. A special shield is required to connect an Ethernet PHY chip and magnetics to actually communicate with other computers.