Articles of 串口

监视(嗅探)/ dev / ttyUSB0由FTDI USB串行转换器创build

我想监视(嗅探)由FTDI USB串行转换器创build的/ dev / ttyUSB0的stream量。 我已经在Windows中编写了自己的应用程序,现在我尝试将它移植到linux并使用/ dev / tty / USB0。 我想debugging实际发生的通信。 软件strace不是我的select,因为它只显示ioctl的系统调用。 使用Windows软件“Free Serial Port Monitor”通过嗅探COM1来完成。 dmesg的输出: [16975.000221] usb 7-1: new full-speed USB device number 5 using uhci_hcd [16975.193543] usb 7-1: New USB device found, idVendor=0403, idProduct=6001 [16975.193548] usb 7-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [16975.193552] usb 7-1: Product: FT232R USB UART […]

正确的初始化序列为Linux串行端口

我写了一个必须在Linux上使用串口的应用程序,尤其是ttyUSB。 读和写操作是用标准的select()/ read()循环和write()来完成的,它们可能没有错,但是初始化代码(或者某些部分的缺失)会损害tty子系统中的某些东西。 这里是: vuxboot(string filename, unsigned baud = B115200) : _debug(false) { _fd = open(filename.c_str(), O_RDWR | O_NOCTTY); if(_fd < 0) throw new io_error("cannot open port"); // Serial initialization was written with FTDI USB-to-serial converters // in mind. Anyway, who wants to use non-8n1 protocol? tcgetattr(_fd, &_termios); termios tio = {0}; tio.c_iflag = IGNPAR; […]

用C写串口读写

我正在写一个C程序,将读取和写入一个串行端口。 每次写入之后都将进行一次读取,其中将包含基于写入的数据。 我将有大约16个不同的写入来执行,每个写入之后都是读取。 我还是新来的串行编程,并试图确定如何处理这个。 程序是否应该在每次写入/读取期间阻塞(基本上有很长的一(1)次写入和读取循环)? 有可能有一个线程发送写入,而另一个线程执行读取? 是否可以创build一个callback函数让线程知道数据何时可以从串口读取? 谢谢您的帮助。 编辑: 操作系统:Linux

串行设备:读取8N1的作品,但写一个字节失败

在我的程序中,我从串口设备(Linux,8N1)读取没有任何问题。 但在这种情况下,我想写出一个字节,我没有得到任何的界面。 我假设我的串行输出设置是错误的。 但是,如何设置c_oflag的方法并不多 我的代码: #define TTYDEVICE "/dev/ttyS0" #define BAUDRATE B9600 int openSerialDevice(const char* devTTY, struct termios oldTio) { //—-< Open serial device >———————————- int fileDescriptor; // fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); fileDescriptor = open(devTTY, O_RDWR | O_NOCTTY); //fileDescriptor = open(devTTY, O_RDWR | O_NOCTTY /*| OPOST*/); if (fileDescriptor == -1) { perror("Error […]

lockingLinux串行端口

我有一个问题,我正试图解决在Linux中的串行端口。 我可以打开,阅读和closures端口。 但是,我想确保在任何时候我是唯一一个从港口读写的人。 我认为这已经为我做了open()函数调用后。 不过,我可以在程序的同一个端口上多次调用open()。 我也可以有两个线程同时从同一个端口读取。 我试着用flock()修复这个问题,我仍然有同样的问题。 是否因为两个系统调用来自同一个pid,即使每一组打开和读取都有不同的文件描述符? 为了logging,两个open()调用都返回一个有效的文件描述符。 因此,我想知道是否有什么办法可以解决问题。 从我的程序的angular度来看,如果两个调用open()在同一个端口上是成功的,那么程序员应该知道它们引起的闹剧是没有什么大不了的。 不过,我只想确保当我打开一个端口时,我是唯一访问它的进程。 谢谢您的帮助。

无限循环从串口接收

从这里我复制了串口configuration的例子: tcgetattr (serialfd, &tty); cfsetospeed(&tty,B115200); cfsetispeed(&tty,B115200); tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; tty.c_iflag &= ~IGNBRK; tty.c_lflag = 0; tty.c_oflag = 0; tty.c_cc[VMIN] = 0; tty.c_cc[VTIME] = 5; tty.c_iflag &= ~(IXON | IXOFF | IXANY); tty.c_cflag |= (CLOCAL | CREAD); tty.c_cflag &= ~(PARENB | PARODD); tty.c_cflag |= 0; tty.c_cflag &= ~CSTOPB; tty.c_cflag &= ~CRTSCTS; 我的实际代码是这样的: […]

读取串口块不明原因

我正试图在Linux下使用termios框架来通过UART(usbserial)接口非接触式智能卡读卡器。 这个代码可以在PC上正常工作,但是当我在ARM9目标上交叉编译并试用时,它能够打开设备甚至将命令写入设备,但是读取命令无限期地被阻塞。 这里是代码片段: int mifare_rdr_init(struct mifare_1K * ptr, char *rdr_devnode) { bzero(ptr, sizeof(struct mifare_1K)); // zero the entire structure // open serial device int fd = open(rdr_devnode, O_RDWR|O_NOCTTY ); if (fd == -1) { perror("Failed to open serial device "); return 1; } ptr->serialfd = fd; // save file descriptor ptr->serialdev.c_iflag = 0; // no […]

在读取linux之前,获取串口上等待的字节数

我将一个Win32串口类转换成Linux(Ubuntu)这个串口类所要求的function之一就是在串口缓冲区中“偷看”,看看在串口读取串口前有多less字节在串口上等待。 在这种修脚的情况下,我只需要知道端口上是否有任何字节,然后再尝试读取它。 在Windows中,我使用COMSTATS,但我似乎无法在Linux中find类似的function。 我的问题是: 在Linux上如何读取在串口上等待的字节数量而不将它们从串口缓冲区中删除?

从串口读取原始字节

我试图从一个IEC 870-5-101 win32协议模拟器发送的串行端口读取原始字节,使用在Linux 32bit上运行的C编写的程序。 对于像0x00 – 0x7F这样的字节值,它工作正常。 但是对于从0x80到0xAF的值,高位是错误的,例如: 0x7F -> 0x7F //correct 0x18 -> 0x18 //correct 0x79 -> 0x79 //correct 0x80 -> 0x00 //wrong 0xAF -> 0x2F //wrong 0xFF -> 0x7F //wrong 现在挖了两天后,我不知道是什么原因造成的。 这是我的串口configuration: cfsetispeed(&config, B9600); cfsetospeed(&config, B9600); config.c_cflag |= (CLOCAL | CREAD); config.c_cflag &= ~CSIZE; /* Mask the character size bits */ config.c_cflag |= […]

Linux下的串口编程

我想用电路板上的RS232端口与PC通信。 我知道我可以使用“dev / ttyS0”来达到这个目的。 我可以使用write()函数打开和写入数据到PC。 但问题是我无法从“dev / ttyS0”读取。 每次我使用阅读function,我得到“资源暂时不可用”。 你能告诉我如何解决这个问题吗? 这是我的代码: #include <stdio.h> #include <string.h> #include <fcntl.h> #include <termios.h> #include <unistd.h> int main() { int n = 0, fd = 0, bytes = 0; char ch = 0; char buffer[10], *bufPtr; int nBytes = 0, tries = 0, x = 0; struct termios term; fd […]