C++ 如何在英特尔爱迪生[C+;+;]上打开ttyMFD设备?

C++ 如何在英特尔爱迪生[C+;+;]上打开ttyMFD设备?,c++,posix,tty,termios,intel-edison,C++,Posix,Tty,Termios,Intel Edison,我有一个/dev/ttyUSB设备和一个/dev/ttyMFD设备,需要流式传输到日志文件。对于USB设备,我可以使用termios并通过它进行配置。这是非常直截了当的,也有一些文档 我似乎找不到任何MFD的。一些地方称之为多功能设备,其他地方称之为Medfield高速UART设备。 首先哪个是正确的 第二,我可以像打开普通的ttyUSB设备一样打开它吗 这是我用来打开USB设备的snippit int fd = open(USBDEVICE0, O_RDWR); struct termio

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

我似乎找不到任何MFD的。一些地方称之为多功能设备,其他地方称之为Medfield高速UART设备。 首先哪个是正确的

第二,我可以像打开普通的ttyUSB设备一样打开它吗

这是我用来打开USB设备的snippit

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);
编辑


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

Linux内核中的MFD是多功能设备的常见缩写,它是爱迪生的传统串行驱动程序,并使用您提到的自己的解释:Medfield。在上游内核中,缩写MID用于移动互联网设备。特别是串行驱动程序被称为drivers/tty/serial/8250\u mid.c。看


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

对于任何遇到此问题的人,有一个警告。您必须以原始模式打开设备,并将所有内容转储到日志文件中。解析必须在post中完成。@uPeach,不要完全理解第二部分。为什么需要日志文件?当您将UART用于其他tty时,建议使用原始模式。我的实例中需要一个日志文件,因为我需要记录此MFD中的所有数据,正确获取所有数据的唯一方法是将数据记录到日志文件中。