Utilisez une puce qui a plus de deux fois la quantité de mémoire Flash dont vous aurez besoin pour votre code. De cette façon, vous pouvez obtenir le nouveau firmware dans cette mémoire tout en laissant l'ancien en cas de problème.
Après avoir déchiffré et vérifié les sommes de contrôle sur le nouveau micrologiciel, un chargeur de démarrage peut le copier à son emplacement final, en remplaçant l'ancien. Si quelque chose se passe mal pendant cette partie, après une réinitialisation matérielle, le chargeur de démarrage devrait voir que le nouveau firmware n'est pas valide (en exécutant à nouveau la somme de contrôle) et réessayer la copie.
C'est la manière la plus simple et la plus infaillible que je connaisse. Il nécessite également peu de code dans le chargeur de démarrage et ne nécessite la duplication d'aucune fonctionnalité entre le programme principal et le chargeur de démarrage (vous n'avez besoin d'aucune logique de communication dans le chargeur de démarrage).
Utilisez un chargeur de démarrage et quelques Ko de mémoire flash supplémentaire.
Une mise à niveau est effectuée par le chargeur de démarrage, en envoyant une commande spéciale via UART, USB, I2C ou un autre protocole. Seul le code principal est mis à jour - le code du chargeur de démarrage n'est jamais touché, sauf via un programmeur externe (par exemple JTAG / PICkit pour les PIC, etc.)
Si la mise à jour échoue (coupure de courant, quelqu'un a trébuché sur un fil ou pour une autre raison), le widget ne fonctionnera pas, mais le chargeur de démarrage sera toujours là pour que la mise à niveau puisse être tentée à nouveau.
Un indicateur pourrait être défini dans un octet quelque part, ce qui empêche le code principal de s'exécuter incorrectement car il n'a pas été entièrement mis à jour.
la source
Si votre appareil est relativement cher et que vous pouvez vous permettre le coût (et que vos clients se soucient des mises à niveau), vous pouvez le faire ...
(généralement cette technique nécessite soit un stockage externe, soit une utilisation détournée de jtag ..)
Avoir un micro programme fixe (comme un petit PIC) qui peut arrêter le système et le reprogrammer.
parce que vous ne pouvez pas changer le firmware du "processeur de mise à niveau", il ne peut jamais se tromper.
1) l'utilisateur peut mettre à niveau l'appareil
2) si une mise à niveau échoue, ils peuvent toujours réessayer. Il ne peut pas être maçonné
3) même lorsque votre appareil cible ne prend pas en charge un chargeur de démarrage (il veut juste démarrer et fonctionner), vous pouvez toujours le faire faire ce que vous voulez.
fonctionne pour FPGA, DSP et autres cibles excentriques.
Peut avoir une interface utilisateur vraiment soignée (même un PIC peut exécuter un serveur Web ....)
la source
Assurez-vous que votre produit possède une sorte d' interface série simple , de préférence EIA232. Un connecteur non standard est OK si vous n'avez pas l'espace pour un DB-9. Par exemple, un connecteur TRS est tout ce dont vous avez besoin pour TxD, RxD et la masse.
Lors de la programmation de l'appareil pour la première fois, incluez un chargeur de démarrage . Cela devrait être aussi simple que possible , car tôt ou tard, vous voudrez mettre à niveau le chargeur de démarrage lui-même s'il a besoin de nouvelles fonctionnalités. (Vous ne pouvez probablement même pas le mettre à niveau)
Puis le connecteur TRS. Utilisez une prise avec un interrupteur pour pouvoir détecter la présence d'un connecteur. Vérifiez juste à la réinitialisation et démarrez le chargeur de démarrage si la prise est présente, sinon lancez l'application. De cette façon, le chargeur de démarrage et le programme d'application utilisateur restent bien séparés. (La vérification fait en fait partie du chargeur de démarrage; nous en aurons besoin quelle que soit la version de l'application, sinon nous ne pourrons pas entrer dans le chargeur de démarrage!)
la source
De quel équipement disposera l'upgrader? Un PC, une clé USB, une carte micro SD?
Une façon serait d'avoir l'application dans un élément amovible (clé USB, carte SD, etc.). La puce charge son application à partir de l'élément. Votre recycleur échange simplement l'élément et redémarre.
Les puces de microcontrôleur ARM et Cortex que je connais (NXP, Atmel) ont toutes un chargeur de démarrage série intégré, donc si votre programme de mise à jour arrive avec un PC et un câble série (et que vous avez prévu une interface de port COM), il peut simplement télécharger votre mise à jour.
la source