Por vezes é necessária alguma forma de comunicação entre o computador e o Arduino. Existem modelos de Arduino com portas RS232, embora hoje em dia sejam mais comuns os com portas USB.
Mas a USB do Arduino não funciona da maneira como se poderia pensar inicialmente; nos modelos antigos de Arduino [1] utiliza-se um chip chamado FT232RL da empresa escocesa FTDI [FTDI], este chip converte a saída serial TTL de baixa velocidade do microcontrolador do Arduino para USB. Mas o USB é uma conexão de alta velocidade, com protocolos complexos, não compatíveis com uma saída serial de baixa velocidade, quando um dispositivo usa o chip da FTDI, um driver no computador (seja ele Mac ou PC) cria uma porta COM virtual (ou seja criada por software), permitindo à qualquer programa se comunicar com o Arduino usando esta porta COM.
Essa característica limita muito o uso da porta USB do Arduino [2], é possível, por exemplo, ler dados de sensores ligados ao Arduino ou enviar comandos para que o Arduino atue sobre servos, motores, relês, etc.
Outro uso comum da comunicação serial é para debug. Como o Arduino não permite um modo de debug passo a passo [3], a maneira de fazer debug é enviar os dados para o computador que se quer observar sobre o programa, como por exemplo, por que parte o fluxo do código passou, qual o valor de uma variável, etc.
Mas esta comunicação por uma porta COM virtual não permite utilizar o Arduino como um dispositivo USB normal, como por exemplo simular dispositivos que implementam uma interface HID (teclados e mouse), dispositivos MIDI, dispositivos que agem como um dispositivo de armazenamento de massa externo, ou de maneira oposta, conectar estes dispositivos a um Arduino, ou ler dados do Arduino como se ele fosse um dispositivo de armazenamento de massa, como um pen drive (por exemplo caso ele armazene dados de sensores).
Arduino Uno
Em 2010 foram lançados o Arduino Uno [ARD1], e o Arduino Mega 2560 [ARD3] e entre outras modificações o chip da FTDI foi substituído pelo microcontrolador AVR ATmega8U2 [ATM1] [LIM1]. Este microcontrolador age da mesma maneira, necessitando um driver para criar uma porta COM virtual, a diferença é que ele pode ter seu firmware reprogramado de modo a simular outros dispositivos USB.
Mas isso não é tão simples como programar o Arduino; em primeiro lugar, para isso é necessário fechar um jumper [LIM2] na placa do Arduino para permitir atualizar o firmware do ATmega8U2. A partir daí existem duas maneiras diferentes de fazer a mudança: pode-se soldar um conjunto de 6 pinos para programação em circuito [4], isso exige que se possua um programador de microcontrolador que permita ISP. A outra maneira de mudar o firmware do ATmega8U2 é aproveitar o fato dele ter um bootloader, que funciona exatamente da mesma maneira que o ATmega328 que controla o Arduino. Assim a cada vez que o Arduino sofrer reset ele observa a entrada USB e se não estiver vindo um novo firmware ele executa o atual, mas se estiver ele atualiza o firmware com o que vem pela USB através de um protocolo chamado DFU [5].
Novamente isso não é tão simples, não se programa o ATmega8U2 com uma linguagem de alto nível como o Arduino, o firmware tem de ser escrito em assembly, e o upload do novo firmware tem de ser feito com outro software que não a IDE do Arduino [6].
Teensy
Tudo isso parece muito trabalho e vai contra os próprios princípios de simplicidade do Arduino, além do mais torna mais difícil fazer um Arduino em casa ou por terceiros. Muitas pessoas se voltaram para o Teensy [TEE1] para resolver estes problemas.
O Teensy é uma placa simples e barata, mas ele não é fisicamente como o Arduino, ele parece mais com um Arduino Nano [ARD4], é feito para se colocar em protoboards ou em outras placas de circuito impresso, assim sendo não se colocam shields sobre ele.
Os primeiros Teensy utilizavam microcontroladores da mesma família dos Arduinos Nano, mas com USB embutida no controlador, o Arduino Nano 3.0, por exemplo, usa o ATmega328 e o Teensy 2.0 usa o ATmega32U4 [7] [ATM3] (o U no nome indica a USB embutida), o Teensy 3.0 utiliza um microcontrolador ARM Cortex M4 [WIKI2], bastante mais poderoso.
O Teensy pode ser programado usando a mesma IDE do Arduino, adicionando um add-on chamado Teensyduino [TEE2], e permite facilmente simular um teclado ou mouse programando o código normalmente, um exemplo disso pode ser visto em: [SAT1].
Arduino Leonardo
Em 2011 foi lançado o Arduino Leonardo [ARD2], que resolve estes problemas, ele usa um microcontrolador ATmega32U4 [ATM3] (o mesmo que o Teensy 2.0), mas antes que você se anime, existem alguns senões.
Uma das mudanças é que layout dos pinos do header (onde se colocam os shields) foi modificado [CRI1], as modificações incluem:
- A retirada do pino de SPI [8] do header, agora ele é acessível apenas pelo conector ICSP;
- o pino I2C [9] mudou de lugar no header;
- existe um pino de reset, o que permite os shields terem um botão de reset , pois eles bloqueiam o acesso ao botão de reset na placa do Arduino, por ficarem sobre a placa;
todas estas mudanças devem fazer a maioria dos shields existentes para os outros Arduinos não funcionarem com o Arduino Leonardo (o Arduino Uno R3 também foi atualizado para este novo layout de pinos).
Mas talvez a mudança mais importante seja a seguinte; como agora a USB é controlada pelo microcontrolador e não por um CI dedicado, o bootloader aumentou de tamanho, de 0,5kB para 4kB o que em um total de 32kB de memória é bastante. Além disso cada vez que é feito um reset, a porta COM virtual (sim, ela continua a existir) some, para depois reaparecer e qualquer conexão feita com o dispositivo por um software no micro é perdida e deve ser reestabelecida.
Mas os problemas não acabam aí. Para entender o porque isso é preciso entender como a porta USB funciona; existem duas maneiras do computador identificar o dispositivo conectado à uma porta USB. Uma delas é pela classe do dispositivo USB. A classe diz por exemplo, se é um dispositivo HID (Human Interface Device, como teclado ou mouse), ou um dispositivo CDC [10], como um modem, etc. A outra maneira de identificar um dispositivo USB é pelo VID/PID (Vendor ID/Product ID) que são números que identificam univocamente o fabricante e o dispositivo. Estes números são atribuídos por uma organização sem fins lucrativos que controla isso, a USB Implementers Forum, Inc., e para obtê-los, você deve comprar um VID (cerca de US\$ 2000) mas dentro dele você tem a disposição 65535 PIDs [11].
O Arduino Leonardo original se identifica como um dispositivo da classe CDC. Isso basta para o Linux ou o Mac OS, mas no Windows a identificação é feita primariamente pelo VID/PID, e através deles o driver correto é usado. Por isso ao conectar um Arduino Leonardo no Windows ele é identificado como tal, e é preciso um arquivo .inf que diga que esta combinação VID/PID utilizará o driver USB CDC. Para deixar tudo mais complicado ainda, o Arduino Leonardo precisa utilizar um par VID/PID para o bootloader e um outro para o core USB que controla a comunicação com o micro.
Mas no caso dos possíveis clones do Arduino Leonardo [12], que terão VIDs/PIDs diferentes, eles não podem utilizar o driver do Arduino Leonardo diretamente com o mesmo arquivo .inf, assim será necessário um arquivo .inf específico para o clone (essencialmente o mesmo arquivo .inf de antes com os novos VID/PID). Na IDE do Arduino no Linux e no Mac OS, você poderá selecionar a placa como Arduino Leonardo, mas no Windows você terá de adicionar uma seção nova para o clone no arquivo boards.txt [AKA1].
Nada disso acontece no caso dos Arduinos com chips FTDI, o VID/PID da FTDI é utilizado independente da placa ser um clone ou não, não havendo diferença nenhuma.
Mas nem tudo são problemas. Como a comunicação com a USB é controlada pelo núcleo USB no bootloader, o UART interno conectado nos pinos 0 e 1 não é mais usado para comunicação com o micro, isso é bom. Se você já precisou usar o UART para comunicar com um componente e descobriu que este componente conectado aos pinos 0 e 1 impedia a comunicação com o computador vai entender o que eu digo. Outra boa mudança é que o conector USB da placa é um conector micro USB igual dos smartphones, o que torna muito mais fácil achar um cabo sobrando em casa.
USB hosting
Nenhum dos dispositivos descritos até agora pode agir como host USB, ou seja, você não pode conectar dispositivos USB como teclados, mouses, etc. a eles. Nem o chip FT232RL dos Arduinos NG, Diecimila e Duemilanove, nem o ATmega8U2 do Arduino Uno, ou o ATmega32U4 do Arduino Leonardo podem agir como host USB. Existe o USB host shield para o Arduino, que utiliza o chip Max3421 da Maxim [MAX1] e que tem essa capacidade, com ele você pode ligar coisas como teclados, mouses, scanners de código de barras, etc. ao Arduino [ARD5].
Em outubro de 2012 foi lançado o Arduino Due [ARD6], baseado na família de microcontroladores ARM de 32 bits, o Cortex-M3 [WIKI6], mais exatamente a versão licenciada pela Atmel desse controlador, o ATSAM3X8E [ATM4], graças a esta versão do Cortex-M3 o Arduino Due tem a capacidade de USB hosting.
Além disso o Arduino Due faz mais; normalmente dispositivos USB, ou são hosts (como seu computador) ou são clientes (como mouses, teclados, discos externos, etc.). Existe uma especificação chamada USB On-The-Go, ou OTG [WIKI7]. Um dispositivo USB OTG pode trocar de papel e agir como host quando tiver um dispositivo ligado a ele, mas se for conectado a um host ele se torna o dispositivo. Um caso comum são smartphones que podem agir como dispositivos de armazenamento ligado a um microcomputador, ou como host, se forem ligados a ele dispositivos com teclados, mouses, discos externos, etc. o Arduino Due suporta o USB OTG.
O Arduino Due tem headers no formato do Arduino Mega, mas quanto a compatibilidade, ele trabalha com 3,3V sendo assim não deve ser compatível com a maioria dos shields existentes, e a interface com sensores de 5V fica mais complicada. Outra novidade são duas saídas analógicas reais (e não apenas PWM), existindo até bibliotecas de áudio.
O Arduino Due também suporta o bus CAN [WIKI8], criado pela Bosch, que é o padrão de comunicação para dispositivos internos de automóveis. Isso deve deixar os aficionados por veículos loucos de vontade de experimentar. No entanto até onde eu saiba ainda não existem bibliotecas que suportem o CAN [UPD1].
Uma coisa interessante é que o o ATSAM3X8E (e todos das séries SAM3X e SAM3A) já vem com o bootloader chamado SAM-BA [13] em uma ROM de 16k interna ao chip [ATM5] [ATM6], ou seja ele não ocupa espaço na memória flash, mas não pode ser mudado [ARD6], no entanto existe um bit que pode ser setado para que o boot seja feito pela flash RAM [14].
A coisa funciona assim: se este bit for 0 a ROM interna é mapeada no endereço 0x0 da memória, se for 1 a flash RAM é mapeada, neste caso, a maneira de voltar a usar o bootloader original é resetar este bit e a flash RAM colocando o pino ERASE em 1. Mas no caso do Arduino Due existe um botão para apagar a flash RAM, que coloca o pino ERASE em 1 e esse pino também é acionado ao se fazer upload de um programa. Assim se você pensou em colocar um bootloader secundário na flash RAM como um hack, desista pois ele será apagado [ARD7].
Mas existe uma outra questão, o preço. Ele custa US\$ 60. Basta lembrar que por este preço mesmo um Raspberry Pi sai mais barato. Por muito menos, cerca de US\$ 13 você pode comprar uma placa Stellaris LaunchPad [TI1] da Texas Instruments, que usa o controlador Stellaris LM4F120H5QR [TI2] [UPD2], baseado na série ARM Cortex-M4 [WIKI9], a mesma usada no Teensy 3.0. A série Stellaris foi criada originalmente por uma companhia chamada Luminary Micro, adquirida em 2009 pela Texas Instruments [WIKI10]. Esta placa trabalha em 3,3V, opera praticamente na mesma frequência de clock (80MHz) que o Arduino Due (84MHz) e suporta USB OTG e USB hosting [UPD3].
A diferença principal é que você escreve os programas em uma ferramenta chamada Code Composer Studio (que nada mais é que uma versão customizada do Eclipse) e desenvolve os programas em C [UPD4]. A grande vantagem é que você tem acesso a debug real, com breakpoints e visualização de variáveis. Ao contrário da IDE do Arduino, ele é realmente uma ferramenta profissional. Existem é claro alguns detalhes que se devem cuidar para fazer debug, como por exemplo desabilitar os watchdog timers (você não quer receber um reset ou uma interrupção enquanto está parado em um breakpoint).
Um ponto onde o Arduino Due ganha são 512Kb de memória contra 256Kb no Stellaris LaunchPad, mas fica a dúvida quanto a eficiência em tamanho de um código gerado no Code Composer Studio versus um gerado na Arduino IDE.
O Code Composer Studio no entanto é um programa pago e bem pago (o preço depende do tipo de licença). Mas ele é grátis se conectado ao LaunchPad (Code Composer Studio for the Stellaris LM4F120 LaunchPad), o que é bem justo, se você desenvolver para hobbysmo é grátis, se desenvolver um produto comercial paga por ele. Por isso os kits da TI são chamados de evaluation kits. Já utilizei o Code Composer Studio com outros kits da Texas como o EZ430 e o MSP430 LaunchPad e foi uma experiência agradável.
Um problema das placas como o Arduino Leonardo, o Arduino Due, e o Stellaris LaunchPad é que os chips não são mais DIP (Dual In-line Package, ou seja duas carreiras de pinos alinhados) em um soquete, podendo ser removido e colocado em um projeto final. Os chips CORTEX-M3 e M4 precisam de muitos pinos, e tem um encapsulamento QFP (Quad Flat Package, ou seja quatro fileiras de pinos em montagem de superfície ou SMD) soldado na placa. Dificilmente um hobbysta poderia usar um chip assim em um projeto final (sem contar que ele não pode ser retirado). Outras versões dos chips incluem BGA (Ball Grid Array) onde os pinos estão em baixo do chip, fazendo com que a placa tenha de ter várias camadas para acessar os pinos no meio dele; ou seja também fora do alcance do hobbysta. Portanto, nada mais de Arduinos montados em protoboards, ou feitos em casa, e bem menos feitos por pequenos produtores pelo mundo todo.
Sendo assim eu prefiro o MSP430 LaunchPad que é uma placa barata e pequena podendo ser incluída em seu projeto final facilmente (o Arduino Due é grande e caro demais para colocar toda a placa no seu projeto final), com a vantagem do chip DIP que pode ser removido e colocado no projeto final.
Conclusão
Na tentativa de superar as limitações do Arduino, foram introduzidas incompatibilidades com modelos anteriores, tanto de pinagem como de voltagem, se tornou mais caro obter um Arduino e não se pode mais remover o chip para usar em um projeto.
Estas coisas alienam os usuários atuais do Arduino dos modelos novos e facilitam a migração para outras plataformas. O Arduino começou uma revolução, mas creio que ele não irá termina-la. Estamos em um momento muito interessante, onde temos a disposição placas baratas e poderosas que vão disputar este mercado em condições mais vantajosas, como o Teensy, o LaunchPad, o Stellaris LaunchPad, o Papilio One (com FPGA). E ainda temos coisas mais sofisticadas mas incrivelmente baratas, como o Raspberry Pi e o Beagleboard (que cabe em uma caixa de Altoids) que rodam uma versão do Ubuntu e já são usados como media centers, consoles de jogos, rádios Internet e PABX para telefonia IP.
Já tenho dois Raspberry Pi e suas caixas de acrílico e meia dúzia de LaunchPads, e assim que meu Stellaris LaunchPad e meu Papilio One chegarem farei novos posts.
Notas
[1]. O Arduino NG (de Next Generation), Diecimila e Duemilanove lançado em 2009.
[2]. A comunicação com o computador implica em um programa do lado deste, é comum utilizar durante o desenvolvimento um programa de terminal para enviar e receber dados seriais de e para o Arduino. Anteriormente havia o HyperTerminal, muito básico mas a partir do Windows Vista ele não é enviado mais. Ele não é feito pela Microsoft, mas por outra empresa, a Hilgraeve e ainda existe uma versão paga, com teste de 30 dias [HIL1], no entanto existe um software muito melhor, de código aberto e gratuito, o RealTerm [RET1].
[3]. Não existe maneira de fazer debug por hardware no Arduino sem fazer modificações na placa. Os microcontroladores AVR tem um circuito de debug no próprio microcontrolador, o que é chamado de in-circuit debugger (por vezes ICD). O circuito de debug é controlado pelo pino de reset via um protocolo proprietário da Atmel chamado debugWIRE. Existem dois motivos para o Arduino não suportar debug via hardware, em primeiro lugar o protocolo é proprietário e suportado apenas em programadores da Atmel; em segundo o Arduino utiliza o pino de reset quando um sketch (programa) é recebido pela porta USB. Existe uma maneira de fazer debug via software [VIM1], mas ela é limitada e exige o uso do Visual Studio.
[4]. Ou ISP de In-System Programming [WIKI1], que permite programar o microcontrolador sem removê-lo do circuito.
[5]. DFU significa Device Firmware Update [USB1].
[6]. Existem dois softwares que permitem isso: o FLIP da Atmel, escrito em Java e que funciona em Windows e Linux [ATM2], e o dfu-programmer [DFU1].
[7]. Enquanto eu escrevia e revisava este post, foi lançado o Arduino Micro [ARD8], que custa US\$ 25, podemos dizer que ele é um Arduino Leonardo Nano, que usa o ATMega32U4 [ATM3] exatamente como o Teensy 2.0. Enquanto isso ficam as especulações sobre um Arduino Due Nano ou Micro, que seria como o Teensy 3.0 lançado um mês antes por cerca de US\$ 20, bem mais barato que o Arduino Due (US\$ 60), seu equivalente grande e um pouco mais barato que o Arduino Leonardo.
[8]. SPI significa Serial Peripheral Interface [WIKI5], que é um bus síncrono para comunicação (ou seja exige um clock) criado pela divisão de semicondutores da Motorola (hoje Freescale Semiconductor, Inc.). Ele é muito usado em displays, e nos cartões SD existe um modo de comunicação SPI, destinado justamente a comunicação com microcontroladores, por ser mais simples para eles.
[9]. I2C, ou IIC (que significa Inter-Integrated Circuit) [WIKI3], também chamado de 2 wire, é um bus de comunicações projetado pela divisão de semicondutores da Philips (hoje NXP Semiconductors), originalmente para comunicações de baixa velocidade entre CIs na mesma placa. Sendo um bus a definição dele inclui tanto a parte elétrica e a parte de protocolo. Ele é usado, por exemplo, na memória EEPROM serial 24c32 (hoje substituída pela 24LC32A [MIC]), muito usada com PICs.
[10]. Ou Communication Device Class [WIKI4].
[11]. Existem outras maneiras, como se tornar membro do USB Implementers Forum, Inc., pagando uma taxa anual, ou obter um PID do fabricante do chip utilizado, como a FTDI ou a Microchip [OOI1].
[12]. Lembre-se a arquitetura do Arduino é aberta.
[13]. Não confundir com o SAM-BA Graphical User Interface, ou SAM-BA GUI que é o programa que permite programar a flash RAM.
[14]. Ele pertence a um grupo de 3 bits chamados General Purpose Non-volatile Memory Bits, abreviados GPNVM bits. O bit 0 setado faz com que não se possa acessar a flash RAM, apenas apaga-la pelo pino ERASE. O bit 1 setado faz com que a o boot seja feito pela flash RAM (mapeada no início da memória do dispositivo em vez da ROM), e o bit 3 escolhe entre a flash RAM 0 ou 1.
Referências
[FTDI]: FTDI Chip Home Page. Disponível em: <http://www.ftdichip.com/>. Accesso em: 22 jul. 2012.
[HIL1]: HyperTerminal Free Trial - for Windows 7 Vista XP - Hilgraeve. Disponível em: <http://www.hilgraeve.com/hyperterminal-trial>. Accesso em: 22 jul. 2012.
[VIM1]: A Practical Arduino Debugger - Simple, Flexible and Very Powerful. Disponível em: <http://www.visualmicro.com/post/2012/05/05/Debug-Arduino-Overview.aspx>. Accesso em: 03 dez. 2012.
[RET1]: Terminal Software. Disponível em: <http://realterm.sourceforge.net/>. Accesso em: 22 jul. 2012.
[ARD1]: Arduino - ArduinoBoardUno. Disponível em: <http://arduino.cc/en/Main/ArduinoBoardUno/>. Accesso em: 24 jul. 2012.
[ARD3]: Arduino - ArduinoBoardMega2560. Disponível em: <http://arduino.cc/it/Main/ArduinoBoardMega2560>. Accesso em: 25 jul. 2012.
[ATM1]: ATMEL CORPORATION. ATmega8U2/16U2/32U2 Datasheet. San Jose, CA, 2010. Disponível em: <http://www.atmel.com/Images/7799S.pdf>. Acesso em: 22 jul. 2012.
[LIM1]: FRIED, Alumna Limor. Arduino UNO Frequently Asked Questions (FAQ): New USB chip. [s.l.], 2012. Disponível em: <http://www.ladyada.net/library/arduino/unofaq.html#new_usb_chip>. Acesso em: 22 jul. 2012.
[LIM2]: FRIED, Alumna Limor. Arduino UNO Frequently Asked Questions (FAQ): How can I change the USB firmware. [s.l.], 2012. Disponível em: <http://www.ladyada.net/library/arduino/unofaq.html#how_can_i_change_the_usb_firmware>. Acesso em: 22 jul. 2012.
[WIKI1]: In-system programming. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/In-system_programming>. Acesso em: 22 jul. 2012.
[USB1]: USB IMPLEMENTERS FORUM. USB Device Firmware Upgrade Specification, Revision 1.0. [s.l.], 1999. Disponível em: <http://www.usb.org/developers/devclass_docs/usbdfu10.pdf>. Acesso em: 24 jul. 2012.
[ATM2]: FLIP- Atmel Corporation. Disponível em: <http://www.atmel.com/tools/FLIP.aspx>. Accesso em: 24 jul. 2012.
[DFU1]: dfu-programmer. Disponível em: <http://dfu-programmer.sourceforge.net/>. Accesso em: 24 jul. 2012.
[TEE1]: Teensy USB Development Board. Disponível em: <http://www.pjrc.com/teensy/>. Accesso em: 24 jul. 2012.
[ARD4]: Arduino – ArduinoNano. Disponível em: <http://www.arduino.cc/en/Main/ArduinoBoardNano>. Accesso em: 17 nov. 2012.
[ARD8]: Arduino - ArduinoBoardMicro. Disponível em: <http://arduino.cc/en/Main/ArduinoBoardMicro>. Accesso em: 28 nov. 2012.
[ATM3]: ATmega32U4 - Atmel Corporation. Disponível em: <http://www.atmel.com/devices/atmega32u4.aspx>. Accesso em: 17 nov. 2012.
[CRI1]: CRISTOFARO, John M. De. Arduino Leonardo Pinout Reference. [New Jersey], 3 jun. 2012. Disponível em: <http://www.adafruit.com/blog/2012/06/03/arduino-leonardo-pinout-reference/>. Acesso em: 17 nov. 2012.
[WIKI2]: ARM Cortex-M : Cortex-M4. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M4>. Acesso em: 17 nov. 2012.
[TEE2]: Teensyduino – Add-on for Arduino IDE to use Teensy USB development board. Disponível em: <http://www.pjrc.com/teensy/teensyduino.html>. Acesso em: 17 nov 2012
[SAT1]: SATOMI, Mika, PERNER_WILSON, Hannah. Teensy as a HID device. In: How to get what you want. [s.l.], [2010]. Disponível em: <http://www.kobakant.at/DIY/?p=2497>. Acesso em: 25 jul. 2012.
[ARD2]: Arduino - ArduinoBoardLeonardo. Disponível em: <http://arduino.cc/en/Main/ArduinoBoardLeonardo>. Accesso em: 24 jul. 2012.
[WIKI5]: Serial Peripheral Interface Bus. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus>. Acesso em: 21 nov. 2012.
[WIKI3]: I²C. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/I%C2%B2C>. Acesso em: 18 nov. 2012.
[MIC]: Microchip Technology Inc. 24C32: 32K 5.0V I2C Smart Serial EEPROM. Chandler, Arizona, 2004. Disponível em: <http://ww1.microchip.com/downloads/en/DeviceDoc/21061H.pdf>. Acesso em: 18 nov. 2012.
[WIKI4]: Universal Serial Bus : Device Classes. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/Universal_Serial_Bus#Device_classes>. Acesso em: 19 nov. 2012.
[OOI1]: OOIJEN, Wouter van . How to obtain an USB VID/PID for your project. Amersfoort, Netherland, [2012]. Disponível em: <http://www.voti.nl/docs/usb-pid.html>. Acesso em: 19 nov. 2012.
[AKA1]: Akafugu Corporation. USB and serial ports on Arduino Leonardo. Tokio, 2012. Disponível em: <http://www.akafugu.jp/posts/blog/2012_06_13-USB-and-serial-ports-on-Arduino-Leonardo/>. Acesso em: 19 nov. 2012.
[MAX1]: Maxim Integrated. MAX3421E: USB Peripheral/Host Controller with SPI Interface. San Jose, CA, 2007. Disponível em: <http://www.maximintegrated.com/datasheet/index.mvp/id/3639>. Acesso em: 21 nov. 2012.
[ARD5]: Can Leonardo be used as a USB host? - Arduino Forum. Disponível em: <http://arduino.cc/forum/index.php?topic=108994.0>. Accesso em: 19 nov. 2012.
[WIKI6]: ARM Cortex-M: Cortex-M3. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M3>. Acesso em: 21 nov. 2012.
[ATM4]: ATSAM3X8E - Atmel Corporation. Disponível em: <http://www.atmel.com/devices/SAM3X8E.aspx>. Accesso em: 21 nov. 2012.
[WIKI7]: USB On-The-Go. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/USB_On-The-Go>. Acesso em: 21 nov. 2012.
[WIKI8]: CAN bus. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/CAN_bus>. Acesso em: 21 nov. 2012.
[ATM5]: Atmel Corporation. AT91SAM ARM-based Flash MCU SAM3X SAM3A Series. Features: Memories, p.1. San Jose, CA, 2012. Disponível em: <http://www.atmel.com/Images/doc11057.pdf>. Acesso em: 27 nov. 2012.
[ATM6]: Atmel Corporation. AT91SAM ARM-based Flash MCU SAM3X SAM3A Series. Internal ROM, p.38. San Jose, CA, 2012. Disponível em: <http://www.atmel.com/Images/doc11057.pdf>. Acesso em: 27 nov. 2012.
[ARD6]: Arduino - ArduinoBoardDue. Disponível em: <http://arduino.cc/en/Main/ArduinoBoardDue>. Accesso em: 21 nov. 2012.
[ATM7]: Atmel Corporation. AT91SAM ARM-based Flash MCU SAM3X SAM3A Series. SAM-BA Boot, p.40. San Jose, CA, 2012. Disponível em: <http://www.atmel.com/Images/doc11057.pdf>. Acesso em: 27 nov. 2012.
[ARD7]: What about the bootloader? - Arduino Forum. Disponível em: <http://arduino.cc/forum/index.php/topic,128913.0.html>. Accesso em: 21 nov. 2012.
[TI1]: Stellaris LM4F120 LaunchPad Evaluation Kit - EK-LM4F120XL - TI Tool Folder. Disponível em: <http://www.ti.com/tool/ek-lm4f120xl>. Accesso em: 21 nov. 2012.
[TI2]: LM4F Cortex-M4F Series - LM4F120 Series - LM4F120H5QR - TI.com. Disponível em: <http://www.ti.com/product/lm4f120h5qr>. Accesso em: 21 nov. 2012.
[TI3]: ARM® Cortex®-M4F Based MCU TM4C123G LaunchPad Evaluation Kit - EK-TM4C123GXL - TI Tool Folder. Disponível em: <http://www.ti.com/tool/ek-tm4c123gxl>. Acesso em: 24 fev. 2016.
[TI4]: TM4C123GH6PM | TM4C12x | Control + Automation | Description & parametrics. Disponível em: <http://www.ti.com/product/TM4C123GH6PM>. Acesso em: 24 fev. 2016.
[TI5]: Texas Instruments. Getting Started With the Stellaris EK-LM4F120XL LaunchPad Workshop. p7-5. Plano TX, 2013. Disponível em: <http://software-dl.ti.com/trainingTTO/trainingTTO_public_sw/GSW-Stellaris-LaunchPad/StellarisLaunchPadWorkbook.pdf>. Acesso em: 24 fev. 2016.
[WIKI9]: ARM Cortex-M : Cortex-M4. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M4>. Acesso em: 21 nov. 2012.
[WIKI10]: Luminary Micro. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/Luminary_Micro>. Acesso em: 21 nov. 2012.
[ARD8]: Building a CAN API for Arduino DUE. Disponível em: <http://forum.arduino.cc/index.php?topic=131096.0>. Acesso em: 24 fev. 2016.
[COL1]: GitHub - collin80/due_can: Object oriented canbus library for Arduino Due compatible boards. Disponível em: <https://github.com/collin80/due_can>. Acesso em: 24 fev. 2016.
Atualizações
[UPD1]: Posteriormente uma biblioteca foi criada, veja: [ARD8], [COL1].
[UPD2]: Stellaris LM4F series foi renomeada comoTIVA-C series [TI4] (mas exceto por isso continuou idêntica), e um LaunchPad novo e atualizado foi lançado com PWM e USB hosting: [TI3]
[UPD3]: Existe um erro aqui. A USBLib suportava USB hosting e USB OTG, mas a porta USB do LM4F120H5QR era dispositivo apenas, como descrito em [TI5]. A versão posterior do LaunchPad suporta ambos.
Recent Comments