Main Menu
Home
Cadastre-se
Como colaborar
Contato
Sugerir Conteúdo
Reportar Problema
Conteúdo
Fórum
Notícias
Artigos
Projetos
Inovação
Downloads
Eventos
Links
Login
Usuários online
Nós temos 4 visitantes e 1 membro online
Usuários Registrados
7061 registrados
0 hoje
2 esta semana
24 no mês
Próximos Eventos
Nenhum evento
« < Maio 2013 > »
D S Q Q Q S D
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
RSS
PageRank
Gravação de PICs via USB no Linux e comunicação serial virtual USB CDC PDF Imprimir E-mail
 

Por Cesar, em 18-08-2010

Hits : 3174

Publicado em : Artigos, Software Embarcado


A transferência de programas para os microcontroladores é normalmente efetuada através de um hardware de gravação específico. Através desta ferramenta, é possível efetuar a descarga de programas para o microcontrolador diretamente de uma porta USB de qualquer PC.

 

Gravação de PICs via USB no Linux e comunicação serial virtual USB CDC

O circuito de desenvolvimento SanUSB é uma ferramenta composta de software e hardware básico da família PIC18Fxx5x com interface USB. Esta ferramenta livre é capaz de substituir:
1- Um equipamento específico para gravação de um programa no microcontrolador;
2- conversor TTL - EIA/RS-232 para comunicação serial bidirecional emulado através do protocolo CDC;
3- fonte de alimentação, já que a alimentação do PIC provém da porta USB do PC. É importante salientar que cargas indutivas como motores de passo ou com corrente acima de 400mA devem ser alimentadas por uma fonte de alimentação externa.
4- Conversor analógico-digital (AD) externo, tendo em vista que ele dispõe internamente de 10 ADs de 10 bits;
5- software de simulação, considerando que a simulação do programa e do hardware podem ser feitas de forma rápida e eficaz no próprio circuito de desenvolvimento ou com um protoboard auxiliar.
Além de todas estas vantagens, os laptops e alguns computadores atuais não apresentam mais interface de comunicação paralela e nem serial EIA/RS-232, somente USB.
Como pode ser visto, esta ferramenta possibilita que a compilação, a gravação e a operação real de um programa, como também a comunicação serial através da emulação de uma porta COM virtual, possam ser feitos de forma rápida e eficaz a partir do momento em o microcontrolador esteja conectado diretamente a um computador através de um cabo USB.
2.1. GRAVAÇÃO COM O SanUSB
A transferência de programas para os microcontroladores é normalmente efetuada através de um hardware de gravação específico. Através desta ferramenta, é possível efetuar a descarga de programas para o microcontrolador diretamente de uma porta USB de qualquer PC.
Para que todas essas funcionalidades sejam possíveis, é necessário gravar, anteriormente e somente uma vez, com um gravador específico para PIC, o gerenciador de gravação pela USB GerenciadorLinux.hex disponível na pasta completa da ferramenta:
Vídeo da ferramenta em linux: http://www.youtube.com/watch?v=h6Lw2qeWhlM
Para que os programas em C possam serem gravados no microcontrolador via USB, é necessário compilá-los, ou seja, transformá-los em linguagem de máquina hexadecimal. Existem diversos compiladores que podem ser utilizados por esta ferramenta, entre eles o SDCC, o C18, o PICC Hi-Tech e o CCS. Devido à didática das funções e bibliotecas disponíveis, o compilador mais utilizado nos projetos é o CCS. Para instalá-lo no Linux através do Wine basta seguir as seguintes instruções: http://www.youtube.com/watch?v=5-kigedbfxg
Não esqueça de colar o arquivo cabeçalho SanUSB.h dentro da pasta Drivers localizada na pasta instalada do compilador ( C:\Arquivos de programas\PICC\Drivers ).
O cabo USB apresenta normalmente quatro fios, que são conectados ao circuito do microcontrolador nos pontos mostrados na figura acima, onde normalmente, o fio Vcc (+5V) do cabo USB é vermelho, o Gnd (Vusb-) é marron ou preto, o D+ é azul ou verde e o D- é amarelo ou branco. Note que a fonte de alimentação do microcontrolador nos pinos 19 e 20 e dos barramentos vermelho (+5V) e azul (Gnd) do circuito provem da própria porta USB do computador. Para conectar o cabo USB é possível cortá-lo e conectá-lo direto no protoboard, com fios rígidos soldados, como também é possível conectar o cabo USB sem cortá-lo, em um protoboard ou numa placa de circuito impresso, utilizando um conector USB fêmea.
Caso o sistema microcontrolado seja embarcado como, por exemplo, um robô, um sistema de aquisição de dados ou um controle de acesso, ele necessita de uma fonte de alimentação externa, que pode ser uma bateria comum de 9V ou um carregador de celular. A figura abaixo mostra o PCB, disponível nos Arquivos do Grupo SanUSB, e o circuito para esta ferramenta com entrada para fonte de alimentação externa.
Para obter vários programas-fonte e vídeos deste sistema livre de gravação, comunicação e alimentação via USB, basta se cadastrar no grupo de acesso livre www.tinyurl.com/SanUSB e clicar no item Arquivos.
Durante a programação do microcontrolador basta inserir, no inicio do programa em C, a biblioteca cabeçalho SanUSB (#include ). Essa biblioteca contém informações de configurações do microcontrolador e habilitação do sistema de dual clock comentado a seguir.
Como a freqüência do oscilador interno é de 4 MHz, cada incremento dos temporizadores corresponde a um microssegundo. O programa exemplo1 abaixo comuta um led conectado no pino B7 a cada 0,5 segundo.
#include
 
void main()
{
clock_int_4MHz();//Função necessária para habilitar o dual clock (48MHz para USB e 4MHz para CPU)
 
while (1)
{
output_toggle(pin_B7); // comuta Led na função principal
delay_ms(500);
}
}
O programa pisca3 abaixo pisca três leds conectados nos pinos B5, B6 e B7.
#include
 
main(){
clock_int_4MHz();//Função necessária para habilitar o dual clock (48MHz para USB e 4MHz para CPU)
 
while (1)
{
output_high(pin_B5); // Pisca Led na função principal
delay_ms(500);
output_low(pin_B5);
output_high(pin_B6);
delay_ms(500);
output_low(pin_B6);
output_high(pin_B7);
delay_ms(500);
output_low(pin_B7);
}
}
 
 
Os arquivos compilados .hex assim como os firmwares estão disponíveis na pasta 100727SanUSB.
Gravando o microcontrolador via USB no Linux
Esta aplicação é realizada de forma simples em linha de comando no terminal do Linux. Inicialmente, é necessário ter instalada a biblioteca de desenvolvimento libhid, a partir da linha de comando:
sudo apt-get install libhid-dev
Para iniciar a gravação com linhas de comando é importante seguir os seguintes passos:
1. Mova a pasta de arquivos 100727SanUSB obtida do grupo www.tinyurl.com/SanUSB para um diretório do Linux como, por exemplo, a pasta pessoal.
2. Grave no microcontrolador, somente uma vez, com um gravador específico para PIC, o gerenciador de gravação pela USB GerenciadorLinux.hex.
2. Pelo Terminal do Linux acesse a pasta de arquivos SanUSB utilizando alguns comandos básicos descritos abaixo:
pwd -> mostra o diretório atual;
find /home -name sanusb -> procura no diretório home o arquivo sanusb;
cd -> retorna diretório padrão home;
cd .. -> sai do diretório atual;
cd ./dir -> entra no diretório dir;
ls -> lista os arquivos de um diretório.
 
Para gravar no Linux é necessário estar logado com permissão para acessar a porta USB como, por exemplo, super-usuário (sudo su).
 
4. Após entrar na pasta SanUSB, acesse o conteúdo do arquivo sanusb, digitando:
. / sanusb-h
 
5. Coloque o circuito SanUSB em modo de gravação (pino 1 ligado ao Gnd através de botão ou jump ) e conecte o cabo USB do circuito no PC. Se o circuito SanUSB estiver correto acenderá o led do pino B7.
 
6. Para gravar no microcontrolador, o firmware desejado, como o exemplo1.hex, deve estar mesmo diretório do arquivo sanusb, então para a gravação via USB, digita-se:
. / sanusb -w exemplo1.hex
7. Depois de gravar, remova o botão ou jump de gravação, então reset digitando:
. / sanusb –r
 
Para programar novamente, basta colocar o jump de gravação, desconecte e conecte o cabo USB de alimentação, e repita os passos anteriores a partir do passo 6. Se o microcontrolador não for reconecido, feche o terminal, conecte o microcontrolador em outra porta USB, abra um novo terminal e repita repita os passos anteriores a partir do passo 4.
SISTEMA DUAL CLOCK
Devido à incompatibilidade entre as freqüências necessárias para a gravação e emulação serial via USB e a freqüência padrão utilizada pela CPU, temporizadores e interface I2C, esta ferramenta adota o princípio Dual Clock, ou seja, utiliza duas fontes de clock, uma para o canal USB de 48MHz, proveniente do cristal oscilador externo de 20MHz multiplicada por um prescaler interno, e outra para o CPU de 4 MHz, proveniente do oscilador RC interno de 4 MHz.
Esse princípio de clock paralelo permite que um dado digitado no teclado do computador, trafegue para o microcontrolador em 48 MHz via USB, depois para periféricos como um relógio RTC ou para a memória EEPROM em 4 MHz via I2C e vice-versa.
SanUSB CDC – Emulação de Comunicação Serial
Neste tópico é mostrado o método CDC de comunicação serial bidirecional através do canal USB do PIC18F2550. Uma das formas mais simples, é através do protocolo Communications Devices Class (CDC), que emula uma porta COM RS-232 virtual, através do canal USB 2.0. Dessa forma, é possível se comunicar com caracteres ASCII via USB através de qualquer software monitor serial RS-232 como o HyperTerminal, o SIOW do compilador CCS® ou o ambiente de programação Delphi®. O driver CDC instalado no PC e o programa aplicativo gravado no PIC, com a biblioteca CDC (#include ), são os responsáveis por esta emulação da porta RS-232 virtual através da USB.
A biblioteca CDC para o programa.c do microcontrolador está dentro da pasta de exemplos, a qual deve estar na mesma pasta onde está o programa.c a ser compilado para a emulação da comunicação serial RS-232. Além disso, o programa.c deve inserir a biblioteca usb_san_cdc.h, como mostra a o exemplo de leitura e escrita em um buffer da EEPROM interna do microcontrolador. As funções CDC mais utilizadas contidas na biblioteca usb_san_cdc.h para comunicação com a COM virtual são:
 
· usb_cdc_putc() – o microcontrolador envia caracteres ASCII emulados via USB.
Ex.: printf(usb_cdc_putc, "\r\nEndereco para escrever: ");
· usb_cdc_getc() – retém um caractere ASCII emulado pela USB.
Ex.: dado = usb_cdc_getc(); //retém um caractere na variável dado
 
· gethex_usb() – retém um número hexadecimal digitado no teclado.
Ex.: valor = gethex_usb();//retém um número hexadecimal na variável valor
· usb_cdc_kbhit( ) – Avisa com TRUE (1) se acabou de chegar um novo caractere no buffer de recepção USB do PIC.
Ex.: if (usb_cdc_kbhit(1)) {dado = usb_cdc_getc();}
Veja o programa abaixo, que pisca um led na função principal (pino B6) e comanda o estado se outro led (pino B7) pelo teclado de um PC via USB através do protocolo CDC:
#include
#include // Biblioteca para comunicação serial virtual
 
BYTE comando;
 
main() {
clock_int_4MHz();//Função necessária para habilitar o dual clock (48MHz para USB e 4MHz para CPU)
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com USB do PC
 
while (TRUE)
{
if (usb_cdc_kbhit(1)) //avisa se chegou dados do PC
{ //verifica se tem um novo byte no buffer de recepção, depois o kbhit é zerado para próximo byte
comando=usb_cdc_getc(); //se chegou, retém o caractere e compara com 'L' ou 'D' em ASCII
 
if (comando=='L') {output_high(pin_b7); printf(usb_cdc_putc, "\r\nLed Ligado!\r\n");}
if (comando=='D') {output_low(pin_b7); printf(usb_cdc_putc, "\r\nLed Desigado!\r\n");}
}
output_high(pin_B6); // Pisca Led na função principal
delay_ms(500);
output_low(pin_B6);
delay_ms(500);
} }
 
Este firmware realiza a comunicação serial virtual com o protocolo CDC inserido no firmware do microcontrolador através da biblioteca usb_san_cdc.h. Este protocolo é padrão no sistema operacional Linux.
 
Após gravar o firmware via USB com o executável linux sanusb, instale o software de comunicação serial CuteCom.deb .
Verifique a porta serial virtual criada digitando dmesg no terminal. Abra o Cutecom, digitando cutecom no terminal e direcione a porta virtual instalada em Device, geralmente a porta é ttyACM0 ou ttyACM1. Mais informações podem ser obtidas no video:
 
Para obter novos programas e projetos, basta acessar os arquivos do grupo SanUSB em www.tinyurl.com/SanUSB.
Divirta-se!
Este endereço de e-mail está sendo protegido de spam, você precisa de Javascript habilitado para vê-lo


   
Citar este artigo no meu website
Enviar por email
Conteúdo relacionado
Tag para del.icio.us

Comentários  RSS feed dos comentários
 

Avaliação dos usuários

   (0 voto)

 


Adicionar comentário
Apenas utilizadores registados podem comentar um artigo.

Nenhum comentário



mXcomment 1.0.9 © 2007-2013 - visualclinic.fr
License Creative Commons - Some rights reserved
< Anterior   Próximo >
Links do Dia
Aula 6 - Set de Intruções do ARM 
Datasheet4u 
Java - Real-Time Specification for Java 
Karimex 
Source Forge 
ESC Brazil
Pesquisar no Portal
Newsletter
Assinar a newsletter do
Portal Embarcados
Nome:
Email:


Enquete
Qual é a sua formação?
 
Parceiros
Laboratório de Garagem
Comunidade C&C++ Brasil
Eletromaniacos
Tempo Real
Oportunidades
Últimas do Fórum

Mais...
Blogs
progamador free lance Autor: alarmesmegatron
forum da labtools mosaico link quebrado Autor: Paulo Furlan
Oportunidade Desenvolvedor de Software Embarcado Autor: CMC Consultoria