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é

  1. Le propriétaire du processeur hôte doit fournir un firmware de type Intel HEX.

  2. Analyse du firmware par Linkio

  3. Intégration du nouveau firmware dans une nouvelle release

  4. Génération de la release (mise à disposition de la release sur le backend pour l’application mobile)

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

  6. L’application mobile informe l’utilisateur qu’un nouveau firmware est disponible et propose la mise à jour

  7. L’utilisateur valide la proposition de DFU.

  8. Un transfert de fichier s’effectue entre l’application mobile et le processeur BLE

  9. A la fin du transfert, la validité du firrmware est vérifié

  10. Si la validitédu firmware est confirmé alors le transfert via le protocole STK500v1 se déroule

  11. Le processeur BLE redémarre automatiquement après 15 secondes

  12. Le processeur hôte envoie la commande vnd dfu version

  13. Le processeur BLE vérifie que la version est différente de la précédente.

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

  1. Le propriétaire du processeur hôte doit fournir un firmware de type Intel HEX.

  2. Analyse du firmware par Linkio

  3. Intégration du nouveau firmware dans une nouvelle release

  4. Génération de la release (mise à disposition de la release sur le backend pour l’application mobile)

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

  6. L’application mobile informe l’utilisateur qu’un nouveau firmware est disponible et propose la mise à jour

  7. L’utilisateur valide la proposition de DFU.

  8. Un transfert de fichier s’effectue entre l’application mobile et le processeur BLE

  9. Le processeur hôte vérifie qu’un nouveau firmware est disponible (périodiquement)

  10. Le processeur hôte joue la commande shell permettant de lancer le transfert de données via le protocole STK500v1

  11. Le processeur BLE vérifie la validité du firmware

  12. Le transfert via le protocole STK500v1 se déroule

  13. Le processeur BLE redémarre automatiquement après 15 secondes

  14. Le processeur hôte envoie la commande vnd dfu version

  15. Le processeur BLE vérifie que la version est différente de la précédente.

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