如果您使用的停止位长度很容易从数据流的其余部分中辨别出来,例如 1.5 位时间,那么应该很容易在传输过程中开始接收。然而,这是以增加开销为代价的。随着停止位长度的增加,您的总可用数据吞吐量将受到影响。
如果您没有大量使用总线,并且经常在帧之间存在间隙,那么可能只是等待其中一个间隙发生,然后将第一个高低传输作为您的开始下一个起始位。
请记住,数据位的数量应该是可预测的,帧大小也应该是可预测的,因此即使您使用 100% 的总线容量并且您的停止位是单个位时间,您仍然应该能够找到如果您收集了足够的帧,请开始位。保证每一帧都有一个高低过渡。停止位始终为高位。起始位始终为低位。假设您的数据是随机的(或足够随机的),您可以做一些简单的事情,例如创建一个与帧大小相同的缓冲区,设置其中的每一位,然后继续收集帧并将它们与此缓冲区进行 AND 运算,直到缓冲区只有 1位设置。该位是您的停止位。后面的那个是你的开始位。瞧!你已经找到了。
如果您使用奇偶校验位,另一种选择是获取两帧数据,选择第一个低位作为起始位,然后计算校验和并与奇偶校验位进行比较。如果匹配,那么您(可能)找到了起始位。如果不是,请选择下一个低位并重复,直到获得良好的校验和。如果您在两帧数据中找不到作为有效起始位校验的位,那么您的数据已损坏,您需要再抓取两帧。