HOME      PROJETOS      PROGRAMAÇÃO     

USB E BOOTLOADER

Alguns microcontroladores da família 18F como o PIC18F4550 possuem porta de comunicação USB para facilitar a comunincação entre o PC e o microcontrolador. Uma das opções é usar a porta USB para gravar o programa no microcontrolador usando um bootloader, programa que fica residente no próprio microcontrolador e permite que o programa de aplicação seja gravado sem a necessidade de um programador.

A Microchip fornece um framework com vários exemplos que permitem desenvolver aplicações em seus microcontroladores usando a porta USB. Nesta experiência, usaremos somente alguns arquivos mas, quem quiser, poderá baixar todo o diretório contendo o framework. Infelizmente não posso fornecer o link para o framework porque a estrutura de páginas da Microchip muda constantemente.

Antes de continuar, baixe o arquivo de distribuição com os programas necessários para a instalação do bootloader

Se você usa o CadSoft EAGLE PCB Layout Editor, baixe também o projeto para montar o PCB desta experiência. Este arquivo contem o diretório MCHBootLoader com o esquema elétrico e o layout do PCB que pode ser alterado com o EAGLE conforme sua necessiadade.

O QUE É O BOOTLOADER

O bootloader é um programa que será gravado no microcontrolador uma única vez por um programador comum como um McFlash, um JDM ou através do ICSP. A partir daí o programador não será mais necessário pois bastará conectar o microcontrolador na porta USB e transferir o programa de aplicação para o microcontrolador quantas vezes forem necessárias, sem que seja necessário remover o chip do circuito e numa velocidade muito mais alta do que a alcançada pelos programadores comuns.

HARDWARE NECESSÁRIO

A figura abaixo mostra o esquema elétrico do circuito necessário para esta experência.

Clique na imagem para ampliá-la.

Monte o circuito e observe que usaremos uma fonte externa de 9V com redução para 5V para alimentá-lo. Poderiamos optar por alimentar o circuito diretamente pela porta USB mas ainda não é conveniente pois, se houver um pequeno erro na montagem, podemos danificar a porta USB e quem sabe o que mais...

Será necessário, também, providenciar um cabo USB com conector macho tipo "A" que será conectado ao PC e, o outro lado, será conectado ao circuito.


INSTALAÇÃO DOS PROGRAMAS NECESSÀRIOS

Para instalar os programas necessário, descomprima o arquivo distribuicao.zip que vai gerar o diretório distribuicao. Entre no diretório distribuicao e observe que existem os seguintes módulos:

Faça um atalho na área de trabalho para o programa PDFSUSB.exe. Esse programa será usado para gravar aplicações (arquivos .hex) no microcontrolador através da posta USB.

Usando o seu programador de PIC favorito, abra o arquivo USB Device - MCHPUSB - MCHPUSB Bootloader - C18 - PICDEM FSUSB.hex e grave-o no microcontrolador. Ele será gravado somente desta vez e ficará residente no chip para receber suas aplicações pela porta USB.

Ligue a alimentação e conecte o cabo USB no PC. A princípio nada vai acontecer. Pressione o botão BOOT, que esta ligado ao PORTB<4> (pino37) do PIC e, em seguida, pressione e solte o botão RESET. Quando os dois LEDs começarem a piscar alternadamente, solte o botão BOOT e o bootloader estará pronto para receber programas pela porta USB. Na primeira vez que esse procedimento for realizado, o sistema operacional vai dizer que um novo hardware foi detectado e é necessário instalar um driver para o dispositivo USB. Dirija o instalador para o diretório \distribuicao\usbdriver e, se tudo correr bem, no Windows nunca se sabe, o driver será instalado.

No Windows/XP pode ser necessário que o módulo "usbser.sys" esteja instalado no diretório C:\Windows\system32 antes de instalar o driver. Se o módulo "usbser.sys" não estiver instalado, copie manualmente esse módulo para o diretório C:\Windows\system32. O módulo "usbser.sys" pode ser encontrado no archive C:\Windows\Driver Cache\i386\driver.cab do seu PC. Para instalar, abra o arquivo "driver.cab" com o programa Winzip e extraia o módulo "usbser.sys" para o diretótio C:\Windows\system32\usbser.sys e depois instale o driver do dispositivo conforme explicado acima.


GRAVANDO PROGRAMAS NO MICROCONTROLADOR

Conecte o cabo USB do circuito no PC. Pressione o botão BOOT, que esta ligado ao PORTB<4> (pino37) do PIC e, em seguida, pressione e solte o botão RESET. Quando os dois LEDs começarem a piscar alternadamente, solte o botão BOOT e o bootloader estará pronto para receber programas pela porta USB. Para gravar o programa, use a aplicação PDFSUSB.exe seguindo os passos abaixo:

Execute o programa PDFSUSB.exe e na janela dessa aplicação, clique o botão Load HEX File para abrir a janela de seleção de arquivos.

Escolha o programa que deseja gravar no microcontrolador. O programa deve ter a extenção .hex.

Na janela de configuração que aparecer, escolha a opção Não. Essa opção deve ser sempre selecionada pois ela não permitirá que os bits de configuração sejam regravados pelo seu programa. Se a opção Sim for escolhida, o bootloader vai deixar de funcionar e não será possível, da próxima vez, gravar o programa via bootloader. Nesse caso, o bootloader deverá ser regravado com um programador de porta serial ou outro qualquer.

O programa em formato hexa decimal será carregado e mostrado na parte inferior da janela.

Abra a lista Select PICDEM FS USB Board e selecione o dispositivo ativo na porta USB, relativo ao circuito que iremos gravar, indicado pela seta 1.

Após selecionar o dispositivo USB, clique no botão Program Device, indicado pela seta 2 para iniciar a gravação do programa. Quem esta acostumado a usar programadores de porta serial vai notar que, com o bootloader, o programa é transferido para o microcontrolador a uma velocidade muito alta.

Quando a gravação terminar, confira as mensagens que aparecem na janela de mensagens, indicado pela seta 1. Se tudo correu bem, então pode iniciar a execução do programa no microcontrolador, clicando no botão Execute, indicado pela seta 2. Não será necessário desconectar o circuito da porta USB. Pode-se, também, iniciar o programa pressinonando-se o botão RESET do circuito.

PROGRAMAÇÃO ASSEMBLER

Na programação, em linguagem assembler, um cuidado deve ser tomado para relocar o código da aplicação pois o bootloader ocupa os primeiros 2K de memória do microcontrolador. Assim sendo, o código da aplicação não poderá ser gravado no mesmo endereço do bootloader. Para fazer com que o código da aplicação seja relocável, inicie a sessão de código com a diretiva MAIN CODE 0x800. Observe o exemplo abaixo:

EXEMPLO DE CÓDIGO RELOCÁVEL

list p=18F4550 #include <p18F4550.inc> errorlevel -302 CONFIG PWRT = OFF CONFIG BOR = OFF CONFIG WDT = OFF CONFIG MCLRE = ON CONFIG DEBUG = OFF CONFIG LVP = OFF CONFIG CP0 = OFF CONFIG CP1 = OFF CONFIG CPB = OFF CONFIG CPUDIV = OSC1_PLL2 ; [Primary Oscillator Src: /1][96 MHz PLL Src: /2] CONFIG PLLDIV = 5 ; Divide by 5 (20 MHz oscillator input) CONFIG FOSC = HS ; HS oscillator (HS) CONFIG USBDIV = 1 ; USB clock source from the primary oscillator ; UDATA 0x80 ; memoria de dados wrk01 RES 1 ; RESET_VECTOR CODE 0x000 ; vetor de power on e reset goto main ; INT_VECTOR1 CODE 0x004 ; primeiro vetor de interrupcoes retfie ; INT_VECTOR2 CODE 0x008 ; segundo vetor de interrupcoes retfie ; MAIN CODE 0x800 ; inicio do codigo na memoria ; main movlw 0x0F movwf ADCON1 clrf LATA clrf LATB clrf LATC clrf LATD . . . . . . END

Além disso, deve-se configurar o MPLAB para gerar código relocável. Entre em Project->Project options->Project e na aba MPASM/C17/C18 Suite selecione Gerenate relocatable code.

H P S P I N

Desde 04 de Março de 2010

Atualização: 28 de Mar de 2024