我正在为微处理器编写一些代码,以通过单线异步串行通信与外部设备进行通信。
我可以识别电线上从低/高(无论哪种方式)的转换,所以我可以找到位边界。鉴于我知道设备正在使用的波特率,我可以开始计算位,因此我可以读取来自设备的位流。
我在概念上苦苦挣扎的是识别一个起始位 - 找到一个字节帧的开始(假设我得到 8 位,无奇偶校验,1 个起始位,1 个停止位)。我知道每一帧都以开始位开始并以停止位结束,但我的理解是开始位和停止位看起来像任何其他位 - 所以它们没有什么特别之处可以将它们识别为开始位或停止位(除了他们的立场)。
我能想到的识别起始位的唯一方法是,它将成为持续空闲期后的第一个高位 - 也就是说,因为我期望 8 位没有奇偶校验,如果我得到 9 个或更多低位,那么线路空闲,下一个高位将是起始位。这一切都很好,但是如果我开始监听设备的中间比特流并且线路上没有 9 位或更多的空闲时间怎么办?我正在计算位,但是我如何识别哪个位是起始位以便我可以读取一个字节?如果我正在计算位,那么帧之间的任何内容都只能是位的整数倍(例如,停止“位”不能是 1.5 位),所以一切看起来都像位。
我希望我说得通...感谢您的帮助。