Cómo cerrar un puerto serie (16550 UART)

1

Tenga un puerto serie UART 16550 en una computadora basada en CPU integrada. No se utiliza en este entorno de campo, sin embargo, es posible que alguien intente conectarse a él y enviar datos.

Debe asegurarse de que los datos que se le envíen no tengan ningún impacto.

¿Es ningún controlador suficiente y / o necesario para "cerrar" un puerto?

¿La configuración predeterminada en el mismo chip UART 16550 aún recopilará datos, si recibe algo en la línea?

... ¿o hay una forma más adecuada de hacer esto? Por ejemplo, algunos ajustes en la propia UART ... o en el programa que se ejecuta en el resto de la pizarra?

Gracias.

    
pregunta Greg McNulty

2 respuestas

5

Un UART 16550 externo, como este , realiza una conversión de los datos en serie de UART hacia y desde puertos paralelos que pueden ser leídos por un microprocesador / microcontrolador. Se dirige como cualquier puerto de E / S paralelo externo y tiene registros de control para configurar varios modos, otro para velocidad de transmisión, otro para estado, uno como un búfer de recepción (Rx) y otro para un búfer de transmisión (Tx). (Los buffers de Rx y Tx pueden estar vinculados a través de FIFO, pero eso no es importante para esta pregunta. También hay otros tipos de UART a los que se accede a través de los buses I2C o SPI; eso tampoco tiene relación con la pregunta).

Para que los caracteres recibidos tengan algún efecto en el microprocesador, se debe estar ejecutando un controlador que responde al UART. Además, debe haber un nivel más alto de firmware que se comunique con el controlador.

Si está ejecutando "bare metal", sin un sistema operativo, entonces sin el código que se escribe explícitamente en los registros en el UART para habilitarlo para recibir datos, no ocurrirá nada. Incluso si la funcionalidad UART y el receptor están habilitados, no ocurrirá nada, excepto que los caracteres se mostrarán en el búfer Rx y, según la configuración del programa, el controlador puede o no recibir caracteres en una rutina de interrupción. , donde normalmente se colocarán en un búfer FIFO de software interno. Si no hay firmware para recuperar estos caracteres, el búfer solo se ajustará y se sobrescribirá.

Si está ejecutando un sistema operativo, es probable que tenga que abrir el puerto UART para habilitar cualquier recepción de datos. Los puertos casi nunca se abren sin llamadas explícitas al sistema operativo para hacerlo. Incluso si se hizo esto, si no hay un firmware para manejar los caracteres entrantes, simplemente se tirarán como el desbordamiento FIFO. No ocurrirá nada malo, excepto que si los caracteres llegan a una velocidad muy rápida, entonces se llamará al manejador de interrupciones UART en cada carácter y esto tendrá algún efecto en la carga del procesador. Por lo tanto, es mejor no tener el puerto UART abierto.

El único problema posible sería si el firmware habilitara el UART y luego habilitara las interrupciones de recepción, y no se proporcionó un controlador de interrupciones. Luego, cuando se recibió un personaje, el programa se iría a la tierra de nunca jamás. Pero esto no sucederá por sí mismo, requeriría que el firmware configure explícitamente las cosas para que falle de esta manera. Obviamente, sería un error grave habilitar el UART y su capacidad de interrupción y luego no proporcionar un controlador.

    
respondido por el tcrosley
1

Tienes algunas opciones:

  1. Deja el puerto como está. En los microcontroladores, debe habilitar el módulo UART antes de poder leer o enviar datos a través de él.

  2. Conecte a tierra el pin RX del módulo. Si llega algún dato, no entrará en el módulo. Esto debería ser suficiente si está seguro de que nadie se molestaría en modificar el PCB para cortarlo del suelo.

  3. Si aún no está satisfecho, en el código, habilite el módulo. Lee los datos, y no hagas nada con ellos. Solo sigue limpiando el búfer RX cada vez que lleguen los datos.

Sería bueno si pudiera decirnos exactamente qué está haciendo y qué hardware está usando allí.

    
respondido por el U. Muneeb

Lea otras preguntas en las etiquetas