Diferença na configuração adequada para o Windows UART VS Linux UART

3

Questão essencial : Como a conexão UART no * nix difere da conexão UART no Windows? Quais configurações precisam ser consideradas para a transmissão e recepção de dados adequadas?

Contexto para fazer esta pergunta: Esta questão está relacionada com a minha outra no site Engenharia Elétrica . Basicamente, tenho uma conexão serial (USB para RS-232) com meu laptop Ubuntu para o microcontrolador, e recebo os últimos 4 bits corretamente, mas não os primeiros 4. No Windows, recebo todos os 8 bits. Qual poderia ser o possível problema? Mais importante, estou interessado em a diferença do Windows UART vs Linux UART

Específicos :

O main no microcontrolador que estou usando (PIC 18F87J11) tem código muito simples:

  while (1) {
        while (!PIR1bits.RC1IF);  //Wait for a byte
        sprintf(txStr,"%.5X",RCREG);
        LCDWriteLine(txStr,0);

O ponto aqui é que ele recebe um byte e imprime seu valor hexadecimal na tela LCD. Em teoria, isso deve funcionar sem problemas. A taxa de transmissão é de 9600, sem paridade, nada fora do comum. No Windows eu uso putty, no Linux - screen. Mesmas configurações em ambos.

Ainda, no Windows eu recebo o valor hexadecimal de 0x61 para a character, enquanto no Linux eu recebo 0xE1 . Os últimos 4 bits são recebidos corretamente, os primeiros 4 não estão corretos. Alguém apontou que o Linux pode estar configurando o 7º bit, o que parece dar uma olhada -

$ echo "ibase=16;obase=2;E" | bc  
1110


$ echo "ibase=16;obase=2;6" | bc                                               
110

Saída de stty :

$ stty -F /dev/ttyUSB0 -a                                                      
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^H; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 100; time = 2;
-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

Voltando ao âmago da minha pergunta: qual é a diferença entre a conexão UART do Windows e Linux UART? Em teoria, isso deve funcionar da mesma forma, mas não é! Quais são as configurações que devem ser alteradas para que funcione?

Abordando a questão da questão : Como afirmei nos comentários e no / dev / chat , a pergunta faz uma pergunta específica e fica bem dentro dos limites:

  • "Usando ou administrando um desktop ou servidor * nix"
  • "API C do UNIX e Interfaces do sistema "
  • Desde que eu testei isso também no Raspberry Pi, ele se relaciona com o tópico "O SO * subjacente do nix em um sistema embarcado".

Atualizar

Usar python -c 'print("a")' > /dev/ttyUSB0 funciona - a placa recebe bytes que correspondem aos caracteres, mas alterna entre maiúsculas e minúsculas, independentemente do que estou enviando. Por exemplo, imprimir a receberá 0x61, mas c obterá 0x43 (valores C maiúsculos em valores ascii). Ele também ignora a impressão de entrada a ou A invoca 0x61 sempre

    
por Sergiy Kolodyazhnyy 20.04.2016 / 23:01

0 respostas