使用“cat”命令进行数据传输时,ttyACM* 上的数据丢失

使用“cat”命令进行数据传输时,ttyACM* 上的数据丢失

我有一个开发板,当连接到 Ubuntu 主机时,它将有 3 个 ACM 接口,我想通过 ttyACM3 将数据从主机传输到设备。

我按照以下程序进行数据传输,

前提:

  1. 修改/etc/inittab以删除 Linux 控制台/dev/ttyGS3
  2. 创建最小长度约为 20MBytes 的二进制文件

测试步骤:

  1. 被测器件侧:stty -F /dev/ttyGS3 raw -echo -echoe -echok -echoctl -echoke
  2. 主机端:stty -F /dev/ttyACM3 raw -echo -echoe -echok -echoctl -echoke
  3. 被测器件侧:cat /dev/ttyGS3 > /tmp/rx_pattern.bin
  4. 主机端:cat ./pattern.bin > /dev/ttyACM3

通过执行上述过程,我发现 DUT 端随机丢失了一些数据(~300 KB)。我也使用“dd”命令进行数据传输,但仍然存在数据丢失。

但我尝试使用“minicom”应用程序和“cat”命令从主机传输相同的“pattern.bin”文件以从 DUT 端接收,令人惊讶的是我没有看到任何数据丢失。

我在问题场景中记录了 USB Ellisys 日志,

  1. 其中一笔“OUT”交易失败(握手为NAK),并且失败的传输没有“PING”交易。

  2. 而在成功场景中,只要“OUT”事务失败,就会出现“PING”事务并再次发送数据。

stty两台主机上的命令差异。

乌班图14.04:

speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^A; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke

乌班图16.04:

speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke -flusho -extproc

令人惊讶的是,如果我从 Minicom 应用程序保持打开 ACM3 端口并尝试发送数据,即使在 Ubuntu 14.4 中也不会丢失数据。

相关内容