Atualização Remota

Galera, estou tentando bolar algum esquema que atualize remotamente o arduino, o que eu pensei inicialmente era colocar o arquivo já compilado em um cartão de memória, fazer o arduino lêr este arquivo na void Setup() se o cara estiver pressionando um botão, justamente para ele só atualizar se o cara estiver pressionando o botão de atualização, MAS daí em diante não faço ideia,...

Alguém já implementou algo assim, ou melhor, é possível ? Eu tenho uma placa da freescale, Kinetis KL25Z que faz algo parecido, só que ela tem 2 uC, um pra gravação e comunicação e outro que é o principal, quando eu conecto ela no PC, ela cria um drive como se fosse um cartão de memória, e se eu jogo algum arquivo ela grava, o arquivo ja tem que estar compilado.

Minha ideia final era ter um webservice com resposta em JSON para atualizar os as placas conectadas, elas iriam ter gravado na EEPROM a versão do sistema que estão usando, e comprar com a resposta do WebService, dai se fosse inferior baixariam o arquivo compilado e se 'atualizariam'.

Posso estar viajando mas já ouvi falar disto, em aparelhos como da SKY, ou até os roteadores/modens que se auto-atualizam via web, ...

Resumindo, minha dúvida é se tem como o arduino se auto-gravar um código ja compilado pelo computador e disponível em algum lugar, como hexadecimal...

o bootloader é o que acabasrte de referir, mas o espaço de memória para o bootloader não te permite criar código para aceder a um sistema de ficheiros. Podes, claro, meter ujm chip que faz isso... mas aí sai-te mais caro.

a placa da freescale é de 8 bits?

Ela é de 32 Bits, ...
Bem interessante, é compativel com a disposição de pinos do arduino o que faz ela compatível com as shields, a freescale fez justamente por isso.
Ela tem uma opção de compilar com: http://mbed.org que é uma plataforma aberta e cloud, muito foda, seria tipo um github pra eletrônica, em questão de compartilhamento de projetos open-source.

Da uma olhada:

http://br.mouser.com/new/freescalesemiconductor/freescale-freedom-kl25z/

Vou precisar necessariamente de um outro uC pra fazer isso então, dependendo do projeto vale a pena, eu queria mais por questões de aprendizado, ...

Mais ou menos... os AVR são chips baratos... se colocares dois chips apenas para actualizar firmware do outro é um bocado de desperdício, né?

Mas dependendo do projeto se tu for pensar e algo de produção, é melhor oferecer algo auto-atualizável por um preço relativamente pouco maior, dependendo do microcontrolador vai sair centavos mais caro, do que o cliente ter que levar em algum lugar para atualizar, ou até baixar a internet e gravar ele mesmo, ...

Estes sistemas que são atualizados por 'pendrive' também usam outro uC só pra gravar o uC alvo?

Depende do sistema e do chip em questão...

Um sistema baseado em microcontroladores tem, na maior parte das vezes, muito mais testes que outros sistemas, principalmente devido às poucas funções que executa. Ou seja, tem de executar pouca coisa, mas bem. Nesse aspecto, não é necessário fazer algo que seja preciso alterar o firmware repetidamente.

Adicionar mais um chip não são centavos... o hardware será muito similar ao controlador principal... depois, se pretendes fazer isso com um cartão SD, por exemplo, tens de ter um chip com bastante memória... nota por exemplo que só o ISP sketch tem mais de 16kB... não vi o tamanho duma biblioteca que implemente um sistema de ficheiros, mas são mais uns quantos kB... então quando dás por ela, já tens de ter um chip com mais de 16kB (32... como o ATmega328). Depois, dependendo de como queres fazer o update, acrescentas mais complicação.
Imagina que estás a usar SPI... se vais gravar com SPI, tens normalmente de desligar todos os chips do barramento, se isso não for possível tens de alterar algo.

Depois tens também o tempo de desenvolvimento do firmware para o segundo chip.

A ideia é boa... mas não é simples de implementar com chips de 8 bits. A placa da freescale de 32 bits certamente que será usada num sistema bem mais complexo que um sistema com um chip de 8.

Ola colegas.Estava aqui a ler as noticias :slight_smile: e o teu post é interessante.Do ponto de vista tecnico tem tudo isso que o Bubulindo te disse, mas visto que o teu objectivo e permitir que o utilizador possa ele fazer o upload de um novo programa podias criar um programasito em C# ou no que te sentires mais a vontade, com um GUI todo bonitinho.Este programa iria por detraz chamar o avrdude e enviar o novo firmare.
Para teres uma idea tens aqui um link de um projecto com esse objectivo.
https://github.com/adnbr/AVRDude-Hex-Uploader
Com isto impressionas o teu cliente e nao necessitas de intervir no Hardware tanto assim.Podes usar um FTDI232 com cabo USB(como o que vem na board) e basta dares ao cliente um "programador" e o teu programa.Vendes o cabo por mais uns cobres e ele fica todo satisfeito ...
A uns tempos atraz fiz um sistema de controlo por GSM e para o utilizador poder alterar os Pins, numero de SMS de destino , Numeros autorizados ... fiz um programasito em VB para o cliente alterar quando necessitar.No meu caso em nao envia-va o programa todo apenas alguns bytes para ir salvar na eeprom ...

Hugo, eu pensei em fazer bastante parametrização por arquivo no cartão de memória, e sempre que o uC encontrasse o arquivo "x.ini" no "boot" dele, ele copiaria as informações para a EEPROM e depois ele renomearia o arquivo, para outro nome, a fins de não ficar fazendo isso todas as vezes que ligasse ele com cartão de memória, ou até pendrive, ....
Mas dependendo do espaço de EEPROM se torna inviável, principalmente com dados grandes, ou até em alguns casos que temos que mudar código mesmo daí não adianta.

Você citou a questão de criar um software, e tal, é uma opção, mas eu queria fazer mesmo via hardware só a nível de conhecimento...

Brigadão a todos pelas respostas, eu sempre aprendo muito aqui no fórum.

Então estás interessado apenas em prova de conceito e não usar como solução final?
Peço desculpa, mas o meu cérebro é muito pouco académico e estou sempre a ver as coisas no sentido comercial e como tal a tua ideia não seria simples ou viável economicamente. Mas como prova de conceito seria interessante...

Vamos definir conceitos... queres passar dados para a EEPROM, ou estás a falar do programa para a flash? Eu o primeiro post entendi que era para a flash e não para EEPROM. Se for para a EEPROM não precisa de ser em boot.

Eu estava a pensar numa solução desse género para o meu sistema de monitorização. Metia um setup.ini num cartão SD onde indicava os nós da rede de comunicação e que periféricos estavam mapeados em que pino dos nós e depois o programa dos nós seria extremamente genérico uma vez que o master pediria para o nó executar uma dada função num determinado pino. O cartão serviria para as alturas que não tivesse net... se bem que ainda não percebi como fazer upload dos dados com um timestamp (mas deve ser possível). :slight_smile:

No entanto, tempo é algo que me falta em quantidades industriais. LOL

Não precisa pedir desculpas haha, eu dei a entender que parecia ser uma solução comercial mesmo, mas é para nível de conhecimento, se algum dia eu necessitasse, ...

Eu pensei em passar no 'boot'(ao ligar) os parâmetros para a EEPROM justamente para não forçar o usuário a ligar sempre com um pendrive ou um cartão de memória.

Tipo quero passar configurações, seila de IP da placa de rede, ou ajuste de um sensor, modo de atuação ... isso claro se o projeto não tiver interface gráfica...