session_start(); # -------------------------------------------------------------------------------------------------------- # Spinelli - 02/08/2011 # # BOOTLOADER # # Revisoes # 31/08/2015 - retirada do link do framework da Microchip porque sempre mudava. # # # # -------------------------------------------------------------------------------------------------------- if( !isset($_SESSION["logedin"]) ) { include "../session_parm.inc"; } include "../visitas/visitas.inc"; include "../cab.inc"; # ------------------------------------------------------------------------------------------------------- # # ------------------------------------------------------------------------------------------------------- ?>
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 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 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.
A figura abaixo mostra o esquema elétrico do circuito necessário para esta experência.
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.
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.
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.
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:
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.