Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Existem muitos microcontroladores Wi-Fi no mercado, muitos fabricantes gostam de programar seu microcontrolador Wi-Fi usando o IDE Arduino. No entanto, um dos recursos mais legais que um microcontrolador Wi-Fi tem a oferecer tende a ser esquecido, que é programar e enviar seu código remotamente e sem fio usando a função OTA (Over-The-Air).
Neste Instructable, vou mostrar como configurar OTA em seu microcontrolador Wi-Fi usando o onipresente Arduino IDE no microcontrolador Ameba Arduino Wi-Fi!
Suprimentos
Ameba Arduino x 1
Etapa 1: OTA
OTA (Over-The-Air) refere-se ao mecanismo de atualização online via Internet.
O Arduino IDE oferece o recurso OTA, que segue o fluxo de trabalho na figura acima.
(i) Arduino IDE procura por mDNS dispositivos com serviço Arduino IDEOTA na rede local.
(ii) Como o serviço mDNS está sendo executado no Ameba, o Ameba responde à pesquisa mDNS e abre a porta TCP específica para conexão.
(iii) O usuário desenvolve o programa no Arduino IDE. Ao concluir, escolha a porta de rede.
(iv) Clique em upload. Em seguida, o IDE do Arduino envia a imagem OTA para o Ameba por meio do TCP, o Ameba salva a imagem em um endereço específico e define a opção de inicialização para inicializar a partir desta imagem na próxima vez.
O fluxo de trabalho consiste em três partes: processo de imagem mDNS, TCP e OTA. Os detalhes relacionados ao mDNS são descritos no tutorial do mDNS. A programação de soquete TCP é usada na transferência de imagens e já é fornecida na API OTA.
Na próxima seção, discutiremos como processar a imagem OTA e apresentaremos alguns conhecimentos básicos sobre o layout da memória flash Ameba e o fluxo de inicialização.
Etapa 2: Layout da memória Flash Ameba
O tamanho da memória flash do Ameba RTL8195A é 2 MB, varia de 0x00000000 a 0x00200000. No entanto, o tamanho da memória flash do Ameba RTL8710 é de 1 MB. Para ajustar o uso de placas diferentes, presumimos que o layout da memória flash é de 1 MB.
Conforme mostrado na figura acima, o programa Ameba ocupa três partes da memória flash:
- Imagem de inicialização:
Ou seja, o bootloader. Quando o Ameba é inicializado, ele coloca a imagem de inicialização na memória e executa a inicialização. Além disso, determina onde proceder após o bootloader. Bootloader examina o endereço OTA e o pino de recuperação na área de dados do sistema e determina qual imagem será executada posteriormente. No final do bootloader, ele coloca a imagem na memória e inicia a execução.
- Imagem padrão 2:
O código do desenvolvedor é colocado nesta parte, o endereço começa em 0x0000B000. Os primeiros 16 bytes são o cabeçalho da imagem, 0x0000B008 ~ 0x0000B00F compreende a assinatura, que é usada para verificar se a imagem é válida. O campo de assinatura tem dois valores válidos para distinguir a nova imagem da antiga.
- Imagem OTA:
Os dados nesta parte também são código do desenvolvedor. Por padrão, esta parte da memória começa em 0x00080000 (pode ser alterada). As principais diferenças entre a imagem OTA e a imagem padrão 2 são o endereço da memória flash e o valor da assinatura.
Além do código, existem alguns blocos de dados:
- Dados do sistema:
O bloco de dados do sistema começa em 0x00009000. Existem dois dados relacionados à OTA:
1. Endereço OTA: dados de 4 bytes a partir de 0x00009000. Ele informa o endereço da imagem OTA. Se o valor do endereço OTA for inválido (ou seja, 0xFFFFFFFF), a imagem OTA na memória flash não pode ser carregada corretamente.
2. Pino de recuperação: dados de 4 bytes começando em 0x00009008, o pino de recuperação é usado para determinar qual imagem (imagem padrão 2 ou imagem OTA) executar quando ambas as imagens são válidas. Se o valor do pino de recuperação for inválido (ou seja, 0xFFFFFFFF), a nova imagem será executada por padrão.
Os dados do sistema serão removidos quando carregarmos o programa no Ameba via DAP. Ou seja, o endereço OTA será removido e o Ameba determinará que não há imagem OTA.
- Dados de calibração: Os dados de calibração periférica são colocados neste bloco. Normalmente, esses dados não devem ser excluídos.
Etapa 3: Fluxo de inicialização
Da imagem acima, Discutimos os seguintes cenários: (i) OTA não é usado, use DAP para fazer upload do programa:
Nessa situação, o bootloader verifica a assinatura da imagem padrão 2 e o endereço OTA. Uma vez que o endereço OTA foi removido, a imagem padrão 2 será selecionada para execução.
(ii) a imagem OTA é transferida para o Ameba, o endereço OTA está configurado corretamente, o pino de recuperação não está configurado:
O Ameba recebeu imagem atualizada via OTA, a assinatura da imagem padrão 2 seria definida como assinatura antiga.
Bootloader verifica a assinatura da imagem padrão 2 e o endereço OTA. Ele descobrirá que o endereço OTA contém uma imagem OTA válida. Como o pino de recuperação não está definido, ele escolhe a nova imagem (ou seja, imagem OTA) a ser executada.
(iii) a imagem OTA é transferida para o Ameba, o endereço OTA está configurado corretamente, o pino de recuperação está configurado:
O Ameba recebeu imagem atualizada via OTA, a assinatura da imagem padrão 2 seria definida como assinatura antiga.
Bootloader verifica a assinatura da imagem padrão 2 e o endereço OTA. Ele descobrirá que o endereço OTA contém uma imagem OTA válida. Em seguida, verifique o valor do pino de recuperação. Se o pino de recuperação estiver conectado a LOW, a nova imagem (ou seja, imagem OTA) será executada. Se o pino de recuperação estiver conectado a HIGH, a imagem antiga (ou seja, a imagem padrão 2) será executada.
Etapa 4: Exemplo
Para usar o recurso OTA, atualize o firmware DAP para a versão> 0.7 (v0.7 não está incluído). O firmware DAP padrão de fábrica é a versão 0.7. Siga as instruções para atualizar o firmware DAP:
Abra o exemplo: "Arquivo" -> "Exemplos" -> "AmebaOTA" -> "ota_basic"
Preencha as informações de ssid e senha no código de amostra para conexão de rede.
Existem alguns parâmetros relacionados ao OTA:
§ MY_VERSION_NUMBER : Na primeira versão, precisamos definir o endereço OTA e o PIN de recuperação. Uma vez que desta vez carregamos via USB é a primeira versão, não precisamos alterar este valor.
§ OTA_PORT : Arduino IDE encontrará o Ameba via mDNS. O Ameba dirá ao Arduino IDE que abre a porta TCP 5000 para aguardar a imagem OTA.
§ RECOVERY_PIN : Configure o pino usado para recuperação. Usamos o pino 18 aqui.
Em seguida, usamos o programa de upload USB para Ameba. Clique em Ferramentas -> Portas, verifique a porta serial a ser usada:
Observe que o Arduino IDE usa uma porta para upload de programa e outputlog. Para evitar a situação em que o registro não pode ser gerado quando usamos OTA, usamos outro terminal de porta serial (por exemplo, termo Tera ou massa) em vez de monitor serial para observar a mensagem de registro.
Em seguida, clique em upload e pressione o botão reset.
Na mensagem de registro:
1. Entre “===== Enter Image 1 ====” e “Enter Image 2 ====”, você pode encontrar “Flash Image 2: Addr 0xb000”. Isso significa que o Ameba determina inicializar a partir da imagem padrão 2 em 0xb000.
2. Depois de “Enter Image 2 ====”, você pode encontrar “This is version 1”. Esta é a mensagem de log que adicionamos no esboço.
3. Após o Ameba ser conectado ao AP e obter o endereço IP “192.168.1.238”, ele ativa o mDNS e aguarda o cliente.
Em seguida, modificamos "MY_VERSION_NUMBER" para 2.
Clique em "Ferramentas" -> "Porta", você pode ver uma lista de "Portas de rede". Encontre "MyAmeba em 192.168.1.238 (Ameba RTL8195A)", MyAmeba é o nome do dispositivo mDNS que definimos no código de amostra e "192.168.1.238" é o IP da Ameba.
Se você não conseguir encontrar a porta de rede da Ameba, confirme:
- se o seu computador e o Ameba estão na mesma rede local?
- tente reiniciar o Arduino IDE.
- verifique a mensagem de log no Serial Monitor para ver se o Ameba está conectado ao AP com sucesso.
Em seguida, clique em upload. Desta vez, o programa será carregado via TCP. No terminal de log, você pode ver as informações de conexão do cliente.
Quando a imagem OTA é baixada com sucesso, o Ameba irá reiniciar e o log seguinte será mostrado no terminal de log.
- Entre “===== Enter Image 1 ====” e “Enter Image 2 ====”, você pode ver uma mensagem de log “Flash Image 2: Addr 0x80000”. Isso significa que o Ameba determina inicializar a partir da imagem OTA em 0x80000.
- Depois de “Enter Image 2 ====”, o log “This is version 2” é a mensagem que adicionamos no sketch.
Para recuperar a imagem anterior após o download da imagem OTA para o Ameba, conecte o pino de recuperação que definimos no esboço (ou seja, pino 18) para ALTO (3,3 V) e pressione reset.
Em seguida, a imagem padrão 2 será escolhida durante a inicialização. Observe que a imagem OTA baixada não é excluída, uma vez que o pino de recuperação seja desconectado de HIGH, a imagem OTA será executada.
Resumimos o fluxo de desenvolvimento usando OTA na figura a seguir.