为什么还要打平价格呢?


12

我在应用程序中使用SPI外设。外设返回包含15个数据位以及偶数奇偶校验位以进行错误检测的数据包。

SPI外设上的奇偶校验

因此,所有零和全部都通过奇偶校验。

这意味着我的微控制器无法检测到最常见的错误类型:外围设备已断开连接!在这种情况下,接收到的位全为零,这将通过奇偶校验。

假设外设的制造商实施奇数奇偶校验同样容易,我的问题是:在这种情况下,为什么他们选择使用偶数奇偶校验?在这种情况下,Even Parity是否还有其他优势来弥补无法捕获最常见错误类型的事实?


6
请注意,“奇偶校验”(偶数或奇数)是恐龙技术,不应在现代的专业系统中使用。捕获单个位错误的可能性小于50%,对于多位错误更糟。只需忘记使用奇偶校验就可以了,即使在1960年代,使用它也是一个愚蠢的想法。如果需要验证SPI数据线,则应使用输入捕获计时器或类似的工具来监督较低层的数据。还要检查SPI标志是否存在缓冲区溢出等情况。–
Lundin

39
@Lundin “它捕获单个位错误的可能性不到50%,对于多位错误,更糟。” -如果单个位错误,则奇偶校验将是错误的。简单奇偶校验有100%的机会捕获单比特错误,而不是“小于50%”。(类似地,它捕获2位错误的机会为0%,捕获3位错误的机会为100%)。
marcelm '18年

7
@Lundin-请向制造这些芯片的AMS制造商发表您的评论。
Rocketmagnet

26
@Lundin如果奇偶校验位翻转,则奇偶校验检查仍然失败。
亚当·豪恩

4
在大多数情况下,这仍然是毫无用处的。⁽ᶜᶦᵗᵃᵗᶦᵒᶰᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin

Answers:


14

单个奇偶校验位只能检查错误中单个或奇数个比特的存在,因此期望它检测外设何时断开连接可能期望太高。

但是,当不存在外设时,许多系统将产生连续的1系列,这可以通过在返回的数据线上使用简单的上拉电阻来实现。如果连接的外设返回了实际的8位数据,则​​对于十进制255,奇偶校验位将为零。因此,在这些情况下,即使奇偶校验也可以检测到何时断开外围设备连接。

如果使用奇数奇偶校验,则8个高位(十进制255)将导致高奇偶校验位,因此使奇数奇偶校验无法用作检测外围芯片丢失的手段。

马匹的课程。


2
愚蠢的我,我应该提到这个特定的应用程序有15个数据位和一个奇偶校验位。现在已更正。但是我仍然认为期望进行奇偶校验以检测完全断开的外围设备是合理的。它完全在其能力范围内,实际上是您可以执行的最有用的检查。
Rocketmagnet

1
此外,@ Rocketmagnet,您添加到问题中的表似乎是发送给外围设备的数据格式-注意第14位的术语“必须为0”-也许您应该链接到设备数据表?
安迪又名'18

3
修改后的表将第14位显示为错误标志,我的建议是在断开设备连接时使用串行返回数据的上拉使数据全为1,因为解码后的第14位将指示问题。
安迪(aka)

1
@Trevor_G糟糕。修改中。
安迪(aka)

1
正确的预期是,如果有风险,使用spi控制器的软件应验证返回的数据。如果您没有控制一方或另一方的权限,那么您肯定需要在更高级别的软件中执行此操作。唯一可以放手的是,如果您控制spi设计的两面并使其满足您的误码要求,在这种情况下,您听起来不能这样做。因此,您的软件应该检查​​所有零和所有零,而不是spi控制器的工作,也不是有用性有限的奇偶校验...
old_timer 18'Jan

5

奇偶校验或任何块错误检测旨在检测数据传输本身中的错误。奇偶校验设计为检测是否正在进行数据传输。

给定传输线,存在几种不同的关注点。这里相关的两个是:1)线路本身的彻底故障,以及2)特定传输中的数据错误块。其他不那么重要的是,例如,错误的线路电压,协议错误或安全错误。奇偶校验有助于2,但不能帮助1。要使传输线两端的子系统要处理1(连接完全失败),则需要另一个协议功能。

单个奇偶校验位的错误检测率通常高于50%。确切地说,该速率取决于协议中数据段的启发式。假设您有一个数据包(MSB)1011010111011110,并且在最后一个传输的位中出现单个位错误,则奇偶校验将失败并正确拒绝该数据包。同样,如果您在第一位(奇偶校验位)中出现数据错误,则该数据包将被拒绝。

在硬件中执行此检查非常简单,不需要复杂的处理。在误码率相对较低的应用中,它可以清除诸如时钟偏斜或运行垃圾收集软件堆栈的处理器生成的时钟信号之类的东西。

SPI是一种物理链接协议,专为短电连接的线路而设计,在该线路中,单位错误率与线路损耗的关系不大。如果您正在有损线路上运行某些内容,那么您将需要一种比奇偶校验更可靠的方法。这并不是SPI真正要做的。

要检查设备是否仍处于连接状态,请尝试堆栈中较高的位置。相比之下,TCP / IP(特别是IP)未指定奇偶校验位,而许多802.x以太网规范却指定了奇偶校验位。另一方面,IP确实有一个复杂的“你在吗?” 协议。您在SPI之上运行什么?数据链接管理的答案可能在那里。


1
802.3和.11使用CRC32; IP和TCP以及(可选)UDP使用16位的补码和,由于事实上很少有机器甚至ALU都是1sC,因此大多数情况下是通过无符号加法加进位实现的。
dave_thompson_085

问题的关键是,平价可以很容易地检测线路本身的彻底失败。如果我取全1或全0,那应该是一个失败。
Rocketmagnet '18 -10-31

4

奇偶校验没有奇数校验的好处。在通信和存储方案中,应选择奇偶校验极性(奇数或偶数)以捕获最可能或发生最多的故障模式。

就像您说的那样,目标无响应或数据接收线损坏可能会导致MISO线卡得太高或太低。

当传送偶数个位(例如,通过SPI传输字节)时,奇数奇偶校验位将检测到全1或全0数据中的故障,但即使奇偶校验也不会。

但是,在通信奇数位时(例如在您的应用中通过SPI使用15位)时,没有如此明显的赢家。即使是奇偶校验也会在全1的情况下检测到故障,但会错过全0的情况。相反,奇数奇偶校验会在全0情况下检测到故障,但会错过全1情况。


实际上,是的,在这种情况下显然存在。正如我在问题中解释的那样,奇数奇偶校验能够检测到:丢失的,有缺陷的断开连接的芯片和电缆故障,而偶数奇偶校验则不能。
Rocketmagnet

0

奇偶校验的收益几乎没有差异。一个可以通过一个反相门转换为另一个。奇偶校验位的主要目的是仅检查该值中的15位。做任何其他事情不是它的目的。一个或另一个可以检测到丢失,故障或断开的芯片并不是一个考虑因素。您提到断开连接是您情况下最常见的错误类型。不要紧。奇偶校验位不存在以检测该类型的错误。


0

您对此提出质疑是正确的,我对平价也有同样的批评。如您的示例中所示,并且在常见情况下,奇偶校验之前加上奇数个数据位,偶数奇偶校验允许全0和全1作为有效的传输字,这在检测无效链接或无效芯片时没有用。在这方面,托尼·M的先前回答是错误的。请参见此处的7位数据示例表以获取证明:-https: //en.wikipedia.org/wiki/Parity_bit

但是,奇数奇偶校验会在全0或全1的情况下插入相反的状态位,从而证明链路和芯片都处于活动状态,在这种情况下将是更好的选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.