Share this project


Share this project

Teensy 3.0, an affordable 32 bit ARM Cortex-M4 board, for development in Arduino or C/C++.
Teensy 3.0, an affordable 32 bit ARM Cortex-M4 board, for development in Arduino or C/C++.
1,572 backers pledged $70,874 to help bring this project to life.

Use this space to cheer the creator along, and talk to your fellow backers.

Have a question?

Only backers can post comments. Log In
    1. Paul Stoffregen 2-time creator on November 20, 2012

      Smartduino appears to be a 5 volt I/O system. They don't specify the I/O voltage or how 5V and 3V devices are intended to work together on this "bus". Their ADK board has what looks like 5 little buffer chips when I'm pretty sure are meant to convert the signal voltage. My initial guess is Teensy 3.0, or any newer and more capable 3V-only microcontrollers won't integrate well to this system.

      I'm skeptical about the project in general, especially how the "quad core Arduino" system might actually work in practice. I think a "wait and see" approach is probably best, as far as Teensy is concerned. If this thing really does take off (after the Kickstarter, that is), and if it turns out the the system can with 3 volt I/O, then an adaptor board could be made.

    2. Nilton Lessa on November 20, 2012

      Hi Paul,
      I and some others friends are backers of Teensy 3.0 (congrats, excellent work!) and also backing SmartDuino project. It looks like very promising.
      What do you think about a cooperation with them to make Teensy compatible with Smartduino smARtBUS Open I/O?? Is it feasible? What do you think?



    3. Paul Stoffregen 2-time creator on November 14, 2012

      Hi Ethan. Please post this on the forum. This Kickstarter is finished, so all the discussion is moving over to the forum now.

    4. Ethan Reesor on November 8, 2012

      As far as I can tell, the actual memory map is as follows:

      Type (len): start address in hex
      Flash (128K): 0000,0000
      FlexNVM (32K): 1000,0000
      FlexRAM (2K): 1400,0000
      SRAM (16K): 1FFF,E000
      Bitband (256K): 2200,0000

      The Flash and SRAM sections make sense as far as the specs go (128K Flash, 16K RAM, 2K EEPROM). The length of the FlexRAM suggests that it is the 'EEPROM'. Since the Bitband is actually the SRAM_U Bitband, it's length makes sense (8K * 32).

      For those who don't know, the Bitband is a specially address space. It is aliased to the upper half of the SRAM (starting at 2000,0000, 8K in length). However, it is not byte-for-byte aliased. Every 32-bit location in the Bitband is aliased to a single bit in the upper SRAM. Setting or clearing the least significant bit of the Bitband location sets or clears the corresponding bit of the upper SRAM. The upper 31 bits of Bitband locations is unused.

      My question is, what are FlexNVM and FlexRAM? Are there actual 32K and 2K blocks of memory on the chip? Are they aliased to Flash, to SRAM, somewhere else?

      P.S.: Here's a memory map with ranges

      Type Start End
      | Flash | 0000,0000 | 0001,FFFF |
      | FlexNVM | 1000,0000 | 1007,FFFF |
      | FlexRAM | 1400,0000 | 1400,07FF |
      | SRAM_L | 1FFF,EFFF | 1FFF,FFFF |
      | SRAM_U | 2000,0000 | 2000,3FFF |
      | Bitband | 2200,0000 | 2203,FFFF |

    5. Paul Stoffregen 2-time creator on November 6, 2012

      @Riaz - Please post question this in the new forum. That's now the place for tech support.

      Serial port drivers and troubleshooting is different on Mac, Windows and Linux, so at the very least, you need to tell which operating system you're using. A little more info, like what the Mac system profiler, Windows device manager, or Linux kernel log shows would go a long way....

    6. Paul Stoffregen 2-time creator on November 6, 2012

      @Kgrider - The pins are not 5V tolerant. If you have a 5 volt signal that needs to drive a pin on Teensy 3.0, use a series resistor or buffer chip.

    7. Riaz Skrenes Missaghi on November 6, 2012

      My first arduino device and I love it (played some music on aa speaker and faded some LED's with pulse width modulation).

      The auto rest works but I can't get anything to appear on the serial monitor :( Sketch runs without errors but nothing shows up in the monitor.

    8. Missing avatar

      Kgrider on November 2, 2012

      According to this:

      the I/O pins appear to be 5V tolerant. I was wondering the same thing as I want to use a 5V sensor on this and do not care if it rails above 3.3v, but don't want it to destroy a pin. Am I off base here?

    9. Paul Stoffregen 2-time creator on November 1, 2012

      @Heri - the pins are 3.3 volts only. I don't understand your resistor question.

    10. Heri Sim
      on November 1, 2012

      Are the pins 5V tolerant?

    11. Heri Sim
      on October 31, 2012

      Hi Paul, could you help to indicate the pullup resistor value suitable for the teensy 3.0 pins when using the 3.3v pin as source? I don't think we have the impedance spec of the pins.

    12. Paul Stoffregen 2-time creator on October 31, 2012

      @david - Use the makefile. See Update #14 for details.

    13. david moloney on October 31, 2012


      I've received all 5 boards.

      I played around with the Arduino examples using the arduino beta SW but it's not really for me as I want to develop C/C++ code for the ARM.

      How do I go about programming the Teensy in C/C++?

      I already read elsewhere that Arduino supports C syntax but a simple void main() {} generates a bunch of errors as I'm not using the expected Arduino syntax.

    14. Missing avatar

      Kgrider on October 31, 2012

      @Rick -- pretty hackish, but here it is.…


    15. Chris
      on October 31, 2012

      Ugh. How embarrassing. Immediately after posting, I had this horrible suspicion that I might not have added that account to the dialout group yet.

      Indeed, the programming operation seems to proceed as expected now. Everything always seems clearer approximately 60 seconds after publicly shaming oneself. And this, kids, is why we shouldn't post comments at midnight!

      Many thanks for your help and patience!

    16. Paul Stoffregen 2-time creator on October 31, 2012

      @Chris - Did you install the udev rules?

    17. Chris
      on October 31, 2012

      Surely I've missed something blindingly obvious, for which I offer my mea culpa in advance, but... I'm afraid I don't know enough about the expected verbose messages from the teensy loader to figure out why it never progresses past the "Press button to activate" state.

      The physical device clearly exhibits the pre-loaded blinking behavior, and stops when the button is pressed (as previous commenters have been asked to verify). It also appears to be neatly recognized by the system it is plugged into (see output of lsusb below). Can someone point me to any existing information (or tools) that would allow me to audit the connection between the computer and the teensy, so we can hopefully determine why they aren't speaking to each other?

      Potentially relevant information:

      cianci@etna:~$ uname -a
      Linux etna 3.2.0-32-generic #51-Ubuntu SMP Wed Sep 26 21:33:09 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

      cianci@etna:~$ lsusb | fgrep VOTI
      Bus 001 Device 033: ID 16c0:0478 VOTI Teensy Halfkay Bootloader

      [From "Help -> Verbose Info" in Teensy]
      11:37:16 PM: Teensy Loader 1.07, begin program
      11:37:16 PM: File "Blink.cpp.hex". 8000 bytes, 12% used
      11:37:16 PM: Listening for remote control on port 3149
      11:37:16 PM: initialized, showing main window
      11:37:16 PM: remote connection opened
      11:37:16 PM: remote cmd: "comment: Teensyduino 1.10 - LINUX64"
      11:37:16 PM: remote cmd: "dir:/tmp/build8939978708518829939.tmp/"
      11:37:16 PM: remote cmd: "file:Blink.cpp.hex"
      11:37:16 PM: File "Blink.cpp.hex". 8000 bytes, 12% used
      11:37:16 PM: remote cmd: "status"
      11:37:16 PM: status data sent
      11:37:16 PM: remote cmd: "auto:on"
      11:37:16 PM: remote connection closed
      11:37:20 PM: Verbose Info event

    18. Rick S
      on October 31, 2012

      @Kgrider I'm a total noob with this, but one of the things I want to incorporate into a project involves having an RTC. Could you post what you have somewhere? It would be great to see how you have the T3 connnected and study the code you're using so I can learn from a real example.
      Rick Skubic

    19. Missing avatar

      John Beale on October 30, 2012

      @Kgrider - glad to hear it's working. On my T3, the two "GND" pins are definitely connected (< 0.1 ohms between them). "AGND" is about 0.5 ohms from GND. I assume you were using the corner pin marked GND, not the adjacent "Pin 0" which is actually a GPIO pin (RX1). The GND pin next to it at the corner of the board does not actually have a pin number shown on the T3 pinout card.

    20. Missing avatar

      Kgrider on October 30, 2012

      @John I have it now. When I had the ground on pin pin 0 (next to the USB port), It would not retain. When I put the battery - on the GND pin on the end opposite the usb plug, it retains the time when I unplug the USB. I assumed that the GND pins were all connected. I copied the code and cobbled together a clock sketch from the examples. I set the time manually (set a variable with the seconds) as I have not figured out how to grab it from the serial port.

    21. Missing avatar

      John Beale on October 30, 2012

      @Kgrider - I think you need to specify exactly what software you are running, to check the time. There are quite a few different ways to do it wrong such that the software resets the time at startup even if the hardware timer continues to run through powerdown.

    22. Missing avatar

      Kgrider on October 29, 2012

      @ Paul thanks for the tip on the interrupts. I'll give it a try.

      on the RTC: I put a coin cell on it and tried to see if it would keep the time when I removed the USB cable. No dice. I checked and it is 3.07V and connected to a common ground. The + is connected to the vbat pin. I assume I am doing something wrong. Any tips?

    23. Paul Stoffregen 2-time creator on October 29, 2012

      @Heri - #1: By default, the UART pins do not have pullups. #2: Usually the best way to handle sleep/powerdown pins is with a physical resistor, so it is at the desired voltage before the Teensy begins running code. #3: Every Teensy 3.0 has a 16 MHz crystal, so timing stuff like millis and delay() are very accurate. That new-ping library looks like it might work if you delete the 3 timing functions. They directly access AVR timer registers, which won't work on Teensy 3.0.

    24. Paul Stoffregen 2-time creator on October 29, 2012

      @Kgrider - On Teensy 3.0, interrupt 0 maps to pin 0, interrupt 1 maps to pin 1, interrupt 2 maps to pin 2, and so on. Every digital pin works with attachInterrupt. Arduino Uno has only 2 interrupt pins. Teensy 3.0 has 34. :-)

    25. Paul Stoffregen 2-time creator on October 29, 2012

      @Bharat - Please try a different USB cable and/or a different PC. The board is almost certainly going into the right mode. If you don't get a new device with that ID, it's almost certainly a bad cable. Just so you know, when we test each board, the LED blink is loaded through the USB. It's *not* loaded during the bed-of-nails test. If your board is blinking when you plug it in, that code got onto the board via the USB cable we use here for testing.

    26. Missing avatar

      Bharat V. Patel on October 29, 2012

      @Paul - The light does blink when I plug it in and it turns off when I put it into halfkay mode, but I don't see it appear under HID in the device manager. Is it because I am in windows 7 or something? All of my HID devices are 46D and I haven't seen any 16c0:0478 under the Hardware IDS.

    27. Missing avatar

      Kgrider on October 29, 2012

      @Thomas - I have the card, but am probably too much of a noob to figure it out. In Arduino, interrupt 0 is on pin 2, interrupt 1 is on pin 3, interrupt 2 is on pin 21 on Mega, etc... If I set interrupt 0, I just need to know which digital pin that maps to...


    28. Missing avatar

      Kgrider on October 29, 2012

      @Pau - That fixed it. The code compiles and runs.

    29. Paul Stoffregen 2-time creator on October 29, 2012

      @Kgrider - Try changing line 41 in hardware/teensy/cores/teensy3/WString.h to this:

      #define F(string_literal) ((const __FlashStringHelper *)(string_literal))

      Please confirm is this works? If so, I'll include it in the next software update... in a few days.

    30. Paul Stoffregen 2-time creator on October 29, 2012

      @Ethan - The reference manual from Freescale is the official memory map. Their 1200+ page manual isn't always easy to follow.....

    31. Paul Stoffregen 2-time creator on October 29, 2012

      @Bharat - First of all, please understand the Teensy can be running in 1 of 2 different modes. By default, whatever program is loaded is run. When the board is brand new, it comes with a LED blink example in pre-programmed in the memory. When you plug in the cable, the LED should blink. Are you getting blinking?

      When you press the pushbutton, it will go into the other mode, where it's running the bootloader and waiting for you to load a new program. That mode does not blink the LED. So when you press the button, the LED should stop blinking.

      The Teensy Loader from the website hasn't been updated for Teensy 3.0. Use the Help > About menu to check which version you are using. If it's 1.06, you're using the old version that only supports Teensy 2.0.

      The Teensy Loader does NOT use the serial driver. It only uses the built-in HID driver, which is a part of every version of Windows. You can look for Teensy in the HID devices in the Windows Device Manager. There may be several if you have a USB keyboard, mouse, joystick and other stuff. Each one you can view the properties and check for 16c0:0478. This page has screenshots:

      Hopefully this info will give you enough to troubleshoot the problem. From the extremely limited description written here, I can't possibly guess what's wrong. But a more precise description of what it should do and what to look for in Windows to verify it's working is the best I can give you.

    32. Missing avatar

      Thomas on October 28, 2012

      @Kgrider: I'm sure you got one of these "Welcome to Teensy 3.0" cards with your Teensy. There are all pins numbered. If you can't locate your card, just use the picture on the front page of this Kickstarter page. attachInterrupt() does work very well. Your "performanceLCD" Sketch looks like a very old one (.pde is Arduino 0022). Maybe you find a newer one somewhere.

    33. Heri Sim
      on October 28, 2012

      Hi Paul, don't think it has been mentioned anywhere before, but does the UART pins have an internal pull-up resistor?

      A 2nd question, I would need to connect to the Zilog ePIR sensor (, which requires the smart sensor's pin 7 (sleep) to be at logical high when 3.3V Vcc is supplied to the sensor. If I connect its VCC to the 3.3V pin on Teensy 3.0, i cannot set digital high before the sensor is powered on (simultaneously with Teensy), so how best to power this board? I would like to avoid a MOSFET or relay. Does the Teensy 3.0 provide enough current on the PWM pins?

      Also, without the crystal, would an ultrasonic sensor such as the HC-SR04 work well? Has this library been ported?:

      New around here. Would appreciate any help and guidance.

    34. Missing avatar

      Bharat V. Patel on October 28, 2012

      @ John - I am not sure I installed the driver and it still doesn't find my device, even after I go to the Found New Hardware Wizard. I have tried it on two computers and it didn't work on either. In addition I have tried to compile and upload from arduino as well as uploading from teensy loader. However, teensy loader can't recognize that I hit the button, and arduino says that as well.

    35. Missing avatar

      Kgrider on October 28, 2012

      @Bharat - I get the same behavior under 64 bit Win 7. To load a sketch, I have to press the button on the teensy. Under ubuntu64, here at home, it resets and loads the new code as expected. I just guess it is a Win7 thing.

    36. Missing avatar

      Kgrider on October 28, 2012

      All I can say is WOW! Awesome piece of hardware and thanks to Paul for all the rapid development! I played a bit with the RTC yesterday. Works very nicely and cleanly! Has anyone written a sketch to have the rtc set its time directly from the running (linux) computer over the serial port? I played a bit with that yesterday and am too much of a noob to figure it out.

      The fix you added for the new liquid crystal library allows my sketches to work. I use all I2C displays and 4 bit and all sketches work fine. One of the examples in this library, though, still does not compile. It is called "performanceLCD" and reports back how fast the display refreshes. The error is:

      performanceLCD.pde: In function 'long int benchmark4(uint8_t)':
      performanceLCD:433: error: 'PSTR' was not declared in this scope
      performanceLCD.pde: In function 'void loop()':
      performanceLCD:479: error: 'PSTR' was not declared in this scope
      performanceLCD:489: error: 'PSTR' was not declared in this scope

      (the library is here . Just install the library (replace the regular LiquidCrystal library) and attempt a compile of this example to reproduce. I am using Beta6 of the teensyduino software)

      I stumbled across this kickstarter and teensy in particular and wonder why I am using arduino boards when the teensy series appear to work better for what I want/need and the teensy3 is way beyond that!

      I want to try a script that uses interrupts. My sketch uses attachInterrupt(), but I do not know which pins are 0,1,2,3,4, etc... Can I get some direction here? (Also, I am still a bit confused even with how this will work on Teensy2 as I also have not found which pins are 0,1,2...) . Currently, I am using a Mega 2560 for this particular project and need 3 interrupts and I want to see how it will work on teensy3 as having a rtc would be a bonus! Some direction for interrupt use on both teensy3 and teensy2 would be appreciated. Sample code and some description would be helpful.

      Thanks in advance!

    37. Missing avatar

      John Beale on October 27, 2012

      @Bharat - have you tried compiling and uploading from the Arduino application? That's what I do.

    38. Ethan Reesor on October 27, 2012

      Is there a K20DX128 specific memory map? I'm building a program that dumps memory over the usb serial connection and I'm trying to figure out which ranges are accessible. Addresses that should be in range based on the K20 reference manual are giving me faults.

    39. Missing avatar

      Bharat V. Patel on October 27, 2012

      Is there something wrong with mine? I downloaded beta six and tried opening teensy.exe, but it doesn't recongnize that my board is in Halfkay mode. I have tried unplugging it, but I just can't get it to work.

    40. Missing avatar

      Thomas on October 22, 2012

      Short note about power consumption: Looks like a Teeny 3.0 in a busy loop needs about 28mA. The RFM12b in receiving mode adds 12mA which makes about 40mA. It should easily be possible to reduce the power consumption by half. This busy loop is not needed as the rf module wakes the CPU as soon as the two sync bytes where received correctly. This gives about 100h of always-on, listening wireless operation on a cheap 2Ah LiPo battery (rough estimation).

      I'm curios about how deep we can go with a Cortex-M4. Using the ATmega328P-PU and the RFM12b module as external wakeup-timer about 2µA (@3.3V) are doable while still being able to wake up on a timer and external interrupts.

    41. Missing avatar

      Jonathan Sorensen on October 22, 2012

      @Thomas - yup I ordered a few 443MHz ones. I'll probably end up making a breakout board or something, at least with T3 I don't have to worry about going from 5v to 3v. which I'll have to do if I stick it on a digispark(when they eventually ship)
      I've also backed the radioblock ( ) which could be useful too. but that's still a couple of months away I think.

    42. Missing avatar

      Thomas on October 22, 2012

      @John: You're right. There is no usage limit on 915MHz in the U.S. / Europe has a limit (less than 1%) on 868MHz. I'm not that sure about 443MHz. (Source:

      @Jonathan: You should be fine on 443MHz and most likely also on 915MHz (according to ModernDevices 915MHz is ok for Australia). Why not make yourself a DIY breakout board:…

      I love these rf modules. They are cheap, available everywhere, have very good power saving modes and work really nice. I do have some range issues but mostly because of the building materials used at my place.

      I'm hoping to be able to build a very simple mesh network on top of a few RFM12b enabled Teensy 3.0. This was clearly too much for the ATmega328 but should not be a problem on a Cortex-M4. But don't wait for it ;-)

    43. Missing avatar

      Jonathan Sorensen on October 22, 2012

      Might have to get me some of those little radios, just have to figure out which freq is good for NZ.
      it's a shame that the breakout boards are more than twice the price of the radios themselves though.

    44. Michael Meissner on October 22, 2012

      @Paul -- unfortunately on the Fedora 17 system (with the 2 HIDRAW devices for the ps/2 -> usb cable for the mouse/keyboard) I get the same hang as I got on the Fedora 14 system with the UPS plugged in. It will probably take me a bit to scrounge up a USB keyboard/mouse for the system to try it without the converter.

    45. Paul Stoffregen 2-time creator on October 22, 2012

      @Ethan Reesor - Sorry I missed your question (from 5 days ago).

      Yes, you can store large lookup tables. It's so very easy. Just declare it as "const", and it will automatically be allocated in flash without consuming any RAM. This is one of the very nice advantages of ARM when compared to AVR. On AVR, the flash is accessed as a different memory space using a different instruction. On AVR, you need to use the special PROGMEM attribute to force a variable into only flash, and then use the inconvenient pgm_read_byte() function to access it. On ARM, none of that is necessary (but I created some empty macros with those names, so AVR code will compile). Just define your large array as const, and it will automatically go into flash and not use RAM. You can read it just like any other variable, without any special functions or macros, because everything on ARM is in the same flat 32 bit (4 gigabyte) address space. If you're used to doing this the AVR way, programming on 32 bit ARM is like waking up from a bad dream!

    46. Missing avatar

      John Beale on October 22, 2012

      @Thomas - I don't know about Europe but my understanding is that 915 MHz (while power-limited under Part 15) is not restricted in duty cycle, except that a product would still need FCC acceptance if you were selling it as a complete unit. I assume gets away with it by selling the JeeNode as a kit. also sells breakout boards for the modules.

    47. Missing avatar

      Thomas on October 22, 2012

      @Paul: Thanks, I'ld love to see something about this library in your next update. Thank you!

      @Paul, @John: I do recommend a breakout board ( or The RFM12b module has non-standard pin-spacing and is not breadboard friendly.

      Are the duty cycle restrictions not on the 868MHz (Europe) and 915MHz (US) bands? 443MHz should be available everywhere and without restrictions.

    48. Missing avatar

      John Beale on October 21, 2012

      @Paul, @Thomas = The HopeRF RFM12B module at 915 MHz is available (and pretty cheap) here: They also sell other modules and other frequencies, but 915 MHz is what you want for use in the US. The 433 MHz band has duty cycle restrictions which make it less useful (if you want to use it legally, anyway)

    49. Paul Stoffregen 2-time creator on October 21, 2012

      @Michael - I suspect something else is going on with the hidraw troubles you're experiencing. The detach request do NOT cause the kernel to unload the hidraw driver. It merely detaches a single USB interface from the hidraw driver, if that interface is not currently in use. The hidraw driver remains operational and able to service other hid interfaces.

      To confirm this, I just did a test here with a Teensy++ 2.0 running the "usb_debug_only" C example talking to the "hid_listen" program, which is using the hidraw driver. Then, while that 2.0 board was running, I programmed a Teensy 3.0 using the Teensy Loader. I clicked "Verify" in Arduino, than manually pressed the pushbutton on the Teensy 3.0. The Teensy Loader detected the board, while hid_listen was still running in another window. After Teensy 3.0 started running the LED blink, I verified the Teensy++ 2.0 was still communicating with the window running hid_listen. Teensy Loader was able to detect the 3.0 board, detach it from the hidraw driver, and upload the LED blink example, while the other board remained connected and operational with the hidraw driver. I tested on Ubuntu 12.04 (64 bit) with the "gnome panel" desktop (no unity for me!) running kernel "3.2.0-32-generic".

      I can't get into troubleshooting your specific system, especially an older version Fedora. Maybe that old version has a bug? I know I've found and reported 3 bugs in hidraw over the last couple years, which Jiri (the hidraw author) fixed quickly and then slowly filtered downstream to the distros. Two of those bugs were serious enough to prevent me from using the hidraw driver in the Teensy Loader. Eventually I'll switch from libusb/usbfs to hidraw, but when I do, it probably will not work on kernels older than 3.0.

      In the meantime, the best I can do is confirm that the driver detach does NOT completely unload the driver from the kernel. It only detaches a single device file (representing a single HID interface) from that driver. The troubles you're experiencing are something else.

    50. Paul Stoffregen 2-time creator on October 21, 2012

      @Thomas - Nice work! I'll mention this on the next update. Any chance you could add a link or info to your readme file about where people can buy just 1 or 2 of these wireless modules?

Show older comments