注:只要有异步时钟域之间的信号交流,就无可避免会有亚稳态问题的产生
比如uart的接收,如何判断起始位(通常uart中是信号拉低)?
尽管uart通信是在相同的波特率下进行传输,但毕竟时钟不是同步的,接收方和发送方分处在两个时钟域(尽管时钟频率相同)。
因此在判断是否产生下降沿,即是否是起始位时,就会有误判发生(亚稳态),即如果用接收方的时钟去采集rx线上的信号,rx信号可能正处在下降沿上,而接收方的采集采集到一个处于亚稳态的值,因此可能是0或是1,如果采集为0,则采集正确,数据开始传输,但如果识别为1,那就还是不会开始接收数据。这也就是亚稳态导致信号识别错误。
- 解决方案:
可以以快速时钟进行两拍或者三拍的采集,来判断下降沿是否产生,即使有降正在下降沿的信号采集为1的情况,但下一次的采集将会正确,总会产生前一拍为高,后一拍为低的情况,也就可以正式确定起始位的到来。