4

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

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

4

1 回答 1

1

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

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

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

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

当然,解决这个问题的一种方法是在 FPGA 端应用一些小心,假设您对它有更多的控制权。“正确的”框架会解决这个问题,并清楚地表明可以丢弃虚假发送。

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

于 2013-01-29T11:00:57.353 回答