Parece que você pode estar um pouco confuso sobre como tudo isso funciona.
Primeiro, /dev/ttyACM0
não representa o link USB nem o terminal USB de qualquer adaptador serial conectado. Ele representa o UART dentro do adaptador que lida com as comunicações seriais. Os dados que você leu não incluirão nenhum cabeçalho ou quadro USB, assim como os dados que você leu em /dev/ttyS0
não incluirão nenhum cabeçalho ou quadro PCI Express. Definir a taxa de transmissão nestes afeta o hardware que representa, não o barramento ao qual está conectado, então isso não fará nada com a conexão USB.
Em segundo lugar, a taxa de transmissão é uma configuração de hardware, não de software. Quando você chama stty
para configurá-lo em uma porta serial, isso está dizendo ao kernel para dizer ao hardware para alterar qual baud rate ele está tentando receber dados. Isso significa, em particular, que quaisquer dados que foram recebidos antes dessa alteração serão falsos (porque não foram interpretados corretamente pelo hardware, às vezes, o caso se as taxas de transmissão estiverem próximas umas das outras ou harmônicos exatos) ou completamente perdidas (porque o hardware simplesmente não aceitou, o caso mais provável no hardware moderno).
Se você planeja ler dados de uma linha serial, você precisa ter a taxa de transmissão definida corretamente antes de qualquer dado ser transmitido pela outra extremidade. Isso também significa que a alteração da taxa de transmissão não altera como o kernel interpreta os dados. Se os dados já estiverem armazenados em buffer no kernel, então ele não irá mudar apenas porque você altera a taxa de transmissão (embora seja uma boa prática depois de alterar a taxa de transmissão para drenar os buffers do kernel para que você saiba que dados futuros são bons).
Portanto, para esclarecer, o método correto para obter dados de um adaptador USB para serial sem usar um software especial é:
- Defina a taxa de transmissão durante a inicialização do sistema. Para um adaptador USB para serial, essa provavelmente deve ser uma regra do udev para que seja configurada quando o dispositivo também for conectado.
- Use
cat
(ouod
se você precisar dos valores de bytes em vez de texto) para ler os dados. Isso retornará os dados exatos recebidos pelo adaptador USB para serial (assegurando que o adaptador não faça processamento especial).