開発ボードがあり、Ubuntuホストに接続すると、3つのACMインターフェイスがあり、ttyACM3を介してホストからデバイスにデータを転送したいと思います。
データ転送のために、次の手順に従いました。
前提:
/etc/inittab
Linuxコンソールを削除するように変更/dev/ttyGS3
- 最小長が約20MBytesのバイナリファイルを生成します。
テストステップ:
- テスト側装置:
stty -F /dev/ttyGS3 raw -echo -echoe -echok -echoctl -echoke
- ホスト側:
stty -F /dev/ttyACM3 raw -echo -echoe -echok -echoctl -echoke
- テスト側装置:
cat /dev/ttyGS3 > /tmp/rx_pattern.bin
- ホスト側:
cat ./pattern.bin > /dev/ttyACM3
上記の手順を実行すると、DUT側で一部のデータ(〜300KB)がランダムに失われることがわかりました。また、データ転送に "dd"コマンドを使用しましたが、まだデータ損失があります。
しかし、「minicom」アプリケーションと「cat」コマンドを使用してホストから同じ「pattern.bin」ファイルを送信してDUT側で受信しようとしましたが、驚くべきことにデータ損失はまったく発生しませんでした。
問題のシナリオに USB Ellisys ログがあります。
「OUT」トランザクションの1つが失敗し(ハンドシェイクはNAKです)、失敗したトランスポートには「PING」トランザクションがありませんでした。
成功シナリオでは、「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でもデータ損失はありません。