Botloader via USB cm o PIC18f4550 ( MikroC )

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Botloader via USB cm o PIC18f4550 ( MikroC )

Mensagempor rodrigoadachi » 12 Jan 2010 17:10

Ola,

Será que da espaço pro programa usar um bootloader via USB? Alguem ja fez issu?
rodrigoadachi
Nibble
 
Mensagens: 70
Registrado em: 15 Out 2007 12:19
Localização: Bahia - Brazil

Mensagempor Francesco » 12 Jan 2010 19:23

Avatar do usuário
Francesco
Word
 
Mensagens: 699
Registrado em: 04 Mar 2008 00:22
Localização: São Paulo - SP

Mensagempor Jorge_Francisco » 14 Jul 2010 12:32

Então,

Estava querendo testar um bootloader mas ele não funcionou. Será que alguém teria algum material interessante sobre Bootloader USB, tem que ser USB. Queria primeiro testar e ver funcioanar, depois eu queria entender o funcionamento e alterar pro que eu quero. Segundo queria o código fonte para alterar o firmware no cliente, ou seja, farei o software para atualizar o firmware pelo bootloader.

Alguém me ajuda? Se tiver algo feito por vocês é melhor ainda, porque o que pego na internet é muito vago, ou só coloca o .hex, mas queria o .c para entender o processo.

Meu PIC é um 18f4550, a IDE é MikroC, e o meu VID e PID são proprietários( essa é dificuldade com exemplos da net ).

Abraço
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 14 Jul 2010 14:57

Se eu quiser fazer do zero NO MIKROC, alguém me daria uma luz????

Do tipo, sei mais ou menos como funciona a budega. Mas preciso de uma ideia de como começar, não quero o código, mas um passo a passo seria bom.

Vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Francesco » 14 Jul 2010 15:09

Jorge,

Se quiser podemos ajudar... estou mais acostumado com o bootloader do ARDUINO. As flags e endereços são diferentes (lógico), mas o processo em sí é igual.

Veja o que você acha:
http://code.google.com/p/arduino/source/browse/tags/0015/hardware/bootloaders/atmega/ATmegaBOOT_168.c

O bacana é que o código está aberto, e é apenas um arquivo C. Assim fica mais fácil para entender.

Francesco
Avatar do usuário
Francesco
Word
 
Mensagens: 699
Registrado em: 04 Mar 2008 00:22
Localização: São Paulo - SP

Mensagempor Jorge_Francisco » 14 Jul 2010 15:15

Porque alguns bootloaders são armazenados no final da memoria?
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Francesco » 14 Jul 2010 15:43

Dessa forma você consegue carregar qualquer programa de qualquer compilador. Não precisa se preocupar em compila-lo para uma determinada área da memória.

Por exemplo, o arduino com ATmega8 compila o bootloader para 0x1C00, isso significa que dos 8K de memória ele vai ocupar 1K do final. Assim, você pode fazer um programa de até 7K em qualquer compilador, compilando para o endereço padrão (0000h).
Avatar do usuário
Francesco
Word
 
Mensagens: 699
Registrado em: 04 Mar 2008 00:22
Localização: São Paulo - SP

Mensagempor Jorge_Francisco » 14 Jul 2010 16:06

Francesco escreveu:Dessa forma você consegue carregar qualquer programa de qualquer compilador. Não precisa se preocupar em compila-lo para uma determinada área da memória.

Por exemplo, o arduino com ATmega8 compila o bootloader para 0x1C00, isso significa que dos 8K de memória ele vai ocupar 1K do final. Assim, você pode fazer um programa de até 7K em qualquer compilador, compilando para o endereço padrão (0000h).


Entendido. Quando o uC inicializa ele vai para a posição 0000h para executar o programa, tenho que dizer ao compilador em todos os programas que eu fizer que tem que começar da posição 0x1C00( como o seu exemplo )???? Aí o bootloader toma uma decisão (atualizar ou não o firmware) e vai para 0000h, é isso??
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Sergio38br » 14 Jul 2010 16:25

Veja a area que pode ser protegida em cada micro contra auto gravação, geralmente esta coincide com a area onde fica armazenado o bootloader.

[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Jorge_Francisco » 14 Jul 2010 16:58

Sergio38br escreveu:Veja a area que pode ser protegida em cada micro contra auto gravação, geralmente esta coincide com a area onde fica armazenado o bootloader.

[ ]'s
Sergio


Vou dar uma olhada Sérgio.

Vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 14 Jul 2010 17:34

No código do Bootloader eu coloco isso no MikroC :

#pragma orgall 0x1C00

Mas como que ao inicializar o PIC saberá que tem que ir para este endereço?

Tenho que colocar no endereço 0x0000 um goto 0x1C00?

Como faria isso no MikroC???
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Francesco » 15 Jul 2010 00:54

Jorge,

No meu caso estou com um ATmega, não com um PIC... então as coisas são um pouco diferentes.

Quando ele inicia, vai direto para o endereço 0x1C00 porque o microcontrolador permite isso. No programa do bootloader ele verifica se a sequência de boot foi iniciada, se não ele pula para o 0x0000 e inicia o programa normalmente.

Se tiver curiosidade, no link do código que te mandei há a configuração do ponteiro para a função:
Código: Selecionar todos
void (*app_start)(void) = 0x0000;


E quando ele verifica que o boot não foi iniciado, então carrega o programa do 0x0000:

Código: Selecionar todos
        /* no UART was selected, start application */
        if(!bootuart) {
                app_start();
        }


Francesco
Avatar do usuário
Francesco
Word
 
Mensagens: 699
Registrado em: 04 Mar 2008 00:22
Localização: São Paulo - SP


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x