小编Dan*_*aks的帖子

iMX 处理器上的串行驱动程序限制

我正在使用 ARM iMX6 处理器的嵌入式 Linux 设备上进行开发。主要目的是从外部源读取传入的串行流。

由于串行流的非典型性质,我在使用用于imx 处理器的Linux 串行驱动程序时遇到了一些障碍。但没有什么超出 iMX6 的能力。例如,传入的串行流是反转逻辑。iMX6 有一个特定的寄存器设置来反转 RX 信号。据我所知,Linux 驱动程序没有公开它。

另一个复杂之处是传入的串行数据以 3ms 突发的形式到达。外部源连续传输 3ms,然后 3ms 空闲,然后 3ms 数据,然后空闲,等等。为了与每个突发的第一个字节同步,能够检测线路何时空闲是非常有用的。同样,iMX6 有一个寄存器值专门用于指示 RX 线路空闲,但 Linux 驱动程序不会公开它。

我也很困惑驱动程序中的缓冲如何工作。我知道 iMX6 有一个 32 字节 FIFO 缓冲区,但我无法判断驱动程序是否使用该缓冲区或使用外部 RAM 进行缓冲。我遇到一个问题,当read我处于阻塞模式时,命令经常挂起一秒钟,而这种情况永远不会发生,因为数据流是连续的。

作为参考,以下是我在 C 代码中配置串行端口并读取 50 个字节的方法(目前我已将其更改为非阻塞):

#include <stropts.h>
#include <asm/termios.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
  int fd;
  struct termios2 terminal;
  unsigned char v[50];

  fd = open ("/dev/ttymxc2", O_RDONLY | O_NOCTTY | O_NONBLOCK );
  ioctl(fd, TCGETS2, &terminal);
  terminal.c_cflag |= …
Run Code Online (Sandbox Code Playgroud)

drivers serial-port

5
推荐指数
1
解决办法
1985
查看次数

标签 统计

drivers ×1

serial-port ×1