Eu tenho uma placa de desenvolvimento que terá 3 interfaces ACM quando conectada ao host Ubuntu e eu quero transferir dados de um host para outro em ttyACM3.
Eu segui o seguinte procedimento para transferência de dados,
/etc/inittab
para remover o console do Linux em /dev/ttyGS3
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
Seguindo o procedimento acima, vejo alguns dados (~ 300 KB) serem perdidos aleatoriamente no lado do DUT. Eu também usei o comando "dd" para transferência de dados, mas ainda há uma perda de dados.
Mas eu tentei transferir o mesmo arquivo "pattern.bin" do Host usando o comando "minicom" e o comando "cat" para receber do lado do DUT, surpreendentemente não vejo nenhuma perda de dados.
Eu peguei logs do Ellisys durante o cenário do problema,
Uma das transações "OUT" está falhada (handshake é NAK) e não há transação "PING" para a transferência com falha.
Considerando que, no cenário de sucesso, sempre que a transação "OUT" falha, a transação "PING" está presente e os dados são enviados novamente.
stty
diferença de comando nos dois hosts.
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
Surpreendentemente, se eu mantiver a porta ACM3 aberta do aplicativo Minicom e tentar enviar dados, não haverá perda de dados mesmo no Ubuntu 14.4.
Tags usb tty serial-port cat stty