【问题标题】:Linux - Multiple Serial Port Communication with CLinux - 使用 C 进行多串口通信
【发布时间】:2013-06-05 17:42:45
【问题描述】:

我有一个带有多个串行端口的设备,我正在使用嵌入式 linux 进行编程,我想通过这两个端口同时异步通信。

我知道如何写入一个串行端口,例如:

bytes_sent = write( fd, &(string[i]), 1 );

但这只是一个串口

我是否使用 termios 结构和 c_cflags 来区分端口? 正如您所看到的,它有点模糊,我只是潜入其中并为此弄湿了我的脚,任何一般性的帮助都可以帮助我模糊地指出正确的方向。

【问题讨论】:

  • 不是每个串口都有自己的文件描述符吗?
  • 我认为 fd 要么返回 1 要么 -1 表示成功/失败。那么如果是这种情况 fd 会被分配它自己的整数 ID?
  • 所以如果我创建了一个 fd1 和 fd2 文件描述符(并且每个都有自己的整数),我可能会写入/读取两个端口?
  • 是的。不同的串口被认为是不同的外设,可以使用自己的描述符独立工作。
  • fd 不会“返回”任何内容。它是一个整数。你的意思是open()

标签: c serial-port


【解决方案1】:

您是如何获得第一个串行端口的文件描述符的?假设它是这样的:

fd = open("/dev/serialPort0", O_RDWR);

你应该能够做到:

fd2 = open("/dev/serialPort1", O_RDWR);

并获取用于其他串行端口的文件描述符。随心所欲地写信给每个人:

char str1[] = "Hello, port 1!\n";
char str2[] = "hello, port 2!\n";

write(fd, str1, sizeof str1);
write(fd2, str2, sizeof str2);

【讨论】:

    【解决方案2】:

    请参阅related answer 以将端口配置为所需的速度、奇偶校验和 i/o 阻塞特性。

    即使硬件有 4 个或 24 个串行端口,正确的处理是单独和独立地对待每个。

    【讨论】:

    • 如果我们有两个串行端口 A 和 B ,想想服务器客户端通信有没有办法连接这两个端口以发送消息?
    • @nikos.grigoriadis:当然。端口 A 和 B 在同一台机器上吗?什么是拓扑?
    • 是的,我想创建一个基于 AT 命令的服务器和客户端,它们将通过串行端口进行通信,并且读写将在 tty 文件中。是的在同一台机器上,我必须用 socat 测试它,但是我无法修复它正在服务器上打开 /dev/pts/0 并尝试通过它读取某些内容,但我无法使其工作。我应该在客户端打开同一个 tty 文件怎么办?或打开 /dev/pts/1 ?如果我打开 pts/1 谁来将它们与 socat 连接并在客户端编写某些东西时进行测试,服务器读取它并发送响应?如果您能帮我解决这个问题,我将不胜感激
    • @nikos.grigoriadis:Linux 命令lsusb 显示了什么?
    猜你喜欢
    • 2014-03-23
    • 2017-08-13
    • 2023-03-03
    • 2011-04-21
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多