Mises à niveau du firmware pare-balles

16

Quels types de techniques sont utilisés pour permettre à un utilisateur de mettre à niveau en toute sécurité un firmware de périphérique après la vente? Je veux le faire avec un microcontrôleur Cortex M3 / 4, mais je suppose que les techniques pour tout micro devraient le faire.

De préférence avec le moins de composants supplémentaires bien sûr.

Imbrondir
la source

Réponses:

16

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).

jpc
la source
10
En tant qu'utilisateur d'électronique, je pourrais ajouter qu'il serait bien d'avoir un bouton quelque part à tenir pendant le démarrage qui démarrerait l'ancien firmware, au cas où le nouveau aurait une somme de contrôle correcte mais le logiciel lui-même a un bug.
Zan Lynx
4
Le «problème» que je vois avec cette solution est que vous avez besoin d'une sorte de table de relocalisation ou d'un code indépendant de la position complète. Sinon, votre code ne s'exécutera pas.
Nico Erfurth
2
@Masta - Vous ne comprenez pas la partie où le firmware est copié vers son emplacement final (normal).
Kevin Vermeer
3
@jpc - Nous utilisons cette technique avec une puce Flash série externe sur certains outils internes au travail. Vous n'avez pas besoin d'avoir un microcontrôleur avec plus de deux fois le flash si vous avez de la place pour une partie SOIC ou QFN à 8 broches. Les mémoires flash série de 1 Mo peuvent être achetées pour moins d'un dollar, il peut donc être moins cher de suivre cette voie que de mettre à niveau le microcontrôleur dans certains cas!
Kevin Vermeer
@zan - Ouaip, nous l'utilisons aussi. Une préoccupation ou un avantage est que l'appareil est réinitialisé aux paramètres par défaut lorsque vous recopiez l'ancien firmware (nous n'avons pas d'EEPROM sur notre micro; nous stockons les données de configuration comme l'adresse MAC et l'adresse IP dans Flash auto-écrit). Pour nous, cela facilite la recherche d'une carte lorsque nous oublions l'adresse IP.
Kevin Vermeer
12

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.

Thomas O
la source
Vous pouvez également forcer le chargeur de démarrage à s'exécuter si le démarrage est dû à une mise sous tension. Cela aiderait si vous chargez un mauvais firmware qui se bloque immédiatement. Le chargeur de démarrage aurait besoin d'un délai d'expiration pour exécuter l'application après X secondes.
Robert
C'est une bonne idée si vous pouvez utiliser un protocole simple (comme une série asynchrone, TTL ou 485). Pour les cas plus impliqués (cartes SD, GPRS, USB), je n'inclurais pas le code de support complexe dans le chargeur de démarrage (non évolutif). Ethernet OTOH (UDP brut ou TFTP) est assez simple pour cela.
jpc
3

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 ....)

Tim Williscroft
la source
2

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!)

Stevenvh
la source
Pourquoi voudriez-vous jamais mettre à niveau le chargeur de démarrage? Comment vous assurer que le processus de mise à niveau ne brique pas l'appareil? Si c'était le cas, quelles nouvelles fonctionnalités seraient si convaincantes que vous risqueriez de les mettre à niveau?
Kevin Vermeer
5
@Kevin - Je pense qu'il voulait dire que le chargeur de démarrage devrait être si simple que vous ne pensez même pas à le "mettre à jour".
jpc
@jpc - Ah, vous avez raison, vous avez mal interprété cela. Nous sommes d'accord!
Kevin Vermeer
1

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.

Wouter van Ooijen
la source
Donc, simplement en câblant les broches UART à un port, tout en étant connecté à un port COM et à un PC, vous pouvez flasher le firmware sans aucun code sur le mcu? Bon conseil.
Imbrondir
Consultez la fiche technique, section 'bootloader'. Pour ce faire, vous aurez vraiment besoin de 1. réinitialiser la puce; 2. activez le chargeur de démarrage (la puce vérifie une broche cératine). Cela peut être fait par un cavalier et un interrupteur (réinitialisation), mais un moyen plus pratique (en particulier sur votre bureau) consiste à utiliser deux lignes de poignée de main pour faire l'astuce `` mains libres ''. La plupart des programmes de téléchargement PC (par exemple flashmagic, lpc21isp) peuvent faire la magie de prise de contact pour vous (si vous câblez correctement les lignes de prise de contact).
Wouter van Ooijen