为什么要为偶数平价而烦恼?
单个奇偶校验位只能检查是否存在单个或奇数个错误位,因此期望它检测到外围设备何时断开连接可能期望过高。
然而,当外围设备不存在时,许多系统会产生一系列连续的 1,这可以通过返回数据线上的简单上拉电阻来实现。如果连接的外围设备返回了实际的 8 位数据,那么对于传输的十进制 255,奇偶校验位将为零。因此,在这些情况下,即使是奇偶校验也可以检测到外围设备何时断开连接。
如果使用奇校验,8 个高位(十进制 255)将导致高校验位,因此奇校验无法用作检测外围芯片丢失的手段。
课程用马。
奇偶校验或任何块错误检测旨在检测数据传输本身中的错误。奇偶校验并非旨在检测数据传输是否正在发生。
给定一条传输线,有几种不同的关注点。这里相关的两个是:1)线路本身的彻底故障,以及,2)在特定传输中阻塞数据错误。其他不太相关的是,例如,不正确的线路电压、协议错误或安全错误。奇偶校验有助于 2 而不是 1。对于传输线两端的子系统来处理 1(连接彻底失败),需要另一个协议特性。
单个奇偶校验位的检错率往往高于50%。该速率究竟是多少取决于协议中数据段的启发式方法。假设您有一个数据包,(MSB)1011010111011110,并且在最后一个传输位中有一个位错误,奇偶校验将失败并正确拒绝它的数据包。同样,如果第一位(奇偶校验位)有数据错误,则数据包将被拒绝。
在硬件中执行此检查非常简单,不需要复杂的处理。在比特错误率相对较低的应用程序中,它可以清除运行垃圾收集软件堆栈的处理器产生的时钟偏差或时钟信号等问题。
SPI 是一种物理链路协议,专为短的电气连接线路而设计,其中单位错误率不太取决于线路的损耗。如果您在有损线路上运行某些东西,您将需要比奇偶校验更强大的东西。这不是 SPI 所做的。
要检查设备是否仍然连接,请尝试堆栈中更高的内容。相比之下,TCP/IP(特别是 IP)没有指定奇偶校验位,而许多 802.x 以太网规范都有。另一方面,IP 确实有一个复杂的问题,“你在吗?” 协议。你在 SPI 上运行什么?数据链路管理的答案可能就在那里。
偶校验比奇校验没有明显的好处。在通信和存储方案中,应选择奇偶校验极性(奇数或偶数)以捕获最可能或最常发生的故障模式。
正如你所说,一个无响应的目标或损坏的数据接收线很可能导致 MISO 线卡在高位或低位。
当通过 SPI 传输偶数位(例如字节)时,奇校验位会检测到全 1 或全 0 数据中的故障,但偶校验不会。
然而,当传输奇数位时,没有这样明显的赢家,例如在您的应用程序中通过 SPI 传输 15 位。即使奇偶校验会在全 1 的情况下检测到错误,但会错过全 0 的情况。相反,奇校验会在全 0 的情况下检测到错误,但在全 1 的情况下会漏掉。
您对此提出质疑是对的,我对均等也有同样的批评。在添加奇偶校验位之前有奇数个数据位,如您的示例所示,并且通常情况下,偶数奇偶校验允许全 0 和全 1 作为有效的传输字,这在检测死链接或死芯片时是无用的。Tony M 之前的回答在这方面是错误的。请参阅此处的 7 位数据示例表以获取证明:- https://en.wikipedia.org/wiki/Parity_bit
然而,奇校验会在全 0 或全 1 的情况下插入相反的状态位,从而证明链路和芯片是活动的,在这种情况下将是一个更好的选择。