Nous allons créer une carte ARM avec un modem GSM embarqué.
Nous voulons pouvoir mettre à jour le firmware ARM par voie hertzienne.
Existe-t-il une bonne solution open source fiable pour cela?
Sinon, existe-t-il un système d'exploitation payant avec cette fonctionnalité?
Réponses:
Je ne connais pas de solutions prédéfinies mais je vais décrire comment je l'ai fait dans un projet. Ce n'est pas totalement «incassable» mais je ne suis pas conscient qu'il échoue sur des milliers de mises à niveau. Pour cette application, un taux de défaillance très faible serait toujours moins cher que d'avoir à accéder aux unités.
L'application principale a trois types de paquets supplémentaires ajoutés à son protocole de communication normal qui inclut la détection des erreurs et une stratégie de nouvelle tentative en haut:
Une commande begin firmware update efface une zone de mémoire réservée dans un flash SPI externe. Il renvoie une erreur si l'unité fonctionne à partir de sa batterie de secours ou si elle fonctionne à partir d'une alimentation externe mais que l'état de charge de la batterie est inférieur à 25%.
Une commande de bloc d'écriture accepte une adresse de décalage et des données qui sont écrites dans la mémoire Flash externe en petits morceaux. Le protocole de niveau supérieur s'occupe de la détection des erreurs et des retransmissions. Une fois chaque bloc écrit, il est relu et vérifié avant que la commande ne soit acquittée.
Une commande de fin de mise à jour du micrologiciel inclut la longueur du micrologiciel reçu avec un CRC32 de l'image entière pour une vérification plus approfondie. Si cela correspond au contenu de la mémoire flash externe et que les conditions d'alimentation sont toujours OK, la même longueur et CRC32 sont transférés dans une zone EEPROM avec un `` nombre magique '' pour indiquer qu'une mise à jour du firmware est en attente.
Une boucle dure est exécutée dans l'application principale pour forcer un redémarrage du chien de garde.
Le chargeur de démarrage (qui se trouve dans une zone protégée en écriture du Flash de l'ARM) voit le nombre magique dans l'EEPROM et vérifie une fois de plus le CRC32 de l'image. Si tout est OK, il transfère l'image du flash externe dans la zone de programme principale du flash de l'ARM.
Les informations de mise à niveau en attente sont effacées de l'EEPROM et une boucle dure force un autre redémarrage. Cette fois, le chargeur de démarrage démarre normalement l'application principale.
Bien que je n'aie jamais vu la phase de mise à jour échouer à tester de nouvelles versions de micrologiciel avant le déploiement, il est crucial d'utiliser cette méthode. Si une nouvelle version n'est pas capable de se connecter au réseau GSM et d'accepter les commandes de mise à jour futures, elle nécessitera une mise à jour du micrologiciel sur site.
la source
Utilisez-vous Linux ou un RTOS, ou du bare metal? Si vous utilisez Debian, vous pouvez prendre un instantané du système de fichiers actuel, faire une mise à niveau via "apt-get" puis conserver ou annuler les modifications selon que cela a fonctionné ou non.
la source