データ転送に "cat" コマンドを使用すると、ttyACM* でデータが失われます。

データ転送に

開発ボードがあり、Ubuntuホストに接続すると、3つのACMインターフェイスがあり、ttyACM3を介してホストからデバイスにデータを転送したいと思います。

データ転送のために、次の手順に従いました。

前提:

  1. /etc/inittabLinuxコンソールを削除するように変更/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側で一部のデータ(〜300KB)がランダムに失われることがわかりました。また、データ転送に "dd"コマンドを使用しましたが、まだデータ損失があります。

しかし、「minicom」アプリケーションと「cat」コマンドを使用してホストから同じ「pattern.bin」ファイルを送信してDUT側で受信しようとしましたが、驚くべきことにデータ損失はまったく発生しませんでした。

問題のシナリオに USB Ellisys ログがあります。

  1. 「OUT」トランザクションの1つが失敗し(ハンドシェイクはNAKです)、失敗したトランスポートには「PING」トランザクションがありませんでした。

  2. 成功シナリオでは、「OUT」トランザクションが失敗する限り、「PING」トランザクションが発生し、データが再送信されます。

stty両方のホストのコマンドの違い

Ubuntu 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

Ubuntu 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でもデータ損失はありません。

ベストアンサー1

おすすめ記事