Maison > développement back-end > C++ > Comment implémenter la fonction OTA pour ESPith SDK x (contrôleur programmable de script)

Comment implémenter la fonction OTA pour ESPith SDK x (contrôleur programmable de script)

Mary-Kate Olsen
Libérer: 2024-10-17 18:14:25
original
943 Les gens l'ont consulté

En tant qu'appareil Internet des objets prenant en charge la connexion à distance à Internet, la mise à niveau OTA locale ou distante est également une fonction importante du contrôleur de programmation de script, car il n'y a aucune garantie que le relais soit totalement exempt de bogues, trouvés dans le Utilisation de bugs, s'il n'y a pas d'interface de mise à niveau OTA, il est difficile de permettre aux clients de mettre à niveau le micrologiciel via le port série, le contrôleur ne peut être mis à niveau qu'en usine, le coût est élevé, l'impact est grand. 🎜>

De plus, le client peut disposer de certaines fonctions personnalisées qui ne peuvent pas être obtenues via la programmation chinoise et devoir mettre à niveau le micrologiciel du contrôleur pour y parvenir.

Ces deux situations doivent être résolues via la fonction OTA locale ou distante.

Ces jours-ci, nous avons passé un peu de temps à remplir cette fonction, désormais résumée comme suit :

(1) Le FLASH de l'ESP8266 peut stocker deux firmwares portant le nom user1.bin à user2.bin, et les adresses des deux firmwares sont déterminées par le programme de démarrage boot.bin stocké à l'adresse 0x0000, et les adresses de stockage sont différentes pour différentes capacités de flash.
Par exemple, ESP8266-01S avec une capacité Flash de 1 Mo, l'adresse de stockage est respectivement 0x01000 et 0x81000, tandis que ESP8266-07S avec une capacité FLASH de 4 Mo, l'adresse de stockage est respectivement 0x01000 et 0x101000.

(2) via la fonction system_upgrade_userbin_check, valeur de retour pour obtenir le programme actuel exécute user1.bin ou user2.bin, mise à niveau du micrologiciel, vers une autre zone de stockage du micrologiciel pour écrire le micrologiciel complet, par exemple, si l'exécution en cours est stockée dans le 0x1000 du user1.bin, puis à l'adresse 0x81000(ESP8266-01S) ou 0x101000(EPS8266-07S) pour écrire le firmware user2.bin, après écriture, puis via la fonction system_upgrade_flag_set(0x02) pour informer l'écriture du SDK est terminé, le SDK définit les paramètres du système, de sorte que lorsque le démarrage de l'ESP8266 démarre sur un autre firmware.

3) La pratique officielle recommandée est de télécharger le firmware sur le serveur cloud vers la mémoire via le protocole http, je n'ai pas utilisé ce programme, principalement à cause de deux considérations, premièrement, si ce programme a été rigoureusement vérifié, et si il y a une prise en compte suffisante de la validation des données pour éviter de passer à la brique, j'en doute. Deuxièmement, ce programme nécessite que le contrôleur puisse se connecter à un réseau externe pour télécharger le firmware depuis un serveur, ce qui n'est pas facile à faire.

J'utilise actuellement Delphi pour développer un ensemble de logiciels de mise à niveau du micrologiciel, le logiciel en tant que client TCP pour se connecter directement au contrôleur, ou se connecter à la passerelle TCP du serveur cloud puis transféré au contrôleur, puis selon le 512 octets pour une trame de données pour transmettre le firmware au contrôleur.

Ensuite, cet ensemble de logique peut être porté sur le serveur, le client peut ouvrir la page Web via le navigateur pour transmettre le micrologiciel au contrôleur.

4) L'intégrité des données est entièrement vérifiée, la première trame de données fait la somme de contrôle crc32, le firmware est écrit sur le flash puis lu pour comparer avec la valeur écrite, et en même temps calculer la valeur de crc32, et l'ordinateur supérieur pour envoyer la valeur de crc32 par rapport aux données de lecture et d'écriture sont les mêmes, et aussi la même valeur du crc, on considère que la trame de données est écrite avec succès ;

En même temps, la valeur crc32 de chaque trame de données, puis la valeur crc32, pour obtenir une valeur crc32 totale, comparée à la valeur crc32 totale envoyée par l'ordinateur hôte, la valeur est la même avant d'appeler la fonction system_upgrade_flag_set ( 0x02) pour permettre au SDK de passer au firmware de démarrage.

(5) Écrivez dans deux zones de micrologiciel différentes du micrologiciel user1.bin, user2.bin n'est pas le même, pour le développement du SDK RTOS, vous devez modifier la valeur de la variable Makefile APP pour générer user1.bin, user2 .bin, respectivement, l'ordinateur hôte en fonction du contrôleur pour revenir à l'exécution actuelle du micrologiciel de la zone de stockage, sélectionnez une autre zone de stockage du micrologiciel envoyé au contrôleur. L'ordinateur hôte sélectionne le micrologiciel dans l'autre zone de stockage en fonction de la zone de stockage du micrologiciel en cours d'exécution renvoyée par le contrôleur.

Si le même firmware est utilisé dans les deux zones de stockage, l'ESP8266 ne pourra pas démarrer normalement.

How to implement OTA function for ESPith SDK x(script programmable controller)

How to implement OTA function for ESPith SDK x(script programmable controller)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal