【问题标题】:How do I open a ttyMFD device on the Intel-Edison [C++]?如何在 Intel-Edison [C++] 上打开 ttyMFD 设备?
【发布时间】:2016-11-22 18:45:57
【问题描述】:

我有一个/dev/ttyUSB 设备和一个/dev/ttyMFD 设备,我需要将它们流式传输到日志文件。对于 USB 设备,我可以使用 termios 并通过它进行配置。这非常简单,并且也有一些文档。

不过,我似乎无法为 MFD 找到任何东西。有些地方称它为 MultiFuctionDevice,而另一些地方称它为 Medfield 高速 UART 设备。 首先哪个是正确的?

其次,我可以像打开普通 ttyUSB 设备一样打开它吗?

这是我用来打开 USB 设备的代码片段。

int fd = open(USBDEVICE0, O_RDWR);


struct termios io;
memset(&io, 0, sizeof(io));

io.c_iflag = 0;
io.c_oflag = 0;
io.c_cflag = CS8|CREAD|CLOCAL;           // 8n1, see termios.h for more information
io.c_lflag = 0;

// TODO -- Since we are operating in non-blocking mode; confirm VMIN and VTIME settings have no effect on duration of the read() call.

io.c_cc[VMIN] = 1;
io.c_cc[VTIME] = 5;

speed_t speedSymbol = B921600;

cfsetospeed(&io, speedSymbol);
cfsetispeed(&io, speedSymbol);


int retVal;
retVal = tcsetattr(fd, TCSANOW, &io);

tcflush(fd, TCIOFLUSH);
usleep(100);

编辑

对于遇到这种情况的任何人,有一个警告。您必须以原始模式打开设备并将所有内容转储到日志文件中。解析必须在后完成。一切都会以原始数据的形式出现,但是如果您尝试进行任何类型的配置,设备缓冲区将无法捕获所有数据,保存并在更多数据出现之前及时处理它。

【问题讨论】:

    标签: c++ posix tty termios intel-edison


    【解决方案1】:
    Linux 内核中的

    MFDMulti-Functional Device 的常见缩写,Edison 的旧版串行驱动程序滥用它并使用它自己的解释,正如您提到的:Medfield 。在上游内核中,缩写 MID 用于表示 Mobile Internet Device。特别是串行驱动程序称为 drivers/tty/serial/8250_mid.c。见https://en.wikipedia.org/wiki/Mobile_Internet_device

    是的,您可以执行与在 /dev/ttyUSBx 之上所做的相同的操作。

    【讨论】:

    • 对于遇到此问题的任何人,有一个警告。您必须以原始模式打开设备并将所有内容转储到日志文件中。解析必须在发布后完成。
    • @Tropical_Peach,不太明白第二部分。为什么需要日志文件?当您将 UART 用于其他用途而不是通常的 tty 时,建议使用原始模式。
    • 我的实例中需要一个日志文件,因为我需要记录来自此 MFD 的所有数据,正确获取所有数据的唯一方法是将数据记录到日志中文件。
    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多