Teensy 4.0 is based on the most powerful microcontroller available today, the NXP i.MX RT1062 ARM Cortex-M7 running at 600MHz with the ability to be overclocked. It is formatted into a very compact ‘teensy’ board outline for easy embedding into projects or for use with solderless breadboards. Perhaps best of all, it is compatible with the popular Arduino IDE programming environment as well as many of the existing Arduino libraries, so it is very easy to get up and running unlike many other advanced microcontrollers that are available.
- Teensy 4.0
- 1 x 14 (x2) male headers selectively plated with gold contacts and tin solder pins
- Handy pinout diagram
KEY FEATURES OF TEENSY 4.0:
- ARM Cortex-M7 running at 600MHz. Can be overclocked up to 1.008GHz with cooling
- 1MB (1024K) RAM (512K tightly coupled)
- 2MB (2048K) FLASH (64K reserved for recovery & EEPROM emulation)
- 2 USB ports, both 480 Mbit/sec, can be any device type
- 3 CAN Bus (1 with CAN FD)
- 2 I2S Digital Audio
- 1 S/PDIF Digital Audio
- 1 SDIO (4-bit) native SD
- 3 SPI, all with 16 word FIFO
- 3 I2C, all with 4 byte FIFO
- 7 serial ports, all with 4 byte FIFO
- 32 general purpose DMA channels
- 31 PWM capable pins
- 40 digital I/O, all interrupt capable
- 24 breadboard friendly I/O pins
- 14 analog input pins with 2 12-bit ADCs on-chip
- Cryptographic Acceleration
- Random Number Generator
- Built-in RTC for date/time
- Dynamic clock scaling
- True 64-bit floating point via FPU hardware
- Programmable FlexIO
- Pixel Processing Pipeline
- Peripheral cross-triggering
- Power On/Off management
- Compatible with Arduino IDE and many libraries
- Works with Windows, Mac OS X and Linux
- Small size is perfect for embedding or use with solderless breadboards
- 3.3V operation and I/O compatibility
The Teensy product line which is focused on being fast , small and Arduino compatible is developed by the company PJRC. They have a loyal following of designers and advanced hobbyists that create many libraries to take advantage of some of the more advanced features of the Teensy products or to modify Arduino libraries for compatibility. Many of them also participate in the excellent PJRC forum. The forum is targeted towards more advanced users and topics.
Just how fast is it? The chart below shows the Teensy 4.x series compared to some other popular boards using the CoreMark Benchmark test. Larger numbers = faster performance.
As another example, the classic Mandelbrot set was calculated and displayed using a Mega 2560 which took between 77 and 105 seconds per image. Calculating the image is very mathematically intensive. The Mega 2560 was then swapped out for the Teensy 4.1 and it took 1.24 to 1.26 seconds for the same task running the same software on both.
The heart of the i.MX RT1060 microcontroller is an ARM Cortex-M7 CPU core that brings many powerful features to a true real-time microcontroller platform.
The Cortex-M7 is a dual-issue superscaler processor, meaning the M7 can execute two instructions per clock cycle, at 600MHz! Of course, executing two simultaneously depends upon the compiler ordering instructions and registers. Initial benchmarks have shown C++ code compiled by Arduino IDE tends to achieve two instructions per cycle about 40% to 50% of the time while performing numerically intensive work using integers and pointers.
The Cortex-M7 is the first ARM microcontroller to use branch prediction. On the M4 as used on the Teensy 3.2, loops and other code which must branch take three clock cycles. With M7, after a loop has executed a few times, the branch prediction removes that overhead, allowing the branch instruction to run in only a single clock cycle.
Tightly Coupled Memory is a special feature which allows Cortex-M7 fast single cycle access to memory using a pair of 64 bit wide buses.
- The ITCM bus provides a 64 bit path to fetch instructions.
- The DTCM bus is actually a pair of 32 bit paths, allowing M7 to perform up to two separate memory accesses in the same cycle.
These extremely high speed buses are separate from M7’s main AXI bus, which accesses other memory and peripherals. 512K of memory can be accessed as tightly coupled memory.
Teensyduino automatically allocates your Arduino sketch code into ITCM and all non-malloc memory use is allocated to the fast DTCM, unless you add extra keywords to override the optimized default.
Memory not accessed on the tightly coupled buses is optimized for DMA access by peripherals. Because the bulk of M7’s memory access is done on the two tightly coupled buses, powerful DMA-based peripherals have excellent access to the non-TCM memory for highly efficient I/O.
Teensy 4.0’s Cortex-M7 processor includes a floating point unit (FPU) which supports both 64 bit “double” and 32 bit “float”. With M4’s FPU on Teensy 3.5 & 3.6, and also Atmel SAMD51 chips, only 32 bit float is hardware accelerated. Any use of double, double functions like log(), sin(), cos() means slow software implemented math. Teensy 4.0 executes all of these with FPU hardware.
If you need/want all the horsepower but also need more memory, I/O or peripherals than found on the Teensy 4.0, the Teensy 4.1 uses the same microcontroller in a larger physical footprint which brings out more I/O and adds ethernet, SC card slot and 8MB of FLASH memory plus the ability to add more FLASH or PSRAM memory.
Getting Started with Teensy
Install Arduino IDE Software
To program the Teensy using the Arduino IDE, you must first have the IDE installed if it is not already. If it is installed but not the current version, now is a good time to update to the latest.
Be sure to use the downloaded version of the Arduino IDE which can be downloaded at: https://www.arduino.cc/en/main/software
Install Teensyduino Software
Teensyduino is the name of the PJRC software that adds features and libraries that support the Teensy boards on the Arduino IDE. Support is available for Windows, Mac OS X and Linux.
The download and installation instructions can be found at: https://www.pjrc.com/teensy/td_download.html
When Teensyduino is running which it should do automatically, a small window is opened on the desktop. This is the Teensy Loader application that handles the actual download to the Teensy board. Most of the time you can ignore this window as it defaults to Auto Mode which means it will take care of automatically downloading to the Teensy without needing to press the Teensy Program button, but it does need to be running in order to download to the Teensy boards.
Running Blink Program
Once you have the software installed, running the venerable ‘Blink’ program that blinks the on-board LED every second is no harder than a typical Arduino.
- Attach a Micro-B USB cable to the Teensy
- In the IDE select Tools / Board / Teensyduino / Teensy 4.0
- USB Type should be set to ‘Serial‘
- Select the COM port the Teensy 4.0 is on.
- Open Examples / Basic / Blink
- Press the upload button
The Teensy 4.0 has the on-board LED attached to pin 13 like a typical Arduino.
If the setup is correct, the software will compile and download to the Teensy. The onboard LED should start blinking once per second. Since the board will already have Blink installed when you receive it, you might want to change the timing of the blink to verify the new download was successful.
Important information before going further with using Teensy 4.0
I/O is 3.3V Tolerant Only!
The Teensy 4.0 operates at 3.3V internally and expects I/O to not exceed 3.3V. It is not 5V tolerate on any of its pins except for the VIN and VSUB pins which can be used to supply 5V power to the module.
If you use any 5V peripherals that drive signals back to the Teensy 4.0, be sure to utilize logic level shifters to avoid possible damage.
If you need a Teensy in a similar package that is 5V tolerant, the Teensy 3.2 may be a good choice to consider.
Power – One Power Source at a Time!
The Teensy 4.0 can be powered one of 3 different ways, but it is important to note that these are mutually exclusive unlike typical Arduino boards. Internally the module does not provide any power switching between the different power inputs. In essence, if you hook up two different power inputs such as through the USB cable and also through the VIN pin, those two power sources will be shorted together.
USB power (VUSB) – This is typically 5V supplied through the USB cable. A solder pad next to the USB connector also connects to the same VUSB power. An on-board regulator provides 3.3V to power the module
The Teensy 4.0 can also act as a USB Host and supply 5V power coming in on the VIN power input or VUSB pin out the USB port.
VIN pin – External power of 3.6V to 5.5V can be applied to the VIN pin which also powers the on-board 3.3V regulator to power the rest of the module.
3.3V pin – This pin is normally used to power 3.3V peripherals. Total current should be limited to less than 250mA to avoid overheating. Also if you draw too much power and cause the 3.3V to dip down around 3.0V, the CPU will reboot.
External power of 3.3V can also be applied to the 3.3V pins to power the Teensy in some cases, but this bypasses the on-board regulator which properly handles the power up sequence. This option is not recommended without doing some research. Specifically, VBAT needs a 3V power source such as a coin cell before applying power to the 3.3V pins.
The most likely way to run into trouble with power is by having the Teensy normally powered through VIN and then deciding to hookup the USB cable to download new code without disconnecting VIN first.
If it is desired to separate the VSUB and VIN power inputs, there is a trace between two large solder pads that can be cut as shown here. If the module is normally powered through VIN, this prevents the USB power from also connecting to the board.
A USB cable can be modified by cutting the red 5V power wire inside cable, but an easier/cleaner solution is to get a USB Micro-B cable that has both data lines and a DC power switch as shown below.
You can find the link to the full cable information at the bottom of this page or click on the pic.
Misc Bits of Info
The USB port on the Teensy 4.0 has significant functionality not available on a normal Arduino. For most standard applications it should be set to the default “Serial” mode which is how it works with an Arduino. If you have problems connecting to the Teensy, check this setting.
A quick scan of the menu options available gives an indication of the flexibility of the USB port on Teensy 4.x products.
The connector used is the standard Micro-B USB. As with any boards that use this small connector, use care to push/pull the cable directly in and out of the connector and not apply pressure upwards in a lever motion to avoid possible damage.
The button on a Teensy board is not a typical reset button like on an Arduino. When pressed, the program button causes the Teensy to enter ‘Programming Mode” where it waits for a download over USB. If the Teensy is connected to the IDE via a USB cable, the last program will automatically be downloaded again and ran.
If the program button is pressed and held for about 15 seconds, the red LED will flash. When the button is then released, the FLASH memory is fully erased and a known good LED blink program is restored into FLASH memory and starts to run. This is a handy way to help restore an otherwise bricked module due to an errant program.
CPU Speed Selection
You didn’t select the Teensy 4.0 because it has a slow CPU, so naturally you are going to notice the CPU speed selection available in the IDE while poking around.
The default speed is 600MHz. You can select a lower speed to operate at, such as 24MHz, mainly for power sensitive applications. On the other hand you can also overclock the CPU potentially all the way up to 1.008GHz if adequate heat sinking is provided. Keep in mind that the parts on the board are graded for 600MHz, so performance at clock speeds above that cannot be guaranteed.
One nice feature is the the CPU has dynamic clock scaling that automatically adjusts timing parameters based on the clock speed that it is running. Recommended that you get up and running at nominal 600MHz before messing with this control.
The Teensy CoreMark benchmark page has some excellent information on performance, current and temperature over different operating frequencies.
Adding an Audio Adapter
Due to the strong processing power available in the Teensy products, they are a popular target for audio projects whether it is playing multiple WAV files simultaneously, synthesizing music or building sound reactive projects. The Audio Adapter 4.x (Rev D) is designed for the Teensy 4.x product line and supports high quality 16-bit 44.1kHz sample rate (CD quality) audio.
You can find the link to the full Audio Adapter information at the bottom of this page or click on the pic.
To make the Teensy 4.0 module as small as possible, some of the I/O (pins 24-33) is brought out to pads on the bottom side of the board. These are designed to be used with POGO pins or surface mounted headers, but can be difficult to work with to get positioning correct.
If you need more I/O than is brought out to the pins on the edges of the Teensy 4.0 module it is generally better to go with the larger Teensy 4.1 if the extra size and cost isn’t a problem.
Assembling the Module
The board ships with high quality selectively plated male headers. They have gold plating on the contact portion of the leg while the solder pins are tin plated for easiest soldering.
The board ships with the male headers loose. This provides maximum flexibility depending on how the board will be used or they can be replaced with other types of connectors such as female headers.
If you are going to try to solder to the I/O pads 24-33 on the bottom side of the board, you should do this before installing the headers to provide more working room.
To ensure good alignment during soldering first insert the loose headers into a solderless breadboard. The board can then be placed on top of the headers and easily soldered in place.
If you want to socket the Teensy 4.0, it can be mated with these 14-pin female headers.
Note: Some pics may show the headers unsoldered for mock-up, but the headers must be soldered to make electrical connections.
Our Evaluation Results:
The Teensy line of boards are an excellent product that provides high performance and advanced I/O to tackle even the hardest problems which is why they are often found in advanced hobbyist projects as well as low volume production builds.
The PJRC forum provides access to excellent technical advice that is far more advanced than found on the normal Arduino forums. It is the best place to find information on how to use the advanced features found in the Teensy. It is not the place to get basic Arduino type questions answered however, which is good as the forum is not cluttered with ‘how do I blink an LED?’ type questions.
The Teensy 4.0 is currently at the top of the heap for performance. You do need to take care of properly applying power and keeping I/O limited to 3.3V to avoid possible damage to the module. If you are brand new to Arduino and programming, you should consider getting your feet wet with a standard Arduino clone board like the Uno or Mega 2560 first.
There are some other Teensy products that may be better suited depending on the application. The Teensy 4.1 has the same CPU and basic performance, but in a larger physical package that adds additional I/O, Ethernet support, SD card slot, additional memory IC footprints and increases the standard memory up to 8MB. The Teensy 3.2 has a similar I/O footprint as the Teensy 4.0 and provides 5V tolerant I/O and it runs at 120MHz which is still way faster than the typical Arduino board.
It is highly suggested to checkout the PJRC website and forum at the links below for additional information.
Before they are shipped, these modules are:
- Tested by PJRC
- Packaged in high quality resealable ESD bag for safe storage.
PJRC Forum – Excellent source of technical information
PJRC website – Good source of information with many example applications in blog posts.
Board Schematics – Scroll down for different schematics.
|Microcontroller||NXP iMXRT0160 ARM Cortex-M7|
|Clock Speed||600MHz nominal (Optionally 24MHz to 1.008GHz w/ cooling)|
|I/O Logic Levels||3.3V|
|5V I/O Compatibility||None|
|Output Pin Drive Current||10mA|
|DC Current that can be drawn from 3.3V Pin||250mA maximum|
|Operating Voltage||3.6 – 5.5V on VIN or VUSB pin|
|Typical Operating Current||100mA typical @ 600MHz|
|Built-in LED||Attached to digital I/O Pin 13|
|USB Connector Style||Micro-B Female|
|Board Dimensions (PCB)||36 x 18mm (1.4 x 0.7″)|
|Reference Manual||NXP IMXRT1060 Reference Manual|