在 Mac OS X 上通过串行端口进行管道传输

在 Mac OS X 上通过串行端口进行管道传输

我有一个 USB 转 RS232 适配器,用于将我的 MacBook Pro(OS X 10.9)连接到 Atmel 的 EVK1100 开发板。开发板上的程序在串行端口上输出大量信息,我希望能够检查这些信息。但是,我很难找到一个程序来做到这一点。

插入适配器后会出现两个设备:

  • /dev/cu.usbserial-FTB3VVRF
  • /dev/tty.usbserial-FTB3VVRF

我无法直接使用cattty 设备,因为它需要波特率。我可以使用 指定波特率,screen但它不允许我进行管道传输,并且它只能显示一屏的数据。

我能做些什么?

答案1

我曾经

(stty speed 115200 >/dev/null && cat) </dev/cu.usbserial-FTB3VVRF | tee serial.log

当我想从串行管道传输时。

答案2

我什么也没找到,所以我编写了一个简短的程序来实现这一点。

#include <iostream>
#include <string>
#include <termios.h>
#include <fcntl.h>
#include <unistd.h>

using namespace std;

int main(int argc, const char * argv[])
{
    if (argc < 2 || argc > 3)
    {
        cerr << "usage: " << argv[0] << " device [bauds]" << endl;
        return 1;
    }

    string device = argv[1];
    unsigned long bauds = 9600;
    if (argc == 3)
    {
        char* result;
        bauds = strtoul(argv[2], &result, 10);
        if (*result != '\0')
        {
            cerr << "usage: " << argv[0] << " device [bauds]" << endl;
            return 1;
        }
    }

    int fd = open(argv[1], O_RDWR | O_NDELAY | O_NOCTTY);
    if (fd == -1)
    {
        perror((string("can't open ") + argv[1]).c_str());
        exit(errno);
    }

    struct termios config;
    if (tcgetattr(fd, &config) < 0)
    {
        perror("can't get serial attributes");
        exit(errno);
    }

    if (cfsetispeed(&config, bauds) < 0 || cfsetospeed(&config, bauds) < 0)
    {
        perror("can't set baud rate");
        exit(errno);
    }

    config.c_iflag &= ~(IGNBRK | BRKINT | ICRNL | INLCR | PARMRK | INPCK | ISTRIP | IXON);
    config.c_oflag = 0;
    config.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG);
    config.c_cflag &= ~(CSIZE | PARENB);
    config.c_cflag |= CS8;
    config.c_cc[VMIN]  = 1;
    config.c_cc[VTIME] = 0;

    if (tcsetattr(fd, TCSAFLUSH, &config) < 0)
    {
        perror("can't set serial attributes");
        exit(errno);
    }

    char buffer[80];
    while (true)
    {
        size_t n = read(fd, buffer, sizeof buffer);
        write(STDOUT_FILENO, buffer, n);
    }

    close(fd);
    return 0;
}

答案3

我发现pySerial有一个漂亮的小工具叫做小术语效果很好。我的用法如下:

$ pip install pyserial
$ python -m serial.tools.miniterm /dev/cu.usbserial 9600
...

答案4

酷词是一个 Mac 终端应用程序,它应该能够连接到您的串行设备。

否则这是一个Mac GUI 终端应用程序列表. 以下是Mac 终端软件(命令行)列表

相关内容