socat - Monitorando a porta USB para o adaptador serial padrão CP2102

1

Eu tenho tentado obter um dump HEX do que está sendo enviado / recebido para o chip conversor serial CP2102. Eu posso encontrar exemplos de pessoas monitorando as portas seriais de hardware / dev / TTYS0 e similares.

socat -d -d pty,link=/dev/ttyUSB0,raw,echo=0 pty,link=/dev/ttyUSB1,raw,echo=0

Alguém sabe de um recurso que poderia me dizer como monitorar uma porta USB como essa? Até agora nada têm funcionado. Talvez eu apenas não entenda o lado de reencaminhamento do monitoramento serial ou algo assim?

    
por regor2 07.10.2017 / 00:23

1 resposta

0

Se possível, o mais fácil pode ser ajustar o software para emitir hexadecimal. A maioria dos softwares provavelmente já possui sdio.h (ou equivalente) e hexadecimal dos dados simplesmente requerem printf chamadas (ou equivalentes) nos dados indo e vindo do descritor de arquivo serial. Nenhuma complicação de um processo extra transportando os dados para lá e para cá e com pouca latência extra.

Se você estiver com pressa, algo como strace (ou sysdig SystemTap etc) poderá ser usado para registrar a comunicação, embora strace diminua bastante o processo, e a saída exija pós-processamento; os outros dois são módulos do kernel, então podem não ser adequados.

strace -xx -y -e trace=read,write -p $pid_of_your_program_here

No nível de hardware, um Bus Pirate ou similar pode ser outra maneira de explorar a comunicação.

Enquanto isso, socat(1) parece ter uma conveniente opção -x para hex:

   -x     Writes  the  transferred  data not only to their target streams,
          but also to stderr. The output format is  hexadecimal,  prefixed
          with  ">  "  or "< " indicating flow directions. Can be combined
          with -v .

que depois de algumas experiências eu pude ouvir um Arduino aleatório via:

socat -x PTY,link=/dev/blah,raw,wait-slave /dev/serial/by-id/usb-Arduino...

e, em seguida, seu software pode abrir /dev/blah (ou talvez executá-lo via EXEC ?). Observe que nenhuma opção raw foi especificada após o caminho /dev/serial/by-id/usb-Arduino... , pois com esse conjunto houve erros de tcgetattr(6, ...): Inappropriate ioctl for device quando socat tentou configurá-lo. A saída socat provavelmente também exigirá pós-processamento, já que se parece com algo assim:

--
2017/10/09 16:32:20 socat[30806] I transferred 1 bytes from 6 to 5
< 2017/10/09 16:32:20.475916  length=31 from=2042 to=2072
 52 65 71 75 65 73 74 69 6e 67 20 74 65 6d 70 65  Requesting tempe
 72 61 74 75 72 65 73 2e 2e 2e 44 4f 4e 45 0a     ratures...DONE.
--
    
por 09.10.2017 / 18:46