我在应用程序中使用SPI外设。外设返回包含15个数据位以及偶数奇偶校验位以进行错误检测的数据包。
因此,所有零和全部都通过奇偶校验。
这意味着我的微控制器无法检测到最常见的错误类型:外围设备已断开连接!在这种情况下,接收到的位全为零,这将通过奇偶校验。
假设外设的制造商实施奇数奇偶校验同样容易,我的问题是:在这种情况下,为什么他们选择使用偶数奇偶校验?在这种情况下,Even Parity是否还有其他优势来弥补无法捕获最常见错误类型的事实?
我在应用程序中使用SPI外设。外设返回包含15个数据位以及偶数奇偶校验位以进行错误检测的数据包。
因此,所有零和全部都通过奇偶校验。
这意味着我的微控制器无法检测到最常见的错误类型:外围设备已断开连接!在这种情况下,接收到的位全为零,这将通过奇偶校验。
假设外设的制造商实施奇数奇偶校验同样容易,我的问题是:在这种情况下,为什么他们选择使用偶数奇偶校验?在这种情况下,Even Parity是否还有其他优势来弥补无法捕获最常见错误类型的事实?
Answers:
单个奇偶校验位只能检查错误中单个或奇数个比特的存在,因此期望它检测外设何时断开连接可能期望太高。
但是,当不存在外设时,许多系统将产生连续的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作为有效的传输字,这在检测无效链接或无效芯片时没有用。在这方面,托尼·M的先前回答是错误的。请参见此处的7位数据示例表以获取证明:-https: //en.wikipedia.org/wiki/Parity_bit
但是,奇数奇偶校验会在全0或全1的情况下插入相反的状态位,从而证明链路和芯片都处于活动状态,在这种情况下将是更好的选择。