如何识别异步串行比特流中的起始位

我正在为微处理器编写一些代码,通过单线通过异步串行通信与外部设备进行通信.

我可以从低/高(无论哪种方式)识别线路上的转换,因此我可以找到位边界.鉴于我知道设备正在使用的波特率,我可以开始关闭位,这样我就可以读取来自器件的位流.

我在概念上苦苦挣扎的是识别起始位 – 找到字节帧的开始(假设我得到8位,没有奇偶校验,1个起始位,1个停止位).我知道每个帧都以一个起始位开始,以一个停止位结束,但我的理解是,起始位和停止位看起来像任何其他位 – 所以没有什么特别的,它们将它们标识为起始位或停止位(除了他们的立场).

我能想到识别起始位的唯一方法是它将是持续空闲时段之后的第一个高位 – 也就是说,因为我期望8位没有奇偶校验,如果我得到9位或更多位,那么线路空闲,下一个高位将是一个起始位.这一切都很好,但如果我开始在设备中间比特流中听到并且线路上没有9位或更多的空闲时间怎么办?我正在关闭位,但是如何识别哪个位是起始位以便我可以读取一个字节?如果我正在关闭位,那么帧之间的任何东西只能是整数倍的位(因此停止“位”不能是1.5位),所以一切看起来都像位.

我希望我有意义…感谢任何帮助.

解决方法

起始位是让你的代码接收字节的原因.最好用状态机解释.你有4个基本状态:

>状态“等待”:对数据线进行采样.当你看到起始位然后以1.5 *位时间启动一个定时器并转到状态“数据”
>状态“数据”:等待定时器然后采样数据线以记录一点.将计时器重新启动到1.0 *位时间.只要您没有收到所有位,就重复此操作.收到所有位后,移至“停止”状态
>状态“停止”:等待定时器并对数据线进行采样以检查停止位.如果错误则移至状态“错误”,如果不是,则向接收缓冲区添加一个字节.回到状态“等待”.
>国家“错误”:抱怨.等待deus ex machina回到状态“等待”.

因此,基本的见解是你需要起始位来获取接收字节的代码.并且停止位很重要,因此您可以可靠地查看下一个字节的起始位.

相关文章

文章浏览阅读903次。文章主要介绍了收益聚合器Beefy协议在币...
文章浏览阅读952次。比特币的主要思路是,构建一个无中心、去...
文章浏览阅读2.5k次。虚拟人从最初的不温不火,到现在步入“...
文章浏览阅读1.3k次,点赞25次,收藏13次。通过调查和分析用...
文章浏览阅读1.7k次。这个智能合约安全系列提供了一个广泛的...
文章浏览阅读1.3k次。本文描述了比特币核心的编译与交互方法...