初始化与c库open()的串行通信会导致TX在RPi上发送一位

我正在尝试在RPI和FPGA之间建立串行通信。 但是,使用标准C库open()来初始化串行接口时会出现问题:我使用示波器监视通过RX和TX线路发送和接收的内容。 对open的调用会导致RPI的TX线变为低电平,持续一位的长度。 我没有看到其他计算机/ Linux PC的这种行为。 关键是,FPGA假设有效传输,因为他认为它是一个起始位,但事实并非如此。

我检查了安装在RPI上的minicom。 一样。 启动minicom会导致TX线发送一位。 一旦minicom启动,通信就会按预期运行,并且所有字节都具有正确的帧大小。 有没有办法在打开调用初始化串行通信时抑制TX线变低? 这是预期的行为吗?

这是一个超级牵强的预感,但这个代码似乎有点可疑,来自PL011 串口驱动程序中的pl011_startup()函数:

 /* * Provoke TX FIFO interrupt into asserting. */ 

在启动端口时, 似乎它正在使TX线紊乱,这可以解释您所看到的脉冲。 当然,在得出结论之前肯定需要进行更多的调查。

所以,我想我的“答案”归结为:听起来很奇怪,也许这与司机有关?

当然,解决这个问题的一种方法是在FPGA端应用一些注意事项,假设您有更多的控制权。 “正确”的框架将处理这一点,并明确表示可以丢弃虚假发送。

更新 :我的意思是,如果“正确”的消息总是由某个字节序列构成,则FPGA可能无论如何都能丢弃无效(“无帧”)数据,从而对随机脉冲免疫。 例如,可以将消息定义为始终以SOH (标题的开头)或SOT (文本的开始)符号(分别具有值0x01和0x02的字节 )开始。