DFU
Le DFU (Device Firmware Update) doit pernmettre de mettre à jour en toute sécurité le firmware d’un co-processeur. Un DFU est réalisable en respectant un processus défini qui permet de garantir la sûreté tout au long de la chaine entre le backend, l’application mobile, le processeur BLE et le processeur hôte. Le DFU peut être totalement automatisé ou lancé via des commandes Shell.
Description du processus du DFU automatisé
Le propriétaire du processeur hôte doit fournir un firmware de type Intel HEX.
Analyse du firmware par Linkio
Intégration du nouveau firmware dans une nouvelle release
Génération de la release (mise à disposition de la release sur le backend pour l’application mobile)
L’application mobile effectue une requête au backend pour vérifier si au moins un des produits installés à une nouvelle release disponible lors des événements listés ci-dessous
Au lancement de l’application mobile
Lorsque l’application mobile revient au 1er plan
Après un Provisioning
L’application mobile informe l’utilisateur qu’un nouveau firmware est disponible et propose la mise à jour
L’utilisateur valide la proposition de DFU.
Un transfert de fichier s’effectue entre l’application mobile et le processeur BLE
A la fin du transfert, la validité du firrmware est vérifié
Si la validitédu firmware est confirmé alors le transfert via le protocole STK500v1 se déroule
Le processeur BLE redémarre automatiquement après 15 secondes
Le processeur hôte envoie la commande vnd dfu version
Le processeur BLE vérifie que la version est différente de la précédente.
Le processus de DFU a été réalisé avec Succès.
uart:~$ vnd dfu version
version - set the version of the coproc - <val: w x y z>
# w,x,y,z sont des entiers définis sur 1 octet,
# leurs valeurs doit être comprises entre 0 et 255.
# Exemple : vnd dfu version 1 2 3 4 ou vnd dfu version 120 24 67 233
Présentation du systéme de fichier
Warning
Le système de fichier a une taille maximale de 150 kilo octets
Note
La racine du système de fichier est fs/
Il est possible d’interagir via le shell avec le système de fichier (littlefs) via les commandes présentées ci-dessous
uart:~$ fs
fs - File system commands
Subcommands:
cd :Change working directory
ls :List files in current directory
mkdir :Create directory
mount :<Mount fs, syntax:- fs mount <fs type> <mount-point>
pwd :Print current working directory
read :Read from file
cat :Concatenate files and print on the standard output
rm :Remove file
statvfs :Show file system state
trunc :Truncate file
write :Write file
uart:~$ fs ls fs
firmware_v02.03.00.01.hex
cmd_end (err 0)
uart:~$ fs rm fs/firmware_v02.03.00.01.hex
cmd_end (err 0)
uart:~$ fs ls fs
cmd_end (err 0)
uart:~$
Description du processus du DFU via le shell
Le propriétaire du processeur hôte doit fournir un firmware de type Intel HEX.
Analyse du firmware par Linkio
Intégration du nouveau firmware dans une nouvelle release
Génération de la release (mise à disposition de la release sur le backend pour l’application mobile)
L’application mobile effectue une requête au backend pour vérifier si au moins un des produits installés à une nouvelle release disponible lors des événements listés ci-dessous
Au lancement de l’application mobile
Lorsque l’application mobile revient au 1er plan
Après un Provisioning
L’application mobile informe l’utilisateur qu’un nouveau firmware est disponible et propose la mise à jour
L’utilisateur valide la proposition de DFU.
Un transfert de fichier s’effectue entre l’application mobile et le processeur BLE
Le processeur hôte vérifie qu’un nouveau firmware est disponible (périodiquement)
Le processeur hôte joue la commande shell permettant de lancer le transfert de données via le protocole STK500v1
Le processeur BLE vérifie la validité du firmware
Le transfert via le protocole STK500v1 se déroule
Le processeur BLE redémarre automatiquement après 15 secondes
Le processeur hôte envoie la commande vnd dfu version
Le processeur BLE vérifie que la version est différente de la précédente.
Le processus de DFU a été réalisé avec Succès.
uart:~$ vnd dfu version
version - set the version of the coproc - <val: w x y z>
# w,x,y,z sont des entiers définis sur 1 octet,
# leurs valeurs doit être comprises entre 0 et 255.
# Exemple : vnd dfu version 1 2 3 4 ou vnd dfu version 120 24 67 233
Lancement de la mise à jour via le protocole STK500v1
Le processeur hôte peut vérifier en amont la validité du nouveau firmware à l’aide de la commande vnd dfu check_hex <filename>
Warning
Le chemin faire le fichier se doit d’être précédé par /.
uart:~$ fs ls fs
firmware_v02.03.00.01.hex
cmd_end (err 0)
uart:~$ vnd dfu check_hex /fs/firmware_v02.03.00.00.hex
vnd dfu check hex file err: 0
cmd_end (err 0)
uart:~$ vnd dfu check_hex fs/firmware_v02.03.00.00.hex
vnd dfu check hex file err: -22
cmd_end (err -22)
le lancement de la mise à jour s’effectue avec la commande vnd dfu start <filename>.
Note
Avant tout échange de communication, la validité du fichier est vérifiée.
uart:~$ fs ls fs
firmware_v02.03.00.03.hex
cmd_end (err 0)
uart:~$ vnd dfu start /fs/firmware_v02.03.00.03.hex
cmd_end (err -138)
uart:~$ vnd dfu check_hex /fs/firmware_v02.03.00.03.hex
vnd dfu check hex file err: -5
cmd_end (err -5)
uart:~$
Warning
Une fois la commande vnd dfu start <filename> validée le shell est désactivé afin de pouvoir communiquer sur le même lien dans le protocole STK500v1.
uart:~$ vnd dfu start /fs/firmware_v02.03.00.01.hex
cmd_end (err 0)
# Communication dans le protocole STK500v1
0 0 0 0