Catégories
Non classé

Découverte du matériel et des outils

Le matériel

Nous utilisons deux kits de développement fournis par Nordic :

Le nRF52840 (référence) est construit à partir d’un Cortex-M4, et implémente plusieurs protocoles de communication, notamment ZigBee qui nous intéresse dans notre projet.

Les outils de programmation

Les workshop de Ferrous Systems fournissent des outils de développement en Rust pour compiler les programmes, programmer la carte, recevoir du logging, etc.

L’essentiel

probe-run

C’est l’utilitaire qu’on utilisera le plus : construit l’exécutable (cargo-run), programme la carte en utilisant la sonde JTAG (probe-rs), et récupère les log et les traces de la pile d’exécution via le protocole RTT.

nrfutil

Utilitaire fourni par Nordic, il permet notamment de programmer le dongle (qui ne possède pas de sonde intégrée).

Autres utilitaires

cargo-flash

Permet de programmer la carte en utilisant la sonde JTAG de la carte de développement (utilise probe-rs).

cargo-embed

Pour visualiser les log via le protocole RTT. (peut servir aussi à programmer la carte grâce à probe-rs)

cargo-binutils

Fournit nm, objdump, objcopy, etc.

cargo-bloat

Analyse l’espace utilisé dans un fichier ELF (ou équivalent).

nrf-recover

Pour déverrouiller la flash si nécessaire.

Projet de référence

(voir https://embedded-trainings.ferrous-systems.com/from-scratch.html)

Pour commencer un nouveau projet en Rust sur la cible nRF52840, on utilise le projet de référence fourni ici : https://github.com/rust-embedded/cortex-m-quickstart en paramétrant pour un Cortex-M4.

Pour obtenir un HAL pour la carte, on utilise nrf52840-hal.

Si l’on veut allouer des structures de données sur la pile, on utilise heapless.

On peut ensuite utiliser rtt-target dans le projet pour générer des log qui transitent par la sonde.

Si nécessaire, on utilisera aussi le système d’exploitation RTIC.

Notre projet de référence se trouve sur notre dépôt ici : quickstart_project

Catégories
Non classé

Premiers pas

Et c’est parti ! …ou pas. Avant de commencer à coder quoi que ce soit, quelques règles s’imposent.

Organisation

Même si Sylvain et moi ne sommes que deux, nous nous sommes mis d’accord sur quelques règles pour ne pas nous marcher sur les pieds.

Git, Gitlab, etc.

Première règle absolue : ce qui est sur main est considéré comme étant du code en production. Cela implique que tout code en cours de développement est mis sur une branche à part tant qu’il n’est pas prêt pour la mise en production. On essaiera de faire idéalement une branche par fonctionnalité développée.

Lorsqu’une fonctionnalité est prête à être fusionnée dans main, on fera une merge request dans Gitlab afin d’approuver à deux la fusion.

Concernant les messages de commit, on utilisera les conventions données par git. Les messages sont en anglais et à l’impératif, leur titre ne doit pas faire plus de 50 caractères et le corps doit faire au plus 80 caractères de large.

Suivi de l’avancement

Les issues de Gitlab permettent de discuter sur des bugs ou des fonctionnalités, et peuvent être visualisées comme un kanban. On utilisera donc celles-ci pour suivre le développement des fonctionnalités.

Licence

Comme imposé pour notre projet, tout le code que nous écrirons sera sous licence libre duale Apache License 2.0 / MIT.


En résumé

  • branche main = production
  • Les fonctionnalités sont isolées sur des branches à part
  • On utilise les pull requests pour fusionner avec main
  • Les messages de commit :
    • en anglais
    • titre à l’impératif
    • titre <= 50 caractères
    • corps : lignes de moins de 80 caractères
  • issues Gitlab pour le suivi
  • Licence Apache License 2.0 / MIT

C’est bon on peut y aller ?

Il faut d’abord savoir où l’on va ! Avant de pouvoir développer sur notre carte développement nrf52840 une interface ZBOSS en Rust pour communiquer en ZigBee, il faut se former à chacun de ces éléments. Notre démarche initiale est la suivante :

  1. Beginner workshop de Ferrous Systems
  2. Advanced workshop de Ferrous Systems
  3. Etudier le fonctionnement de ZigBee et de 802.15.4
  4. Prendre en main l’interface ZigBee/ZBOSS de Nordic : https://infocenter.nordicsemi.com/index.jsp?topic=%2Fstruct_sdk%2Fstruct%2Fsdk_thread_zigbee_latest.html&cp=7_3
  5. Réaliser les bindings Rust de ZBOSS

On peut envisager si le temps nous le permet d’aller plus loin :

  • Faire une surcouche haut niveau si l’API ZBOSS est peu pratique
  • Réfléchir à des applications IoT, domotique, etc.
  • Utilisation conjointe de ZigBee et du Bluetooth

Nous avons commencé par prendre en main la carte de développement en réalisant les workshops organisés par Ferrous Systems, mais ça ce sera pour une prochaine fois…