您好,
我处理的是F2.8377万中的SCI通信,发现此MCU中没有接收FIFO超时。
因此,我需要使用额外的计时器(如cputimer1)来实现超时。
但是,如果使用两个sci通道(scia和scib)进行通信,则会出现问题。
这是否意味着我需要为每个sci使用两个计时器(cputimer1和2)?
如果答案是"是",那么我如何避免此问题?
因为我还需要一个计时器来做另一件事,而不仅仅是为了sci通信。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我处理的是F2.8377万中的SCI通信,发现此MCU中没有接收FIFO超时。
因此,我需要使用额外的计时器(如cputimer1)来实现超时。
但是,如果使用两个sci通道(scia和scib)进行通信,则会出现问题。
这是否意味着我需要为每个sci使用两个计时器(cputimer1和2)?
如果答案是"是",那么我如何避免此问题?
因为我还需要一个计时器来做另一件事,而不仅仅是为了sci通信。
舒恩
您需要在设备之间进行某种握手,因为 UART不会检查 意外帧。 这可以通过多种方式完成,您可以添加校验和,或添加 通信帧的起始和结束,或者如果数据更重要,您可以对收到的帧进行回声并验证其正确性。
当您检测到一些“虚拟数据”时,您可以使用SCIFFRX寄存器的“RXFIFO”位来重置RX FIFO。 清除此位将重置RX FIFO, 可在 技术参考手册中找到完整说明。
另请注意,随机噪声看起来像UART帧的情况很少见。 通常,噪音显示为错误时,您应检查SCIRXST的RXERROR位。 有关详细说明,也可在上面链接的技术参考手册中找到。
此致,
科迪
舒恩
如果您担心计时器在不需要时运行,则应在数据的第一个字节后启动计时器,并在收到CRC并匹配后停止计时器。 这将阻止计时器在未发送数据时运行。
其次,有许多方法可以解决此同步问题,我建议在出现CRC错误时,您应该与主设备进行F2.8377万握手,这会导致 两个设备在短时间内都无法清除 缓冲区并 重新同步。
您还可以定义一个“传输开始”帧,从中可以确定CRC在帧中的位置。 注意: 要使用 此方法,您需要考虑数据帧看起来像传输帧的起点的可能性,但这只有在您检测到CRC错误时才有关系。
希望它有所帮助,
科迪