Perda de dados sobre ttyACM * quando o comando 'cat' é usado para transferência de dados

2

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,

Pré-requisito:

  1. Modifique /etc/inittab para remover o console do Linux em /dev/ttyGS3
  2. Crie um arquivo binário com um comprimento mínimo de cerca de 20 MBytes

Etapas do teste:

  1. Lado do DUT: stty -F /dev/ttyGS3 raw -echo -echoe -echok -echoctl -echoke
  2. Lado do HOST: stty -F /dev/ttyACM3 raw -echo -echoe -echok -echoctl -echoke
  3. Lado do DUT: cat /dev/ttyGS3 > /tmp/rx_pattern.bin
  4. Lado do HOST: 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,

  1. Uma das transações "OUT" está falhada (handshake é NAK) e não há transação "PING" para a transferência com falha.

  2. 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.

    
por Shivaprasad A Prabhu 16.07.2018 / 11:28

0 respostas