Sometimes, it is necessary some form of communication between the computer and Arduino. There are some Arduino models with RS232 ports, although models with USB ports are more common nowadays.
But Arduino USB does not work as one could think at first; on older Arduino models  a chip called FT232RL from the Scottish company FTDI [FTDI] is used, this chip converts the serial low velocity TTL output of Arduino’s microcontroller to USB. But USB is a high velocity connection, with complex protocols, not compatible with a low velocity output; when a device uses FTDI chip, a device driver in the computer (whether Mac or PC) creates a virtual COM port (virtual meaning that is created by software), allowing any program to communicate with Arduino by this COM port.
This characteristic limits seriously Arduino USB port usage , it is possible for instance read data from sensors connected to Arduino or send commands for Arduino to act on servos, motors, relays, etc.
Another common use of communications is for debugging. As Arduino does not support a step-by-step debug mode , the way to debug is to send data to a computer about what you want to observe about the program, such as, by what parts the code flow has passed, what is the value of a variable, etc.
But this communication by a virtual COM port does not allow using Arduino as a a normal USB device, like for example simulate devices that implement HID interface (keyboards and mouses), MIDI devices, devices that act as external storage devices, or in a reverse way, to connect such devices to Arduino, or read data as it was a storage device, like a pen drive (in case of storing sensor data for instance).
In 2010 were released Arduino Uno [ARD1], and Arduino Mega 2560 [ARD3], and among other changes, the FTDI chip was replaced by AVR ATmega8U2 [ATM1] [LIM1]. This microcontroller acts in the same way, a device driver is needed to create a virtual COM port, the difference is that its firmware can be reprogrammed so that it can simulate other USB devices.
But this is not so simple as programming Arduino; at first, for that it is needed to close a jumper [LIM2] on Arduino board to allow firmware upgrade of the ATmega8U2. After that there are two different ways to make the change: you can solder a 6 pin header for in-circuit programming , this requires that you have a microcontroller programmer that allows ISP. Another way to change the ATmega8U2 firmware is to take advantage of its own bootloader, that works exactly the same way as the ATmega328 that controls Arduino. Thus, each time Arduino is reset it observes USB input and if no new firmware is coming it executes the current one, but if a new one is, it updates the firmware with the one coming from USB through a protocol called DFU .
Again, this is not simple, the ATmega8U is not programmed like Arduino in a high level language, the firmware must be written in assembly, and the new firmware upload must be done with another software that is not the Arduino IDE .
All that seems to be too much work, and goes against Arduino’s own principles of simplicity, besides it makes more difficult to build an Arduino at home or by a third party. Many people turned to Teensy [TEE1] to solve these issues.
Teensy is a simple and cheap board, but it is not physically like Arduino, it looks more like Arduino Nano [ARD4], it is made to be inserted in breadboards or another printed circuit boards, therefore no shields are put over it.
The first Teensy used microcontrollers from the same family as Arduino Nano, but with on chip USB controller, for example Arduino Nano 3.0, uses ATmega328, and Teensy uses ATmega32U4  [ATM3] (the U in the name means the on chip USB), Teensy 3.0 uses an ARM Cortex M4 microcontroller, much more powerful.
The Teensy board can be programmed with the same Arduino IDE, with the help of an add-on called Teensyduino [TEE2], and it allows easily simulate a keyboard or a mouse programming code normally, an example of this can be seen at: [SAT1].
In 2011 was released Arduino Leonardo [ARD2], that solves these problems, it uses an ATmega32U4 microcontroller [ATM3] (the same one used in Teensy 2.0), but before you get excited, there are some problems.
One of the changes is that the header (the place where shields are placed) pin layout was modified [CRI1], the changes include:
- The removal of the SPI pin  from the header, now it is accessible by the ICSP connector only;
- The I2C pin  in header position was moved;
There are a reset pin, that allow shields have a reset button as they blocked access to the reset button on the Arduino board, by getting over it;
all these changes should make most of the shields made for other Arduino models not work with Arduino Leonardo (Arduino Uno R3 was upgraded to this new pin layout too).
But maybe the most important change be that; as USB now is controlled by the microcontroller and not by a dedicated IC, the bootloader increased in size from 0.5 KB to 4kB, what in a 32kB total memory is considerable. In addition each time a reset is made, the virtual COM port (yes, it continues to exist) disappears, to reappear again, and any connection made with the device by a software in the computer must be restored.
But the problems do not end there. To understand the reason of that, you need to understand how USB port works; there are two ways of the computer identify the device connected to an USB port. One is by the USB device class. The class tells for instance, if it is a HID (Human Interface Device, like a keyboard or mouse), or a CDC device , like a modem, etc. The other way to identify an USB device is by its VID/PID (Vendor ID/Product ID) that are numbers that uniquely identify the manufacturer and the device. These numbers are attributed by a non-profit organization, that controls it, the USB Implementers Forum, Inc., and to obtain them, you must purchase a VID (about US\$ 2000) but in it you have 65535 PIDs available .
The original Arduino Leonardo identifies itself as an CDC device. This is enough for Linux, or Mac OS, but in Windows the identification is made primarily by VID/PID, and by it the correct driver is used. Because of that when you connect an Arduino Leonardo to Windows it is identified as such, and an .inf file is needed to tell that this this VID/PID combination will use the USB CDC driver. To make it even more complicated, Arduino Leonardo must use a different VID/PID for the bootloader and for the USB core that controls the communication the computer.
But in the case of possible Arduino Leonardo clones , that will have different VIDs/PIDs, they cannot use the same driver of Arduino Leonardo directly with the same .inf, so there will be needed an specific .inf file for the clone (essentially the same .inf with the new VID/PID). On Arduino IDE on Linux and Mac OS, you can select the board as Arduino Leonardo, but on Windows you will need to add a new section for the clone on the boards.txt [AKA1].
None of this happens with Arduino models with FTDI chips, the FTDI chip VID/PID pair is used independently of the board being a clone or not, with no difference whatsoever.
But not everything is problematic. As USB communication is controlled by USB kernel in bootloader, internal UART connected to pins 0 and 1 is not used anymore to communicate with the computer and this is good. If you needed to use UART to communicate wit a component and discovered that this component connected to pins 0 and 1 prevented communication with the computer you will understand what I say. Another good change is that USB connector on the board is a micro USB, the same used in smartphones, what makes far easier to find a spare cable at home.
None of the devices described until now can act as an USB host, that is, you cannot connect USB devices like keyboards, mouses, etc. to them. Not the FT232RL chip on Arduino NG, Diecimila and Duemilanove, nor the ATmega8U2 on Arduino UNO, or ATmega32U4 on Arduino Leonardo can act as an USB host. There are the USB host shield for Arduino that uses Max3421 chip from Maxim [MAX1] that have this capability, with it you can connect things like keyboards, mouses, barcode scanners, etc. to the Arduino [ARD5].
In October 2012 was released the Arduino Due [ARD6], based on 32 bit ARM microcontrollers family, the Cortex-M3 [WIKI6], more exactly the Atmel licensed version of this controller, the ATSAM3X8E [ATM4], thanks to this version of Cortex-M3, the Arduino Due has USB hosting capability.
Besides, Arduino Due can do more; normally USB devices are hosts (like your computer) or are devices (like mouses, keyboards, external hard drives, etc.). There are an specification called USB On-The-Go, or OTG [WIKI7]. A USB OTG device can exchange roles and act as host when connected to a device, but if it is connected to a host it becomes a device . A common case are smartphones that can act as mass storage devices connected to a computer, or as a host, if they are connected to devices like keyboards, mouses, external hard disks, etc. Arduino Due supports USB OTG.
The Arduino Due has headers in Arduino Mega format, but as for compatibility, it works on 3.3V and thus it should not be compatible with most existing shields, and interfacing with 5V sensors becomes more complicated. Another new thing are two real analog outputs (and not only PWM), existing even audio libraries.
The Arduino Due still supports the CAN bus [WIKI8], created by Bosch, that is the communication standard for automobiles internal devices. This must let vehicle enthusiasts crazy to try. Although, as far as I know there are no CAN libraries yet [UPD1].
An interesting thing is that ATSAM3X8E (and all chips from the SAM3X e SAM3A series) already comes with a bootloader called SAM-BA  in a 16k ROM internal to the chip [ATM5] [ATM6], that means that it occupies no space in the flash memory, but can not be modified [ARD6], there is although a bit that can be set for the boot be done using the flash RAM .
It works like this: if this bit is 0, the internal ROM is mapped on 0x0 memory address, if it is 1 the flash RAM is mapped, in this case, the way to come back to using the original bootloader is to reset this bit and the flash RAM putting ERASE pin in 1. But in Arduino Due case there is a button to erase the flash RAM, that puts ERASE pin in 1 and this pin is used to upload a new program too. Thus if you thought of putting a secondary bootloader in the flash RAM as a hack, quit, because it will be erased[ ARD7].
But there is another question, the price. It costs US\$ 60. Just remember that even for this price a Raspberry Pi is cheaper. For much less you can purchase an Stellaris LaunchPad [TI1] from Texas Instruments, that uses the Stellaris controller LM4F120H5QR [TI2] [UPD2], based on ARM Cortex-M4 series[WIKI9], the same used in Teensy 3.0. Stellaris series was originally created by a company called Luminary Micro, acquired in 2009 by Texas Instruments [WIKI10]. This board works with 3.3V, operates at almost the same clock frequency (80 MHz) that the Arduino Due and supports USB OTG and USB hosting [UPD3].
The main difference is that you write your programs in a tool called Code Composer Studio (that is nothing else than a customized version of Eclipse) and develops your programs in C [UPD4]. The great advantage that you have access to real debug, with breakpoints and variable visualization. Unlike Arduino IDE, it is a real professional tool. There are off course some details that need care to debug, as for instance disabling watchdog timers (you don’t want to receive a reset or an interrupt while stopped at a breakpoint).
A point where Arduino Due wins I its 512Kb of memory against 256Kb on the Stellaris LaunchPad, but remains the doubt for the size efficiency in a code size generated by Code Composer Studio versus one generated by Arduino IDE.
The Code Composer Studio is a paid software and very well paid indeed (the price depends on license type). But it is free if connected to a LaunchPad (Code Composer Studio for the Stellaris LaunchPad), what is fair, if you are a hobbyist developer it is free, if you develops a commercial product you pay for it. That is why these TI kits are called evaluation kits. I have used Code Composer Studio with other kits from Texas as EZ430 and MSP430 LaunchPad and it was a pleasant experience.
The problem with boards like Arduino Leonardo, Arduino Due and Stellaris LaunchPad is that chips are not DIP (Dual In-line Package, meaning two rows of parallel pins) in a socket, that can be removed and put in the final project. CORTEX-M3 and M4 chips have many pins, and have a QFP (Quad Flat Package, that is four lines of pins for surface mount or SMD) soldered on the board. It would be hard for a hobbyist to use a chip like this in the final project (not to mention that it cannot be removed). Other versions of the chip include BGA (Ball Grid Array) where the pins are under the chip, making that the board must have several layers to access the pins at the center; that is beyond the reach of the hobbyist too. Therefore, no more breadboard mounted Arduinos, or made at home, and far less made by small manufacturers all around the world.
If such is the case I prefer the MSP430 LaunchPad, that is a cheap and small board, that can be included in your final project easily (Arduino Due is too big and too expensive to put all the board in your final project), with the advantage that the DIP chip can be removed and put on the final project.
In an attempt to overcome Arduino limitations were introduced incompatibilities with earlier models, both in pinout and voltage, it became more expensive to get and Arduino and you cannot remove the chip for using in a project.
These things alienate the current users from new model Arduinos and facilitate migration to other platforms. Arduino began a revolution, but I think it will not end it. We are at a very interesting moment, where we have at our disposal cheap and powerful boards that will compete for this market in best conditions, like Teensy, LaunchPad, Stellaris LaunchPad, Papilio One (with FPGA). And we still have more sophisticated things, but incredibly cheap like Raspberry Pi, and BeagleBoard (that fits inside an Altoids case) that run an Ubuntu version and are already used as media centers, game consoles, internet radios, and PABX fro IP telephony.
I already have two Raspberry Pi and its acrylic boxes, half a dozen LaunchPads, and as soon as my Stellaris LaunchPad and my Papilio One arrive I will make new posts.
. Communication with the computer implies a running program on that side, it is common during development to use some terminal program to send and receive serial data from and to Arduino. Previously there were HyperTerminal, very basic, but from Windows Vista on, it is not included anymore. It is not made by Microsoft, but by another company, Hilgraeve and still exists in a paid version, with a 30 day trial [HIL1], there is however a far better software, free and open source, the RealTerm [RET1].
. There is no way to make debug by hardware on Arduino without modifying the board. AVR microcontrollers have a debug circuit in the microcontroller itself, that is called in-circuit debugger (ICD sometimes). The debug circuit is controlled by the reset pin by a proprietary Atmel protocol called debugWIRE. There are two reasons for Arduino not supporting hardware debug, in first place the protocol is proprietary and only supported in Atmel programmers; in second Arduino uses the reset pin when a sketch (program) is received by USB port. There is a way of make debug by software [VIM1], but it is limited and requires using Visual Studio.
. Or ISP from In-System Programming [WIKI1], that allows programming the microcontroller without removing it from the circuit.
. DFU means Device Firmware Update [USB1].
. While I wrote and revised this post, it was released Arduino Micro [ARD8], that costs US\$ 25, we can say that it is the Arduino Leonardo Nano that uses the ATMega32U4 [ATM3] exactly like the Teensy 2.0. Meanwhile there are speculations about Arduino Due Nano or Micro, that would be like the Teensy 3.0 released last month by about US\$ 20, cheaper than Arduino Due(US\$ 60) its big equivalent and a little cheaper than Arduino Leonardo.
. SPI means Serial Peripheral Interface [WIKI5], that is a synchronous communication bus (meaning that it needs a clock) created by Motorola semiconductor division (today Freescale Semiconductor, Inc.). It is very used in displays, and on SD cards there are a SPI communication mode, intended for communication with microcontrollers, being simpler for them.
. I2C, or IIC (that means Inter-Integrated Circuit) [WIKI3], also called 2-wire, is a communication bus designed by Phillips semiconductor division (today NXP semiconductors), originally for for low speed communications between ICs on the same board. Being a bus, its formal definition includes both the electrical part and the protocol part. It is used, for instance, in the serial EEPROM memory 24c32 (replaced by the 24LC32A [MIC]), very used with PICs.
. Or Communication Device Class [WIKI4].
. There are other ways, like becoming a member of the USB Implementers Forum, Inc., paying an annual fee, or getting a PID from the manufacturer of the used chip, like FTDI or Microchip [OOI1].
. It is one of the 3 bit group called General Purpose Non-volatile Memory Bits, abbreviated GPNVM bits. The bit 0 set makes that you cannot access the flash RAM, only erase it by the ERASE pin. The bit 1 set makes the boot to be done by the flash RAM (mapped in the start of the device memory instead of the ROM), and the bit 3 chooses between flash RAM 0 or 1.
[FTDI]: FTDI Chip Home Page. Available at: <http://www.ftdichip.com/>. Accessed at: 22 JUL 2012.
[HIL1]: HyperTerminal Free Trial - for Windows 7 Vista XP - Hilgraeve. Available at: <http://www.hilgraeve.com/hyperterminal-trial>. Accessed at: 22 JUL 2012.
[VIM1]: A Practical Arduino Debugger - Simple, Flexible and Very Powerful. Available at: <http://www.visualmicro.com/post/2012/05/05/Debug-Arduino-Overview.aspx>. Accessed at: 03 DEC 2012.
[RET1]: Terminal Software. Available at: <http://realterm.sourceforge.net/>. Accessed at: 22 JUL 2012.
[ARD1]: Arduino - ArduinoBoardUno. Available at: <http://arduino.cc/en/Main/ArduinoBoardUno/>. Accessed at: 24 JUL 2012.
[ARD3]: Arduino - ArduinoBoardMega2560. Available at: <http://arduino.cc/it/Main/ArduinoBoardMega2560>. Accessed at: 25 JUL 2012.
[ATM1]: ATMEL CORPORATION. ATmega8U2/16U2/32U2 Datasheet. San Jose, CA, 2010. Available at: <http://www.atmel.com/Images/7799S.pdf>. Accessed at: 22 JUL 2012.
[LIM1]: FRIED, Alumna Limor. Arduino UNO Frequently Asked Questions (FAQ): New USB chip. [s.l.], 2012. Available at: <http://www.ladyada.net/library/arduino/unofaq.html#new_usb_chip>. Accessed at: 22 JUL 2012.
[LIM2]: FRIED, Alumna Limor. Arduino UNO Frequently Asked Questions (FAQ): How can I change the USB firmware. [s.l.], 2012. Available at: <http://www.ladyada.net/library/arduino/unofaq.html#how_can_i_change_the_usb_firmware>. Accessed at: 22 JUL 2012.
[WIKI1]: In-system programming. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/In-system_programming>. Accessed at: 22 JUL 2012.
[USB1]: USB IMPLEMENTERS FORUM. USB Device Firmware Upgrade Specification, Revision 1.0. [s.l.], 1999. Available at: <http://www.usb.org/developers/devclass_docs/usbdfu10.pdf>. Accessed at: 24 JUL 2012.
[ATM2]: FLIP- Atmel Corporation. Available at: <http://www.atmel.com/tools/FLIP.aspx>. Accessed at: 24 JUL 2012.
[DFU1]: dfu-programmer. Available at: <http://dfu-programmer.sourceforge.net/>. Accessed at: 24 JUL 2012.
[TEE1]: Teensy USB Development Board. Available at: <http://www.pjrc.com/teensy/>. Accessed at: 24 JUL 2012.
[ARD4]: Arduino – ArduinoNano. Available at: <http://www.arduino.cc/en/Main/ArduinoBoardNano>. Accessed at: 17 NOV 2012.
[ARD8]: Arduino - ArduinoBoardMicro. Available at: <http://arduino.cc/en/Main/ArduinoBoardMicro>. Accessed at: 28 NOV 2012.
[ATM3]: ATmega32U4 - Atmel Corporation. Available at: <http://www.atmel.com/devices/atmega32u4.aspx>. Accessed at: 17 NOV 2012.
[CRI1]: CRISTOFARO, John M. De. Arduino Leonardo Pinout Reference. [New Jersey], 3 JUN 2012. Available at: <http://www.adafruit.com/blog/2012/06/03/arduino-leonardo-pinout-reference/>. Accessed at: 17 NOV 2012.
[WIKI2]: ARM Cortex-M : Cortex-M4. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M4>. Accessed at: 17 NOV 2012.
[TEE2]: Teensyduino – Add-on for Arduino IDE to use Teensy USB development board. Available at: <http://www.pjrc.com/teensy/teensyduino.html>. Accessed at: 17 NOV 2012
[SAT1]: SATOMI, Mika, PERNER_WILSON, Hannah. Teensy as a HID device. In: How to get what you want. [s.l.], . Available at: <http://www.kobakant.at/DIY/?p=2497>. Accessed at: 25 JUL 2012.
[ARD2]: Arduino - ArduinoBoardLeonardo. Available at: <http://arduino.cc/en/Main/ArduinoBoardLeonardo>. Accessed at: 24 JUL 2012.
[WIKI5]: Serial Peripheral Interface Bus. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus>. Accessed at: 21 NOV 2012.
[WIKI3]: I²C. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/I%C2%B2C>. Accessed at: 18 NOV 2012.
[MIC]: Microchip Technology Inc. 24C32: 32K 5.0V I2C Smart Serial EEPROM. Chandler, Arizona, 2004. Available at: <http://ww1.microchip.com/downloads/en/DeviceDoc/21061H.pdf>. Accessed at: 18 NOV 2012.
[WIKI4]: Universal Serial Bus : Device Classes. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/Universal_Serial_Bus#Device_classes>. Accessed at: 19 NOV 2012.
[OOI1]: OOIJEN, Wouter van . How to obtain an USB VID/PID for your project. Amersfoort, Netherland, . Available at: <http://www.voti.nl/docs/usb-pid.html>. Accessed at: 19 NOV 2012.
[AKA1]: Akafugu Corporation. USB and serial ports on Arduino Leonardo. Tokio, 2012. Available at: <http://www.akafugu.jp/posts/blog/2012_06_13-USB-and-serial-ports-on-Arduino-Leonardo/>. Accessed at: 19 NOV 2012.
[MAX1]: Maxim Integrated. MAX3421E: USB Peripheral/Host Controller with SPI Interface. San Jose, CA, 2007. Available at: <http://www.maximintegrated.com/datasheet/index.mvp/id/3639>. Accessed at: 21 NOV 2012.
[ARD5]: Can Leonardo be used as a USB host? - Arduino Forum. Available at: <http://arduino.cc/forum/index.php?topic=108994.0>. Accessed at: 19 NOV 2012.
[WIKI6]: ARM Cortex-M: Cortex-M3. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M3>. Accessed at: 21 NOV 2012.
[ATM4]: ATSAM3X8E - Atmel Corporation. Available at: <http://www.atmel.com/devices/SAM3X8E.aspx>. Accessed at: 21 NOV 2012.
[WIKI7]: USB On-The-Go. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/USB_On-The-Go>. Accessed at: 21 NOV 2012.
[WIKI8]: CAN bus. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/CAN_bus>. Accessed at: 21 NOV 2012.
[ATM5]: Atmel Corporation. AT91SAM ARM-based Flash MCU SAM3X SAM3A Series. Features: Memories, p.1. San Jose, CA, 2012. Available at: <http://www.atmel.com/Images/doc11057.pdf>. Accessed at: 27 NOV 2012.
[ATM6]: Atmel Corporation. AT91SAM ARM-based Flash MCU SAM3X SAM3A Series. Internal ROM, p.38. San Jose, CA, 2012. Available at: <http://www.atmel.com/Images/doc11057.pdf>. Accessed at: 27 NOV 2012.
[ARD6]: Arduino - ArduinoBoardDue. Available at: <http://arduino.cc/en/Main/ArduinoBoardDue>. Accessed at: 21 NOV 2012.
[ATM7]: Atmel Corporation. AT91SAM ARM-based Flash MCU SAM3X SAM3A Series. SAM-BA Boot, p.40. San Jose, CA, 2012. Available at: <http://www.atmel.com/Images/doc11057.pdf>. Accessed at: 27 NOV 2012.
[ARD7]: What about the bootloader? - Arduino Forum. Available at: <http://arduino.cc/forum/index.php/topic,128913.0.html>. Accessed at: 21 NOV 2012.
[TI1]: Stellaris LM4F120 LaunchPad Evaluation Kit - EK-LM4F120XL - TI Tool Folder. Available at: <http://www.ti.com/tool/ek-lm4f120xl>. Accessed at: 21 NOV 2012.
[TI2]: LM4F Cortex-M4F Series - LM4F120 Series - LM4F120H5QR - TI.com. Available at: <http://www.ti.com/product/lm4f120h5qr>. Accessed at: 21 NOV 2012.
[TI3]: ARM® Cortex®-M4F Based MCU TM4C123G LaunchPad Evaluation Kit - EK-TM4C123GXL - TI Tool Folder. Available at: <http://www.ti.com/tool/ek-tm4c123gxl>. Accessed at: 24 FEB 2016.
[TI4]: TM4C123GH6PM | TM4C12x | Control + Automation | Description & parametrics. Available at: <http://www.ti.com/product/TM4C123GH6PM>. Accessed at: 24 FEB 2016.
[TI5]: Texas Instruments. Getting Started With the Stellaris EK-LM4F120XL LaunchPad Workshop. p7-5. Plano TX, 2013. Available at: <http://software-dl.ti.com/trainingTTO/trainingTTO_public_sw/GSW-Stellaris-LaunchPad/StellarisLaunchPadWorkbook.pdf>.Accessed at: 24 FEB 2016.
[WIKI9]: ARM Cortex-M : Cortex-M4. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M4>. Accessed at: 21 NOV 2012.
[WIKI10]: Luminary Micro. In: Wikipedia. Available at: <http://en.wikipedia.org/wiki/Luminary_Micro>. Accessed at: 21 NOV 2012.
[ARD8]: Building a CAN API for Arduino DUE. Available at: <http://forum.arduino.cc/index.php?topic=131096.0>. Accessed at: 24 FEB 2016.
[COL1]: GitHub - collin80/due_can: Object oriented canbus library for Arduino Due compatible boards. Available at: <https://github.com/collin80/due_can>. Accessed at: 24 FEB 2016.
[UPD3]: There is an error here. The USBLib supported USB hosting and USB OTG, but LM4F120H5QR USB port was device only, as stated at [TI5]. The later version of LaunchPad supports both.