为什么要检查串行通信中的错误?
通过多个网络通道传输数据可能会在通过网络发送的信息中产生错误。错误检查是一种查找损坏数据并防止与之相关的一些问题的有效方法。有几种不同的方法可以确定接收的数据是否已损坏。这些方法通常包括某种形式的冗余信息或在串行传输的发送端和接收端完成的计算,以进行数据质量分析。
通信中的错误通常是由于传输过程中的电噪声干扰数据而导致的。电噪声会在发送和接收单元之间传输数据时破坏数据。因此,噪声会干扰二进制信号,翻转数据位,将 1 变成 0,将 0 变成 1。可以使用不同类型的错误检测代码来查找错误。这些检测代码的复杂程度各不相同,从非常简单的奇偶校验到更复杂的代码,如循环冗余校验 (CRC) 和其他错误检测方法。
以太网串行通信
奇偶校验位
奇偶校验错误是错误检测的简单形式,它包括在传输数据末尾添加一个位以检测错误。
奇偶校验位通常位于给定的数据字节内。因此,该字节由 7 位数据和一个奇偶校验位(偶校验或奇校验)组成,用于检查数据的状态。奇偶校验错误检查只能用于检测数据损坏,而不能纠正数据损坏。
奇偶校验只有在错误数为奇数时才会起作用,因为偶数错误将抵消位总和奇偶校验的任何变化。但这也许是可以接受的,因为在一个字节中,出现一个错误的可能性很低;出现两个错误的可能性则要低得多。
可以执行两种不同的奇偶校验,即偶校验或奇校验。仅对数据集中存在的 1 进行计数,校验位本身也包含在校验中。
例如,在偶校验中,发送的数据字节由 1010101 0组成:该校验位是字节末尾的一个0。在偶校验中,字节中 1 的总数必须是偶数,数据才能通过接收端的校验。在我们的示例中,有四个 1,因此一个校验位是零,使得字节中 1 的总和等于 4,这是一个偶数。
如果使用奇校验中的相同字节示例,则传输的接收设备将断定该字节已损坏。这是因为 1010101 0中的一位使字节中的 1 的数量为偶数,在奇校验的情况下产生“假”。对于使用奇校验的系统,相同的数据 1010101 应该以1作为一位发送,使传输中的 1 的数量为奇数,或者在这种特定数据传输的情况下为“真”。使用相同的数据,正确的奇校验传输将如下所示 1010101 1。
电机驱动装置
校验和错误检查比奇偶校验更复杂,但其优点是精度更高,漏检错误的可能性更小。校验和的工作原理是发送一个“校验和”来伴随发送的数据。
发送单元通过使用 1s 补码算法将位相加来创建校验和。在 1s 补码算法中,只要有进位数字,就会将其添加到总和中,这意味着发送的数据序列的长度保持不变。
将所有数据相加得到一个和,然后对该和进行求反以生成校验和。在布尔术语中,“求反”意味着所有 1 都变为 0,所有 0 都变为 1。
校验和与接收器要接受的数据一起发送。然后,接收器获取数据并对所有接收到的数据进行求和。然后将接收到的数据总和添加到校验和中,并对的求和进行的补码。如果数据中没有错误,则结果总和的补码将始终为 0。
校验和示例
发送数据 #1 = 11001001
发送数据 #2 = 00010110
发送金额 = 11011111
校验和 = 00100000
接收数据 #1 = 11001001
接收数据 #2 = 00010110
校验和 = 00100000
收到的金额 = 11111111
接收总和补码 = 00000000
在示例中,所有接收数据的补码加上校验和都为零,因此接收方可以得出结论,数据未受破坏。
网络电缆
图 3.所有网络类型都容易受到感应产生的干扰;问题是,我们如何才能发现问题?图片由Adob??e Stock提供
循环冗余校验 (CRC)
循环冗余校验 (CRC)是另一种错误检测形式,它依靠多项式除法来检查 1 和 0 的数量是否正确,以及它们的顺序是否正确。本质上,要检查的数据被视为多项式方程,然后除以选定的除数,除数本身的值对于检查的准确性和实用性很重要。
为了适应校验方法,必须将二进制信息转换为多项式方程。为此,二进制数变为多项式表达式中的系数,其长度与要除的代码长度完全匹配。下面显示了该过程的工作原理示例。多项式转换很有用,因为它创建了一种除法方法,而无需在二进制数学中进位或借位,而减法则需要这样做。这创建了用于 CRC 冗余校验的 XOR 除法方法。
CRC 计算示例
我们假设二进制数 101101 为数据位串,并使用各个二进制位作为多项式的系数,用于多项式除法。它看起来是这样的:
计算机利用数学系统中称为线性代数的多项式除法的系数,这在计算算法中非常常见。
接下来,我们需要用另一个多项式或“密钥”除以它;我们使用 1110。得到的密钥看起来会像这样:
接下来,进行除法并求余数。余数附加到数据中并用于冗余校验。如果接收的数据除以密钥,然后接收的余数和发送的余数之间的差为零,则数据没有损坏。如果有余数,则数据已损坏。
发送方计算
使用我们之前假设的示例数据,发送的信息将按如下方式计算:
实际数据:101101
被除数: 101101000。该值由实际数据与末尾附加的 [(密钥中的位数) - 1] 个 0组合而成。我们的密钥(如下)包含 4 位,因此数据需要添加 [4-1] 或三个 0 才能进行计算。
除数(键):1110
现在,可以进行计算来确定代码字:
101101000 ÷ 1110 = 111101,使用异或除法,余数为 110。
因此要发送的编码字将变成 101101110,因为余数放在编码字的三个空格中。
因此以下内容将被发送给接收者:
实际数据:101101
密钥:1110
代码字:101101110
接收方计算
然后,接收方将获取该信息并用密钥除以代码字,这实际上与之前的过程相反。
余数应该为零,并且实际数据是可信的,除非数据已被破坏,在这种情况下将出现非零余数。
101101110 ÷ 1110 = 111101,使用异或除法,余数为 0。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。