串行协议中的错误检测/纠正/恢复

时间:2009-12-09 19:44:45

标签: protocols serial-communication error-correction

我有一些设计要做一个串行协议,并遇到一些我认为必须在其他地方考虑过的问题。

所以我想知道是否有一些关于设计串行协议的最佳实践的建议。请说明一个易于验证的事实,或者引用一个声誉良好的来源,如果你做声明。)也欢迎网站/书籍的一般建议。

特别是我必须处理像

这样的问题
  • 将字节流解析为数据包
  • 验证数据包是否正确(例如,使用CRC很容易)
  • 识别可能发生的合理类型的错误(例如,在点对点串行流中,偶发的单比特错误和丢弃的字节序列都是可能的,但是不太可能有额外的幻像字节;而存储的是记录在闪存或磁盘驱动器上,占主导地位的错误类型不同)
  • 纠错或恢复(如果我检测到数据包中的错误,我可以更正吗?如果没有,我可以重新同步到下一个数据包的边界吗?)
  • 如何使可变长度数据包对纠错/恢复具有鲁棒性。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

数据包分隔

为了同步到数据包边界,通常会有一个字节或字节序列来标识数据包边界,这在数据包本身内不会发生。如果数据包数据恰好包含该标识符,那么你必须“逃避”(也就是字节填充)它。

示例:

数据包验证

各种选择:

纠错等

好问题。我对此没有多少经验。

答案 1 :(得分:3)

您是否考虑过 FEC (前向纠错)?

此过程经常用于“物理”级通信协议,如WDM(波分复用)​​/ OTN(光传输网络)。