PIC + USB + Bootloader = Fácil

Quando se esta trabalhando com microprocessadores PIC é muito chato ter que ficar retirando o PIC da protoboard/prototipo para ficar regravando o software enquanto efetua seus testes, não é?Utilizando PIC’s com suporte a USB facilita (e muito) essa tarefa.

Após instalar um bootloader no PIC, é possivel carregar um novo firmware (o seu programa para o PIC) através da porta USB, utilizando o programas ‘PDFSUSB’ disponibilizado gratuitamente pela Microchip.Bom, vamos ao que interessa:


Passo 0: Requerimentos: Você deve ter um programador capaz de programar PIC’s da familia 18F
Este programador será necessário apenas uma vez, quando será gravado o bootloader no PIC. O programador deve ser compativel com PIC’s da familia 18F. Se você ainda não possui um, eu recomendo o JDM que é simples e bem util. Caso queira, pode comprar um no MercadoLivre ou mesmo utilizara gravação in-circuit (ICSP).

Passo 1: Placa de desenvolvimento básica para o PIC18F4550
Esta é uma versão simplificada da placa PICDEM FS-USB DM163025 da Microchip. Requisitos mínimos para a placa:
– Um cristal de 20MHz e dois capacitores de 22pF.
– Um conector USB do tipo B.
– Um capacitor de desacoplamento ente o Vss e o Vdd (100nF)
– Um capacitor de desacoplamento entre o Vss e o Vusb (470nF)
– Um botão para resetar o PIC (S1)
– Um botão para entrar no modo boot (ligado ao RB4) (S2)

usb-bootload

Passo 2: Softwares, Bootloader e Utilitários
Microchip MPLAB 8.10+ disponivel em http://www.microchip.com/
Microchip C18 3.20+ Student Ed disponivel em http://www.microchip.com/
Microchip USB Bootloader (Salve o arquivo “en021827.exe” como “USBBootloader.exe” para facilitar)

Passo 3: Editar o bootloader e compilar o mesmo
Abre o MPLAB, depois vá em: Project/Open : “C:\Microchip Solutions\USB Device – Bootloaders\Vendor Class – MCHPUSB Bootloader\Bootloader – Firmware for PIC18F4550 Family Devices\MCHPUSB.mcp”. Faça as modificações que desejar e compile o bootloader.
ATENÇÃO: Cuidado ao editar este arquivo. Se você ultrapassar 2K de programa para o bootloader, provavelmente terá problemas no futuro.
Se você estiver usando outro software que nao seja o MPLAB para gravar o PIC (Ex: WinProg, icProg, etc..) faça o seguinte:
O arquivo HEX gerado durante a compilação nao possui os bits de configuração, entao você deve clicar no meu File/Export/Ok, digite o nome do arquivo .Hex e pronto, seu HEX será salvo com os bits de configuração.

OSB: Estou disponibilizando aqui uma versão customizada do bootloader para o PIC18F4550. Esta versão possibilita que você ative o modo Bootloader via software, sem precisar segurar um botão. Clique aqui para baixar o arquivo-fonte desta versão customizada. É só substituir os arquivos na pasta original do bootloader e compilar novamente. Neste arquivo tambem disponibilizei o arquivo .HEX pronto para o PIC18F4550.

Passo 4: Programar o bootloader no PIC
Grave o bootloader usando seu gravador de PIC e o software que preferir. Eu utilizo o ICProg.

Passo 5: Conectando o cabo USB e fazendo a primeira gravação de firmware
Conecte o cabo USB ao micro e na placa. Não irá acontecer nada inicialmente.
Para entrar no modo Bootloader pela primeira vez, segure o botão S2 enquanto pressiona o botão S1 para resetar o PIC.
Feito isto, o PIC irá reiniciar e o Windows irá reconehcer o novo hardware, solicitando o driver.

Passo 6: Instalando o driver para a placa
Este processo depende muito do Windows que você esta usando, mas geralmente é a mesma sequencia.
Caso tenha dúvidas, verifique a seção 2.3.3, “Installing the USB Device Driver” do manual da placa PICDEM (“PICDEM FS USB Demonstration Board User’s Guide”).
No windows XP, você deve especificar o local onde o driver esta (Disco de instalação), passando este caminho ao instalador do windows: “C:\MicrochipSolutions\USB Tools\MCHPUSB Custom Driver\MCHPUSB Driver\Release”

Passo 7: Enviando um programa de teste (Firmware)
1) MPLAB: Abra o MPLAB, abra o projeto “C:\Microchip Solutions\USB Device – HID – Simple Custom Demo\Generic HID – Simple Demo – Firmware\USB Device – HID – Simple Custom Demo – C18 – PICDEM FSUSB.mcp”, edite como desejar e recompile.
2) PLACA: A placa deve estar no modo Bootloader, como explicado anteriormente.
3) APLICATIVO : Abra o aplicativo PDFSUSB, localizado em: “C:\Microchip Solutions\USB Tools\Pdfsusb”.
4) APLICATIVO : Na lista de placas, selecione “PICDEM FS USB 0 (Boot)”. Caso não tenha este item, você não esta no modo Bootloader.
5) APLICATIVO : Clique em “Load HEX File” e selecione o arquivo compilado anteriormente (“USB Device – HID – Simple Custom Demo”).
6) APLICATIVO : Clique em “Program Device” . Não fique espantado, é hyper rápido mesmo 😉 .
7a)APLICATIVO : Clique em “Execute” para iniciar o programa que foi gravado (o software irá reiniciar a placa).
– – [OU]
7b)PLACA: Pressione o botão S1 para resetar o PIC. Assim que o PIC reiniciar, ele irá carregar o programa firmware.

Passo 8: Modificações para o CCS
É muito importante que você adicione as linhas a seguir no seu programa (firmware). Sem estas linhas, seu firmware iá sobreescrever o Bootloader, perdendo assim a funcionalidade.
Estas duas linhas servem para remapear o inicio do programa e os vetores de interrupção. Se for utilizar outro compilador que não seja o CCS, deve efetuar as modificações correspondentes.

#build(reset=0x800, interrupt=0x808)
#org 0x000, 0x7ff { }

Lembre-se que o programa Bootloader reserva 2k de memoria inicial. Sendo assim, o seu programa (firmware) não pode ultrapassar 14k (no caso do PIC18F4550).

Passo 9: Entrando no modo bootloader via software
Para ativar o modo bootloader via software, basta você gravar o valor 12 (0x0C) no endereço0x7FFE do seu PIC18F4550. Não se preocupe, este é o ultimo endereço de aplicativo do seu PIC e dificilmente será usado (a não ser que você utilize 100% do PIC). O código abaixo é para o compilador CCS:

write_program_eeprom (0x7FFE,12);
reset_cpu();

Com estes dois comandos, o PIC irá reiniciar e entrar no modo Bootloader automaticamente.OBS: Depois de executar estes dois comandos, o PIC não sairá mais do modo Bootloader até que você grave alguma versão de firmware nele (pode ser a mesma). Mesmo querendo desistir da atualização de firmware, você deverá gravar o firmware novamente para que o mesmo volte a funcionar.

Bom, por enquanto é isso. Espero ter ajudado um pouco a quem esta começando com PIC e portas USB. Em breve estarei disponibilizando alguns tutoriais sobre criação de softwares para comunicação via USB com a sua placa utilizando microprocessadores PIC.

Qualquer dúvida ou sugestão entre em contato pelo link “Contato” no menu superior.

* ATUALIZADO

A algum tempo recebi um e-mail  do Sr. Rodrigo solicitandoajuda com relação ao primeiro boot do PIC. Ele acabou fazendo mais algumas alterações interessantes no projeto e me enviou por e-mail, autorizando a publicação do seu código nesta página. Segue abaixo o código alterado e os comentário dele:

void main(void)  {  byte temp;  byte temp1;  // adicionei essa variável  byte temp2;  char BOOTFLAG;  temp = ADCON1;  ADCON1 |= 0x0F;  //EnablePullups();  //    Delay10KTCYx(600);              // delay ~500 ms

//TRISBbits.TRISB4 = 1;     // Reset value is already '1'

//Check Bootload Mode Entry Condition
//if((PORTBbits.RB4 == 1) && (temp1 != 0x0000))        // comentei, agora não tem mais dependência
//nenhuma com o RB4
//{
//agora não importa o botão, só o código via software

temp2 = * ((rom far char *) 0x7FFE);
temp1 = * ((rom far char *) RM_RESET_VECTOR); // adicionei
if((temp2 != 0x0C) && (temp1 != 0xFF)) {
ADCON1 = temp;          // Restore reset value
_asm goto RM_RESET_VECTOR _endasm
}
// }//end if

<span style="font-family: courier new, courier, monospace;">

 

Agora o próprio programa verifica se a memória está preenchida com alguma coisa ou não!
Assim, ele entra no modo boot se a memória estiver vazia, ou se encontrar o 0x0C no endereço 0x7FFE.
Abraços,

Rodrigo

Vale lembrar que caso nao esteja utilizando o Portb-4 para outra função, é aconselhavel deixar o mesmo para entrar em modo boot forçado caso tenha algum problema no firmware ou no software do boot.

Obrigado pela contribuição Rodrigo!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *