GNU/Linux >> Tutoriales Linux >  >> Linux

¿Hay alguna forma de comprobar qué velocidades de transmisión son compatibles con un dispositivo serie?

Pequeño guion bash:

De la respuesta de aserrín, está mi solución:

for bauds in $(
    sed -r 's/^#define\s+B([1-9][0-9]+)\s+.*/\1/p;d' < \
        /usr/include/asm-generic/termbits.h ) ;do
    echo $bauds
    stty -F /dev/ttyS0 $bauds && echo Ok.
done  2>&1 |
    pr -at2

Se renderizará en mi host:

50                              Ok.
75                              Ok.
110                             Ok.
134                             Ok.
150                             Ok.
200                             Ok.
300                             Ok.
600                             Ok.
1200                                    Ok.
1800                                    Ok.
2400                                    Ok.
4800                                    Ok.
9600                                    Ok.
19200                                   Ok.
38400                                   Ok.
57600                                   Ok.
115200                                  Ok.
230400                                  Ok.
460800                                  Ok.
500000                                  Ok.
576000                                  Ok.
921600                                  Ok.
1000000                                 Ok.
1152000                                 Ok.
1500000                                 Ok.
2000000                                 stty: /dev/ttyS0: unable to perform
2500000                                 stty: /dev/ttyS0: unable to perform
3000000                                 stty: /dev/ttyS0: unable to perform
3500000                                 stty: /dev/ttyS0: unable to perform
4000000                                 stty: /dev/ttyS0: unable to perform

Es decir, ¡pero esto no significa que funcionará!

Tienes que probarlos con tu cable y tu dispositivo...


Puede verificar la tasa de baudios del dispositivo usando el comando "stty" en la consola:

$ stty < /dev/tty..      (where tty... is the device file you are listening)  

salida:

speed 9600 baud; line = 0;
-brkint -imaxbel

También puede cambiar la velocidad en baudios con el siguiente comando:

$ sudo stty -F /dev/tty... 9600    (or whatever baud rate number)

Parece que estás haciendo dos preguntas diferentes.

¿Hay alguna forma de comprobar qué velocidades de transmisión son compatibles con un dispositivo serie?

La respuesta dependería de (1) las capacidades del hardware, es decir, el UART/USART/SCC, y el rango de divisores que el controlador del dispositivo puede usar en el generador de velocidad en baudios; consulte la hoja de datos del dispositivo; (2) la frecuencia del reloj/oscilador conectado al dispositivo de puerto serial; consulte la documentación de la placa.

¿Hay alguna forma de verificar qué velocidades de transmisión son compatibles con Linux?

Una de las velocidades de transmisión definidas en include/asm-generic/termbits.h para el c_cflag miembro de la estructura de control del terminal es el método típico que recibe el controlador del dispositivo del puerto serie (es decir, UART/USART) para el valor de configuración de la velocidad en baudios.

#define  B0     0000000         /* hang up */
#define  B50    0000001
#define  B75    0000002
#define  B110   0000003
#define  B134   0000004
#define  B150   0000005
#define  B200   0000006
#define  B300   0000007
#define  B600   0000010
#define  B1200  0000011
#define  B1800  0000012
#define  B2400  0000013
#define  B4800  0000014
#define  B9600  0000015
#define  B19200 0000016
#define  B38400 0000017

#define    BOTHER 0010000
#define    B57600 0010001
#define   B115200 0010002
#define   B230400 0010003
#define   B460800 0010004
#define   B500000 0010005
#define   B576000 0010006
#define   B921600 0010007
#define  B1000000 0010010
#define  B1152000 0010011
#define  B1500000 0010012
#define  B2000000 0010013
#define  B2500000 0010014
#define  B3000000 0010015
#define  B3500000 0010016
#define  B4000000 0010017

Los controladores de puerto serie generalmente no tienen ningún medio para informar/anunciar cuáles de estas velocidades en baudios son realmente compatibles/configurables/implementadas. Hay un valor de capacidades para atributos como FIFO y reposo, pero no para velocidades en baudios. Un controlador podría definir un ioctl() llamada para configurar velocidades de transmisión (no estándar), aunque eso haría que los programas que lo usan no sean portátiles.


Linux
  1. Cómo verificar qué módulos de Apache están habilitados/cargados en Linux

  2. ¿Cómo encontrar qué puerto serie está en uso?

  3. ¿Existen códigos de estado de salida estándar en Linux?

  4. Verifique que haya al menos dos argumentos dados en un script bash

  5. ¿Hay alguna forma de obtener time_t de 64 bits en programas de 32 bits en Linux?

¿Por qué hay tantos /dev/tty en Linux?

¿Hay alguna forma de bloquear LD_PRELOAD y LD_LIBRARY_PATH en Linux?

¿Cómo puedo verificar qué definiciones de terminal están disponibles?

¿Existen alternativas al uso de `udev`?

¿Hay algún sistema de archivos para el que `ln -d` tenga éxito?

¿Hay alguna otra razón por la que no quede espacio en el dispositivo?