C 读取设备数据流中缺少流控制数据(0x13)

C 读取设备数据流中缺少流控制数据(0x13),c,serial-port,communication,linux-device-driver,control-characters,C,Serial Port,Communication,Linux Device Driver,Control Characters,我编写了一个Linux应用程序,通过模拟串行端口的USB端口将二进制数据读写到远程设备 当我从设备读取数据时,我有一个USB嗅探器,它会显示这样的二进制数据流(0x01、0x0A……0x13),但当我的程序读取字节时,0x13不在字节流中-这是XOFF字符,但我没有使用XON/XOFF流控制(我想) 在二进制模式下尝试了开放读写,以及fopen fread和fwrite,结果相同。有什么想法吗?也许最好避免通过串口发送控制字符,而是稍微修改Linux和远程设备上的应用程序,将它们编码/解码成/从

我编写了一个Linux应用程序,通过模拟串行端口的USB端口将二进制数据读写到远程设备

当我从设备读取数据时,我有一个USB嗅探器,它会显示这样的二进制数据流(0x01、0x0A……0x13),但当我的程序读取字节时,0x13不在字节流中-这是XOFF字符,但我没有使用XON/XOFF流控制(我想)


在二进制模式下尝试了开放读写,以及fopen fread和fwrite,结果相同。有什么想法吗?

也许最好避免通过串口发送控制字符,而是稍微修改Linux和远程设备上的应用程序,将它们编码/解码成/从两个字节开始。例如:

0x00 0x00 -> 0x00
0x00 0x01 -> 0x13 (escape XOFF)
0x00 0x02 -> 0x11 (escape XON) 
考虑到这3个字节出现在二进制流中的可能性,我认为这不会降低总体吞吐量


顺便说一下,XON/XOFF是一个软件流控制和串行/终端驱动程序的基本功能。实际上,这个函数在您的情况下也很有用-为了避免缓冲区溢出和丢失一些有价值的字节,您可以暂停(XOFF)或恢复(XON)传输。

也许最好避免通过串行端口发送控制字符,而是稍微修改Linux和远程设备上的应用程序,将其编码/解码为两个字节。例如:

0x00 0x00 -> 0x00
0x00 0x01 -> 0x13 (escape XOFF)
0x00 0x02 -> 0x11 (escape XON) 
考虑到这3个字节出现在二进制流中的可能性,我认为这不会降低总体吞吐量


顺便说一下,XON/XOFF是一个软件流控制和串行/终端驱动程序的基本功能。实际上,此功能在您的情况下也很有用-为了避免缓冲区溢出和丢失一些有价值的字节,您可以暂停(XOFF)或恢复(XON)传输。

感谢您的回复,如网站。结果证明stty显示:

# stty -F /dev/ttyUSB0

speed 115200 baud;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 0; time = 10;
-brkint -imaxbel
-opost
-isig -icanon -echo -echoe

现在可以查看我的所有数据:)

感谢您的回复,比如网站。结果证明stty显示:

# stty -F /dev/ttyUSB0

speed 115200 baud;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 0; time = 10;
-brkint -imaxbel
-opost
-isig -icanon -echo -echoe

现在可以查看我的所有数据:)

是否是USB串行协议添加的校验和字节?是否是USB串行协议添加的校验和字节?