在嵌入式系统中验证传感器和通信数据的3个技巧

软件工程师有一个非常乐观的坏习惯。这种乐观的态度通常不仅包括他们完成一项特定任务将花费多长时间的计算,而且还包括他们系统的潜在故障模式。如果它在工作台上工作,则假定它也将在野外工作,无论该场是在嘈杂的生产车间还是绕地球旋转。不幸的是,这些假设是乐观的,最大的假设之一是数据总是有效的。我曾经从事过一个项目,该项目中来自传感器的数据已损坏,并且无法验证传感器数据是否正确!在今天的帖子中,让我们看一下在数据完整性方面,开发人员可以期望最好的方法,并假设最坏的方法。

提示1 –至少使用奇偶校验

奇偶校验是一种数据完整性机制,它查看数据流中的奇偶校验数目,然后将调整奇偶校验位以使总的奇偶校验数目为奇数或偶数。例如,假设传感器发送的数据消息为16位宽且为奇偶校验。这些位之一(通常是最低有效位(LSB))将用于设置奇偶校验。如果要发送的数据是:

1000 1000 1000 100x

然后,为了获得奇数奇偶校验,将x设置为1,以便数据中有五个。如果奇偶校验为偶数,则x将被设置为0,因为数据中已经有四个。

奇偶校验非常适合检测单比特翻转。如果零变为1或1变为零,则可以检测到奇偶校验错误。但是,如果两个或多个位发生翻转,则可能无法检测到错误。为此,需要更可靠的技术。

提示2 –使用校验和

校验和是一种算法,用于检测数据集中自然或随机发生的错误。通常对一组数据计算校验和,然后得出该数据的校验和。数据集通常在数据中包含校验和,因此在计算校验和时将忽略那些字节。然后将计算出的校验和与数据随附的校验和进行比较,以查看它们是否匹配。

重要的是要意识到,并非所有校验和都相同,并且可以检测到不同的错误。例如,一个校验和可能能够检测到单个位已更改,但是不同的校验和可能能够检测到多个位是否同时更改。仅仅因为校验和匹配就不能保证数据中没有错误!校验和也擅长检测随机错误,但不一定要检测故意的变化,例如试图破坏系统的人的变化。开发人员需要仔细选择他们选择用于其应用程序的校验和。 (那里有很多东西,所以我们在这里不做详细介绍,但是我最喜欢在微控制器上使用的一个功能是Fletcher16校验和)。

技巧3 –使用循环冗余码校验(CRC)

CRC实际上是一个校验和,但是它是一种非常特殊的校验和。 CRC是使用多项式除法来计算校验和的校验和。可以想象,在嵌入式系统上,尤其是在基于微控制器的嵌入式系统上,执行多项式除法在计算上是昂贵的!尽管与简单的校验和相比,CRC可以检测到更大范围的错误,但还有其他好处。 CRC如此有效,以至于许多微控制器供应商都将包括基于硬件的CRC计算器,以允许开发人员有效地使用CRC。不幸的是,它是否包含在内是非常偶然的事情,因此开发人员需要仔细阅读其微控制器数据表。

结论

在一个不断增长的数据收集和分析世界中,重要的是要意识到我们的系统不能仅仅信任总线上传输的每一个数据。电磁干扰,宇宙射线和其他来源可能导致位翻转并损坏。如果没有适当的机制来检测这些位翻转,则数据可能会受到作用,虽然在许多情况下这没什么大不了的,但有时它会对系统造成灾难性的影响。我们今天讨论的三种技术很容易实现,并且对进入和流出系统的所有数据提供了简单的完整性检查。

3 thoughts 上 “在嵌入式系统中验证传感器和通信数据的3个技巧”

  1. 好的工程师不会做出乐观的假设。当我刚开始这个职业时,我与一对经验丰富的工程师一起工作,他们写了一个状态机,等待特定的标准从一个州转移到另一个州。没有超时功能,没有错误条件或错误的数据包处理等。–一切都希望完美地点击。当我指出单个串行通信故障会使系统处于任何状态时,并且它们至少需要实施超时以重试事务时,他们对初级工程师的这种奇怪建议感到惊讶。最终,在经理干预之后,他们不得不重写代码。这两个人认为他们是我们的优秀工程师。当我们其他人离开寻求其他机会时,我们感到很高兴。

  2. 我的建议是:始终使用CRC。您可以不使用多项式除法来计算CRC,只需使用该算法的列表形式即可。它的FAST速度很快,并且仅具有一个缺点:对于CRC8,需要一个256个闪存字节的表;对于一个CRC16,则需要两个256个字节的表。

  3. 对于没有奇偶校验或校验和的传感器数据,您仍然可以进行一些验证。可能存在超出范围或明显非物理的值,例如,低于0K的绝对温度。如果读数在时间上有规律地间隔开,您可以使用最大可能的变化率知识来拒绝必须损坏的读数,并且有一些聪明的过滤算法可以做得更多。

    CRC的权威资料来源是Koopman教授,值得在以下网站阅读他的论文 //users.ece.cmu.edu/~koopman/projects.html#crc。我自己对他的数据的摘要和电子表格分析位于 http://blog.martincowen.me.uk/tags/crc/

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.