AdobeStock_177228568.jpeg
Accueil » Actualités » Intégrité des données critique pour les systèmes embarqués

Intégrité des données critique pour les systèmes embarqués



Comment valider les données des capteurs et de communication pour garantir l’intégrité des données dans les systèmes embarqués ?

Les ingénieurs logiciels ont la mauvaise habitude d’être très optimistes. Cet optimisme n’inclut souvent pas seulement leur calcul sur le temps qu’il faudra pour qu’une tâche spécifique soit terminée, mais aussi sur les modes de défaillance potentiels de leur système. Si cela fonctionne sur le banc, l’hypothèse est qu’il fonctionnera également sur le terrain, que ce champ se trouve sur un sol de fabrication bruyant ou en orbite autour de la Terre. Malheureusement, ces hypothèses sont optimistes et l’une des plus importantes est que les données sont toujours valides. J’ai déjà travaillé sur un projet où les données provenant d’un capteur étaient corrompues et il n’y avait aucun moyen de vérifier si les données du capteur étaient correctes.

L’article d’aujourd’hui examinera plusieurs façons dont les développeurs peuvent espérer le meilleur et supposer le pire en matière d’intégrité des données.

Astuce n°1 – Utilisez au moins un contrôle de parité

La parité est un mécanisme d’intégrité des données qui examine le nombre de uns dans un flux de données et ajuste ensuite un bit de parité pour rendre le nombre total de uns impair ou pair. Par exemple, disons qu’un capteur transmet un message de données de 16 bits de large et de parité impaire. L’un des bits, généralement le bit le moins significatif (LSB) sera utilisé pour définir la parité. Si les données qui seront envoyées sont :

1000 1000 1000 100x

Ensuite, afin d’être une parité impaire, le x sera mis à 1 pour qu’il y ait cinq uns dans les données. Si la parité avait été paire, alors x aurait été mis à 0 puisqu’il y en a déjà quatre dans les données.

La parité fonctionne bien pour détecter les retournements d’un seul bit. Si un zéro devient un ou un un devient zéro, alors l’erreur de parité peut être détectée. Cependant, si deux bits ou plus basculent, il est possible que l’erreur ne soit pas détectée. Dans ce cas, une technique plus robuste est requise.

Astuce #2 – Utilisez une somme de contrôle

Une somme de contrôle est un algorithme conçu pour détecter les erreurs qui se produisent naturellement ou de manière aléatoire dans un ensemble de données. Une somme de contrôle est souvent calculée sur un ensemble de données qui donne ensuite la somme de contrôle pour les données. L’ensemble de données contient souvent la somme de contrôle dans les données, de sorte que ces octets sont ignorés lors du calcul de la somme de contrôle. La somme de contrôle calculée est ensuite comparée à la somme de contrôle fournie avec les données pour voir si elles correspondent.

Il est important de réaliser que toutes les sommes de contrôle ne sont pas créées égales et peuvent détecter différentes erreurs. Par exemple, une somme de contrôle peut être capable de détecter qu’un seul bit a changé, mais une somme de contrôle différente peut être capable de détecter si plusieurs bits changent simultanément. Le simple fait qu’une somme de contrôle corresponde ne garantit pas qu’il n’y a pas d’erreurs dans les données ! Les sommes de contrôle sont également efficaces pour détecter les erreurs aléatoires, mais ne détecteront pas nécessairement les changements intentionnels, tels que ceux qui tentent de compromettre le système. Les développeurs doivent sélectionner avec soin la somme de contrôle qu’ils choisissent d’utiliser pour leur application.

Il y en a beaucoup, nous n’entrerons donc pas dans les détails ici, mais l’un de mes favoris personnels pour une utilisation sur un microcontrôleur est la somme de contrôle Fletcher16.

Astuce #3 – Utilisez un contrôle de redondance cyclique (CRC)

Un CRC est en fait une somme de contrôle, mais c’est un type très spécial de somme de contrôle. Un CRC est une somme de contrôle qui utilise une division polynomiale pour calculer la somme de contrôle. Comme vous pouvez l’imaginer, sur un système embarqué, en particulier un système embarqué basé sur un microcontrôleur, effectuer une division polynomiale est coûteux en calcul ! Il y a cependant des avantages supplémentaires dans la mesure où un CRC peut détecter une plus grande gamme d’erreurs que des sommes de contrôle plus simples. Le CRC est si efficace que de nombreux fournisseurs de microcontrôleurs incluront un calculateur de CRC basé sur le matériel pour permettre à un développeur d’utiliser efficacement un CRC. Malheureusement, il est très aléatoire de savoir s’il est inclus ou non, les développeurs doivent donc lire attentivement la fiche technique de leurs microcontrôleurs.

Conclusion

Dans un monde où la collecte et l’analyse de données ne cessent de croître, il est important de réaliser que nos systèmes ne peuvent pas faire confiance à chaque bit de données qui traverse un bus. Les interférences électromagnétiques, les rayons cosmiques et d’autres sources peuvent provoquer le retournement et la corruption des bits. Sans un mécanisme en place pour détecter ces basculements de bits, il est possible que les données soient exploitées et bien que dans de nombreuses circonstances, ce ne soit pas un gros problème, il y a des moments où cela pourrait être catastrophique pour le système. Les trois techniques dont nous avons discuté aujourd’hui sont simples et faciles à mettre en œuvre et fournissent une vérification simple de l’intégrité de toutes les données entrant et sortant d’un système.

A lire également