当打开插入基于 ARM9 的嵌入式板的 USB 主机的基于 FDTI USB UART 的串行端口时,它会自发传输数据。它在打开时就正确执行此操作,甚至在设置比特率或对 fd 执行任何其他操作之前。
发送的数据总是或多或少相同:
^@^@^@^@^@
Run Code Online (Sandbox Code Playgroud)
用十六进制表示为:0x5e 0x40 0x5e 0x40 0x5e 0x40 0x5e 0x40 0x5e 0x40。重复次数从一对到最多 256 对不等。
我追溯了这个数据,它源自 tty 内核工作队列。因此,这不是由有错误的驱动程序和未正确初始化的传输队列或沿该线的任何内容引起的。显然,内核在打开系统调用时有意传输此数据。
仅在重新启动后或插入 FTDI USB UART 后首次打开 tty 端口时才会出现此问题。(重新启动会重新启动 USB 设备,因此这两者基本相同。)
是的,我确实意识到 ^@ 意味着“\0”。而且 NULL 还可以用来实现延迟。从手册中:
延迟位指定当某些字符发送到终端时,传输停止多长时间以允许机械或其他运动。在所有情况下,值 0 均表示没有延迟。如果设置了 OFILL,则应延迟传输填充字符,而不是定时延迟。这对于只需要最小延迟的高波特率终端很有用。如果设置了OFDEL,则填充字符为DEL;否则,NUL。
但是,我的 TTY 设置并不表明此类设置处于活动状态:
root@IVW78103 ~$ stty -F /dev/ttyUSB0 -a
speed 9600 baud;stty: /dev/ttyUSB0
line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; …Run Code Online (Sandbox Code Playgroud)