¿Qué es el puerto de comunicaciones de Nuvoton? Puerto COM (puerto serie). Optimización del puerto serie

Descripción de la interfaz RS-232, formato de los conectores utilizados y finalidad de los pines, designaciones de señales, protocolo de intercambio de datos.

Descripción general

La interfaz RS-232, oficialmente llamada "EIA/TIA-232-E", pero más conocida como interfaz "puerto COM", era anteriormente una de las interfaces más comunes en tecnología informática. Todavía se encuentra en computadoras de escritorio, a pesar de la aparición de interfaces más rápidas e inteligentes como USB y FireWare. Sus ventajas desde el punto de vista de los radioaficionados incluyen la baja velocidad mínima y la facilidad de implementación del protocolo en un dispositivo casero.

La interfaz física se implementa mediante uno de dos tipos de conectores: DB-9M o DB-25M, este último prácticamente no se encuentra en las computadoras producidas actualmente.

Asignación de pines del conector de 9 pines


Conector DB-9M de 9 pines
Numeración de contactos en el lado del pin
La dirección de las señales se indica en relación con el host (computadora)
Contacto Señal Dirección Descripción
1 CD Entrada Transportista detectado
2 RXD Entrada Datos recibidos
3 TXD Salida Datos transmitidos
4 DTR Salida Anfitrión listo
5 Tierra - cable común
6 DSR Entrada El dispositivo está listo
7 estrategia en tiempo real Salida El anfitrión está listo para transmitir.
8 cts Entrada El dispositivo está listo para recibir
9 RHODE ISLAND. Entrada Llamada detectada

Asignación de pines del conector de 25 pines

Contacto Señal Dirección Descripción
1 BLINDAJE. - Pantalla
2 TXD Salida Datos transmitidos
3 RXD Entrada Datos recibidos
4 estrategia en tiempo real Salida El anfitrión está listo para transmitir.
5 cts Entrada El dispositivo está listo para recibir
6 DSR Entrada El dispositivo está listo
7 Tierra - cable común
8 CD Entrada Transportista detectado
9 - - Reservar
10 - - Reservar
11 - - No usado
12 SCD Entrada Portador #2 detectado
13 SCTS Entrada El dispositivo está listo para recibir el número 2
Contacto Señal Dirección Descripción
14 STXD Salida Datos transmitidos #2
15 CVR Entrada Sincronización del transmisor
16 SRXD Entrada Datos recibidos #2
17 RCC Entrada Sincronización del receptor
18 LLOOP Salida Bucle local
19 SRTS Salida Anfitrión listo para transmitir #2
20 DTR Salida Anfitrión listo
21 RLOOP Salida Bucle externo
22 RHODE ISLAND. Entrada Llamada detectada
23 DRD Entrada Velocidad de datos determinada
24 TRCO Salida Sincronización del transmisor externo
25 PRUEBA Entrada Modo de prueba

Se puede ver en las tablas que la interfaz de 25 pines se distingue por la presencia de un segundo canal de transmisión y recepción completo (señales denominadas "#2"), así como numerosas señales de control y control adicionales. Sin embargo, a menudo, a pesar de la presencia de un conector "ancho" en la computadora, señales adicionales simplemente no están conectados a él.

Características eléctricas

Niveles lógicos del transmisor:"0" - de +5 a +15 voltios, "1" - de -5 a -15 voltios.

Niveles lógicos del receptor:"0" - por encima de +3 voltios, "1" - por debajo de -3 voltios.

impedancia de entrada receptor al menos 3 kOhm.

Estas características están definidas por la norma como mínimas, garantizando la compatibilidad de los dispositivos, sin embargo caracteristicas reales normalmente mucho mejor, lo que permite, por un lado, alimentar dispositivos de baja potencia desde el puerto (por ejemplo, numerosos cables de datos caseros para teléfonos celulares), y por otro lado, alimentarlo a la entrada del puerto invertido Nivel TTL en lugar de señal bipolar.

Descripción de las principales señales de la interfaz.

CD- El dispositivo configura esta señal cuando detecta una portadora en la señal recibida. Normalmente, esta señal es utilizada por los módems, que informan al host que han detectado un módem en funcionamiento en el otro extremo de la línea.

RXD- Línea para que el host reciba datos del dispositivo. Descrito en detalle en la sección "Protocolo de intercambio de datos".

TXD- Línea de datos desde el host al dispositivo. Descrito en detalle en la sección "Protocolo de intercambio de datos".

DTR- El host establece esta señal cuando está listo para intercambiar datos. De hecho, la señal se establece cuando el programa de comunicaciones abre el puerto y permanece en este estado mientras el puerto esté abierto.

DSR- El dispositivo establece esta señal cuando está encendido y listo para comunicarse con el host. Esta y las señales anteriores (DTR) deben configurarse para el intercambio de datos.

estrategia en tiempo real- El host configura esta señal antes de comenzar a transmitir datos al dispositivo y también indica que está listo para recibir datos del dispositivo. Se utiliza para el control de hardware del intercambio de datos.

cts- El dispositivo configura esta señal en respuesta a que el host configure la anterior (RTS) cuando está listo para recibir datos (por ejemplo, cuando los datos anteriores enviados por el host son transferidos por el módem a la línea o hay espacio libre en el buffer intermedio).

RHODE ISLAND.- El dispositivo (normalmente un módem) establece este tono cuando recibe una llamada de un sistema remoto, por ejemplo al recibir una llamada telefónica si el módem está configurado para recibir llamadas.

Protocolo de comunicación

En el protocolo RS-232 existen dos métodos para controlar el intercambio de datos: hardware y software, así como dos modos de transmisión: síncrono y asíncrono. El protocolo le permite utilizar cualquiera de los métodos de control junto con cualquier modo de transmisión. También es posible operar sin control de flujo, lo que significa que el host y el dispositivo siempre están listos para recibir datos cuando se establece la comunicación (se establecen las señales DTR y DSR).

Método de control de hardware implementado utilizando señales RTS y CTS. Para transmitir datos, el host (computadora) configura la señal RTS y espera a que el dispositivo configure la señal CTS, y luego comienza a transmitir datos siempre que la señal CTS esté configurada. El host verifica la señal CTS inmediatamente antes de que comience a transmitirse el siguiente byte, por lo que un byte que ya ha comenzado a transmitirse se transmitirá en su totalidad, independientemente del valor CTS. En el modo de intercambio de datos semidúplex (el dispositivo y el host transmiten datos a su vez, en el modo full-duplex pueden hacerlo simultáneamente), la eliminación de la señal RTS por parte del host significa que cambia al modo de recepción.

Método de control de software consiste en la transferencia por parte del receptor personajes especiales detener (código de carácter 0x13, llamado XOFF) y reanudar (código de carácter 0x11, llamado XON) la transmisión. Cuando se reciben estos caracteres, la parte emisora ​​debe detener la transmisión o reanudarla en consecuencia (si hay datos esperando ser transmitidos). Este método es más simple en términos de implementación de hardware, pero proporciona una respuesta más lenta y, en consecuencia, requiere una notificación previa al transmisor cuando el espacio libre en el búfer de recepción se reduce a un cierto límite.

Modo de transmisión síncrona Implica un intercambio continuo de datos cuando los bits se suceden uno tras otro sin pausas adicionales a una velocidad determinada. Este modo es el puerto COM. no soportado.

Modo de transferencia asíncrona es que cada byte de datos (y bit de paridad, si está presente) está "envuelto" con una secuencia de sincronización de un bit de inicio cero y uno o más bits de parada. El diagrama de flujo de datos en modo asíncrono se muestra en la figura.

uno de posibles algoritmos operación del receptor próximo:

  1. Espere el nivel de señal de recepción "0" (RXD en el caso de un host, TXD en el caso de un dispositivo).
  2. Cuente la mitad de la duración del bit y compruebe que el nivel de la señal sigue siendo "0"
  3. Cuente la duración total del bit y escriba el nivel de señal actual en el bit de datos menos significativo (bit 0)
  4. Repita el paso anterior para todos los bits de datos restantes.
  5. Cuente la duración total del bit y el nivel de señal actual, úselo para verificar la recepción correcta usando la verificación de paridad (ver más abajo)
  6. Cuente la duración total del bit y asegúrese de que el nivel de señal actual sea "1".

Así que tenemos que puerto COM. Pero con él no todo es tan sencillo como con LPT, y su uso completo requerirá significativamente gran esfuerzo. El principal problema es también su principal ventaja: la transferencia de datos en serie. Si en LPT se transmite un byte de datos en 8 líneas, un bit por línea, y el estado de cada línea se puede ver fácilmente, entonces en puerto COM un byte de datos se transmite bit a bit a lo largo de una línea (en relación con tierra, por supuesto) y no será posible ver lo que se transmite allí usando solo los LED. Para esto necesitas dispositivo especial- convertidor de flujo de datos en serie a paralelo, llamado. USART (Transmisor receptor universal síncrono/asíncrono). Por ejemplo, está incluido en la placa base de una computadora equipada con un puerto COM o en cualquier microcontrolador más serio.


Espero que todavía estés desanimado por dominar el puerto COM. No todo es pesimismo. Algunos resultados se pueden obtener sin USART. Formulemos un problema que implementaremos en etapa inicial trabajando con puerto COM:


"Me gustaría conectar un LED a la computadora a través del puerto COM. Ejecuto el programa. Realizo alguna acción en este programa, el LED se enciende, hago otra cosa: el LED se apaga".


La tarea es bastante específica (teniendo en cuenta el hecho de que no se utiliza USART) y es una tarea puramente de “hágalo usted mismo”, pero es bastante factible y viable. Empecemos a implementarlo.


1.Puerto COM

lo tomamos de nuevo unidad del sistema de su PC y mire hacia atrás. Notamos que hay un conector de 9 pines: este es el puerto COM. En realidad puede haber varios (hasta 4). Mi PC tiene dos puertos COM (ver foto).


2. Extensión del puerto COM


3. Hardware

También tendremos que retocar el hardware, en el sentido de que será más complicado que con el primer dispositivo para Puerto LPT. El hecho es que el protocolo RS-232, a través del cual se intercambian datos en el puerto COM, tiene una relación lógica entre estado y voltaje ligeramente diferente. Si normalmente esto es lógico 0 0 V, lógico 1 +5 V, entonces en RS-232 esta relación es la siguiente: lógico 0 +12 V, lógico 1 -12 V.

Y, por ejemplo, después de recibir -12 V, no queda claro de inmediato qué hacer con este voltaje. Normalmente, los niveles RS-232 se convierten a TTL (0,5 V). La opción más sencilla son los diodos Zener. Pero propongo hacer este convertidor en un chip especial. Se llama MAX232.

Ahora veamos qué señales del puerto COM podemos ver en los LED. De hecho, en el puerto COM hay hasta 6 líneas independientes, que son de interés para el desarrollador de dispositivos de interfaz. Dos de ellos aún no están disponibles para nosotros: las líneas de datos en serie. Pero los 4 restantes están destinados a controlar e indicar el proceso de transferencia de datos y podemos “transferirlos” según nuestras necesidades. Dos de ellos están diseñados para el control desde el lateral. dispositivo externo y no las tocaremos por ahora, pero usaremos las dos últimas líneas restantes ahora. Se llaman:

  • estrategia en tiempo real- Solicitud de transferencia. Una línea de interacción que indica que la computadora está lista para recibir datos.
  • DTR- La computadora está lista. Una línea de interacción que indica que la computadora está encendida y lista para comunicarse.

Ahora transferimos un poco su propósito y los LED conectados a ellos se apagarán o se encenderán, dependiendo de las acciones de nuestro propio programa.

Entonces, armemos un diagrama que nos permitirá llevar a cabo las acciones previstas.

Y aquí está su implementación práctica. Creo que me perdonarán que lo hice en una versión de placa tan tonta, porque no quiero hacer una placa para un circuito tan “altamente productivo”.


4. Parte del software

Aquí todo es más sencillo. vamos a crear aplicación de Windows en Microsoft Visual C++ 6.0 basado en MFC para gestionar dos líneas de comunicación de un puerto COM. Para esto creamos nuevo proyecto MFC y asígnale un nombre, por ejemplo, PruebaCOM. A continuación, seleccione la opción de construir basado en el diálogo.

Dar apariencia ventana de diálogo de nuestro programa, como en la Fig. a continuación, es decir, agregue cuatro botones, dos para cada una de las líneas. Uno de ellos es respectivamente necesario para “extinguir” la línea y el otro para “ponerla” en uno.

Clase CTestCOMDlg: CDialog público ( // Construcción pública: CTestCOMDlg(CWnd* pParent = NULL); // constructor estándar HANDLE hFile;

Para que nuestro programa pueda controlar las líneas de un puerto COM, primero hay que abrirlo. Escribamos el código responsable de abrir el puerto al cargar el programa.

HFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) ( MessageBox("¡El puerto no se pudo abrir!", "Error", MB_ICONERROR); ) else ( MessageBox("El puerto se abrió correctamente", "Ok", MB_OK); )

Usando la función estándar Win API Crear archivo() abre el puerto COM COM2. A continuación, comprobamos el éxito de la apertura con la salida. mensaje informativo. Esto es lo que hay que hacer nota importante: COM2 está en mi computadora, pero en tu computadora puedes conectarlo a otro puerto COM. En consecuencia, es necesario cambiar su nombre al puerto que esté utilizando. Puede ver qué números de puerto están presentes en su computadora de esta manera: Inicio -> Configuración -> Panel de control -> Sistema -> Hardware -> Administrador de dispositivos -> Puertos (COM y LPT).

Como resultado, la función CTestCOMDlg::OnInitDialog(), ubicado en el archivo PruebaCOMDlg.cpp, nuestra clase de diálogo debería tomar la forma:

BOOL CTestCOMDlg::OnInitDialog() ( CDialog::OnInitDialog(); // Agrega el elemento de menú "Acerca de..." al menú del sistema. // IDM_ABOUTBOX debe estar en el rango de comandos del sistema. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); ) ) // Establece el icono para este cuadro de diálogo. El marco hace esto automáticamente // cuando la ventana principal de la aplicación no es un cuadro de diálogo SetIcon(m_hIcon, TRUE); // Establecer ícono grande SetIcon(m_hIcon, FALSE); // Establecer ícono pequeño // TODO: Agregar inicialización adicional aquí hFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) ( MessageBox("¡No se pudo abrir el puerto!", "Ostbk", MB_ICONERROR); ) else ( MessageBox("Puerto abierto correctamente", "Ok", MB_OK); ) return TRUE // devuelve TRUE a menos que establezca el foco en un control)

Ahora agreguemos controladores para los botones de control de línea. Les di nombres apropiados: la función que establece uno en la línea DTR es OnDTR1(), 0 es OnDTR0(). Para la línea RTS, de la misma forma. Déjame recordarte que el controlador se crea cuando doble clic en el botón. Como resultado, estas cuatro funciones deberían tomar la forma:

Void CTestCOMDlg::OnDTR1() ( // TODO: Agregue el código del controlador de notificaciones de control aquí EscapeCommFunction(hFile, 6); ) void CTestCOMDlg::OnDTR0() ( // TODO: Agregue el código del controlador de notificaciones de control aquí EscapeCommFunction(hFile, 5); ) void CTestCOMDlg::OnRTS1() ( // TODO: Agregue el código del controlador de notificaciones de control aquí EscapeCommFunction(hFile, 4); ) void CTestCOMDlg::OnRTS0() ( // TODO: Agregue el código del controlador de notificaciones de control aquí EscapeCommFunction(hFile, 3);

Déjame explicarte un poco cómo funcionan. Como puedes ver, dentro de ellos contienen una llamada al mismo Win. Funciones API FunciónCommEscapar() con dos parámetros. El primero de ellos es el mango (HANDLE) en puerto abierto, segundo - código especial acciones correspondientes al estado de línea requerido.

Eso es todo, compilamos y lanzamos. Si todo está bien, debería ver un mensaje sobre la apertura exitosa del puerto. A continuación, pulsando los botones correspondientes, hacemos parpadear los LED conectados al puerto COM.

© Ivanov Dmitri
diciembre de 2006

THR - registro de datos intermedios del transmisor(solo escritura) Los datos escritos en el registro se transferirán al registro de desplazamiento de salida (cuando esté libre), desde el cual se emitirán cuando la señal de habilitación esté presente. cts. El bit 0 se transmite (y se recibe) primero. Si la longitud de envío es inferior a 8 bits, se ignoran los bits más significativos.
RBR - recibir registro de buffer de datos(solo lectura) Los datos recibidos por el registro de desplazamiento de entrada se colocan en el registro RBR, desde donde pueden ser leídos por el procesador. Si cuando se recibe el siguiente carácter, el anterior no se ha leído del registro, se registra un error de desbordamiento. Cuando la longitud de envío es inferior a 8 bits, los bits más significativos del registro tienen valor cero.
DLL - registro de bytes bajos del divisor de frecuencia.
DLM - registro de bytes altos del divisor de frecuencia. El divisor está determinado por la fórmula D=115200/V, donde V es la velocidad de transmisión, bit/s. La frecuencia del reloj de entrada de 1,8432 MHz se divide por un factor dado para producir 16 veces la velocidad de datos.
IER - registro de habilitación de interrupción. Un valor de bit de uno habilita una interrupción desde la fuente correspondiente.
Registrar asignaciones de bits IER:
* bits =0 - no utilizado;
*bit 3- Mod_IE- cambiando el estado del módem (cualquiera de las líneas CTS, DSR, RI, DCD);
*bit 2- RxL_ES- debido a un salto de línea/error;
*bit 1- TxD_ES- al finalizar la transferencia;
* bit 0 - RxD_ES- al recibir un carácter (en modo FIFO - interrupción del tiempo de espera).
IIR - registro de identificación de interrupción y señal de modo FIFO(solo lectura). Para simplificar análisis del programa UART se alinea solicitudes internas interrupciones basadas en un sistema de prioridad de cuatro niveles. IIR.
Orden de prioridad (descendente): estado de línea, recepción de caracteres, liberación del registro del transmisor, estado del módem. Cuando ocurren condiciones de interrupción, la UART apunta a la fuente de mayor prioridad hasta que la operación correspondiente la borra. Sólo después de esto se emitirá una solicitud indicando la siguiente fuente. El propósito de los bits de registro se describe a continuación:
* Bits: una señal del modo FIFO:
FIFO 16550A de 11 modos;
10 - modo FIFO 16550;
00-normal.
* Bits - no utilizados.
* Bits: el motivo de la interrupción con la máxima prioridad (en modo normal, no FIFO):
11 - error/salto de línea, el reinicio se realiza leyendo el registro de estado de la línea;
10 - carácter recibido, el reinicio se realiza leyendo los datos;
01 - carácter transmitido (registro THR vacío), el reinicio se realiza escribiendo datos;
00 - cambio de estado del módem; El reinicio se realiza leyendo el registro de estado del módem.
* El bit 0 es una señal de una solicitud de interrupción no atendida (1 - sin solicitud, 0 - hay una solicitud).
En modo FIFO, la causa de la interrupción se identifica mediante los bits.
* O11 - error/salto de línea. El reinicio se realiza leyendo el registro de estado de la línea.
* 010 - carácter aceptado. El reinicio se realiza leyendo el registro de datos del receptor.
* 110 - indicador de tiempo de espera (durante un intervalo de 4 tiempos de un carácter, no se transmitió ni recibió ni un solo carácter, aunque hay al menos uno en el búfer). El reinicio se realiza leyendo el registro de datos del receptor.
* 001 - registrarse THR vacío El reinicio se realiza escribiendo datos.
* 000 - cambio de estado del módem ( CEI, RSD, RI o DCD). El reinicio se realiza leyendo el registro..
MSR - FCR registro de control FIFO MSR:
(sólo para grabación). El propósito de los bits de registro se describe a continuación: * pedacitos - DIT
(Nivel de activación de interrupción): nivel de llenado del búfer FIFO en el que se genera una interrupción:
00 - 1 byte (predeterminado);
01 - 4 bytes;
10 - 8 bytes;
11 - 14 bytes.
*Los bits están reservados.
* Bit 3: habilita las operaciones DMA. * Bit 2 - RESETTF
(Restablecer transmisor FIFO): reinicia el contador del transmisor FIFO (escribiendo uno; el registro de desplazamiento no se reinicia). * Bit 1 - RESETRF
(Restablecer receptor FIFO): reinicia el contador del receptor FIFO (escribiendo uno; el registro de desplazamiento no se reinicia). * Bit 0 - TRIFÓE
(Habilitación de transmisión y recepción FIFO): habilita (por unidad) el modo FIFO para el transmisor y el receptor. Al cambiar de modo, los buffers FIFO se borran automáticamente. - LCR registro de control de línea (Habilitación de transmisión y recepción FIFO): habilita (por unidad) el modo FIFO para el transmisor y el receptor. Al cambiar de modo, los buffers FIFO se borran automáticamente..
(configuración de parámetros de canal). El propósito de los bits de registro se describe a continuación: * Bit 7 - DLAB
(Bit de acceso al pestillo del divisor): controla el acceso al divisor de frecuencia. * Bit 6 - BRCON
(Control de ruptura): genera un salto de línea (envía ceros) cuando BRCON=1. * Bit 5 - STICPAR
(Sticky Parity): formación forzada de un bit de paridad:
0: el bit de verificación se genera de acuerdo con la paridad del símbolo de salida; 1 - valor constante del bit de control: cuando EVENPAR 1 - valor constante del bit de control: cuando=1 - cero, con
=0 - soltero. 1 - valor constante del bit de control: cuando* Bit 4 -
(Selección de paridad par): selección del tipo de control: 0 - impar, 1 - par. * Bit 3 -(Habilitación de paridad) - resolución de bits de control:
1 - el bit de control (paridad o constante) está habilitado;
0 - bit de control desactivado.
* Bit 3: habilita las operaciones DMA. PARAR(Bits de parada) - número de bits de parada:
0 - 1 bit de parada;
1 - 2 bits de parada (para un código de 5 bits, un bit de parada tendrá una longitud de 1,5 bits).
(sólo para grabación). El propósito de los bits de registro se describe a continuación: SERIALDB(Bits de datos en serie) - número de bits de datos:
00 - 5 bits;
01-6 bits;
10 - 7 bits;
11 - 8 bits.
MCR - registro de control del módem. El propósito de los bits de registro se describe a continuación: MCR.
* Bits =0 - reservado.
=0 - soltero. LME(Habilitar modo Loopback) - habilitar el modo de diagnóstico:
0 - modo normal;
1 - modo de diagnóstico (ver más abajo).
(Selección de paridad par): selección del tipo de control: 0 - impar, 1 - par. ES DECIR.(Habilitar interrupción): habilita las interrupciones usando salida externa OUT2 MSR.7:
0 - las interrupciones están deshabilitadas;
1: las interrupciones están habilitadas.
* Bit 3: habilita las operaciones DMA. SALIDA1C(Control de bit OUT1): control de la señal de salida 1 (no utilizada); en modo diagnóstico ingresa a la entrada MSR.6.
(Restablecer transmisor FIFO): reinicia el contador del transmisor FIFO (escribiendo uno; el registro de desplazamiento no se reinicia). RTSC(Solicitud de envío de control) - control de salida estrategia en tiempo real; en modo diagnóstico ingresa a la entrada MSR.4:
0 - activo (-V);
1 - pasivo (+V).
(Restablecer receptor FIFO): reinicia el contador del receptor FIFO (escribiendo uno; el registro de desplazamiento no se reinicia). DTRC(Control de terminal de datos listo) - control de salida DTR; en modo diagnóstico ingresa a la entrada MSR.5:
0 - activo (-V);
1 - pasivo (+V).
LSR - registro de estado de línea(más precisamente, el estado del transceptor). El propósito de los bits del registro LSR se describe a continuación.
(configuración de parámetros de canal). El propósito de los bits de registro se describe a continuación: FIFOE(Estado de error FIFO): error en los datos recibidos en modo FIFO (el búfer contiene al menos un carácter recibido con un error de formato, error de paridad o una interrupción). En modo no FIFO siempre es 0.
(Bit de acceso al pestillo del divisor): controla el acceso al divisor de frecuencia. TENTAR(Estado vacío del transmisor): el registro del transmisor está vacío (no hay datos para transmitir ni en el registro de desplazamiento ni en los registros del búfer). THR o FIFO).
(Control de ruptura): genera un salto de línea (envía ceros) cuando BRCON=1. TRES(Registro de retención del transmisor vacío): el registro del transmisor está listo para recibir un byte para su transmisión. En modo FIFO, indica que no hay caracteres en el búfer de transmisión FIFO. Puede ser una fuente de interrupción.
=0 - soltero. BD(Break Detected): indicador de salto de línea (la entrada del receptor está en estado 0 durante al menos el tiempo en que se envió el símbolo).
(Selección de paridad par): selección del tipo de control: 0 - impar, 1 - par. F.E.(Error de trama): error de trama (bit de parada incorrecto).
* Bit 3: habilita las operaciones DMA. RE(Error de paridad): compruebe el error de bit (paridad o fijo).
(Restablecer transmisor FIFO): reinicia el contador del transmisor FIFO (escribiendo uno; el registro de desplazamiento no se reinicia). equipo original(Error de desbordamiento) - desbordamiento (pérdida de carácter). Si se recibe el siguiente carácter antes de que se cargue el anterior desde el registro de desplazamiento al registro de búfer o al registro FIFO, el carácter anterior en el registro de desplazamiento se pierde.
(Restablecer receptor FIFO): reinicia el contador del receptor FIFO (escribiendo uno; el registro de desplazamiento no se reinicia). DR.(Datos del receptor listos): los datos recibidos están listos (en el búfer DHR o FIFO). Restablecer: leyendo el receptor.
Los indicadores de error (bits) se restablecen después de leer el registro. LSR. En el modo FIFO, los indicadores de error se almacenan en el búfer FIFO junto con cada carácter. En el registro, se configuran (y provocan una interrupción) en el momento en que el carácter recibido por error está en la parte superior del FIFO (el primero en la cola en ser leído). En caso de un salto de línea, solo se ingresa un carácter de "interrupción" en el FIFO y el UART espera la recuperación y el siguiente bit de inicio. El reinicio se realiza leyendo el registro.- registro de estado del módem. El propósito de los bits de registro se describe a continuación: El reinicio se realiza leyendo el registro.:
(configuración de parámetros de canal). El propósito de los bits de registro se describe a continuación: DCD(Detección de portador de datos) - estado de la línea DCD:
0 - activo (-V);
1 - pasivo (+V).
(Bit de acceso al pestillo del divisor): controla el acceso al divisor de frecuencia. RHODE ISLAND.(Indicador de timbre) - estado de la línea RHODE ISLAND.:
0 - activo (-V);
1 - pasivo (+V).
(Control de ruptura): genera un salto de línea (envía ceros) cuando BRCON=1. DSR(Conjunto de datos listo) - estado de la línea DSR:
0 - activo (-V);
1 - pasivo (+V).
=0 - soltero. cts(Borrar para enviar): estado de la línea cts:
0 - activo (-V);
1 - pasivo (+V).
(Selección de paridad par): selección del tipo de control: 0 - impar, 1 - par. DDDCD(Detección de portador de datos Delta) - cambio de estado DCD.
* Bit 3: habilita las operaciones DMA. TERI(Indicador de borde posterior del anillo): caída de la envolvente RHODE ISLAND.(finalizar llamada).
(Restablecer transmisor FIFO): reinicia el contador del transmisor FIFO (escribiendo uno; el registro de desplazamiento no se reinicia). DDSR(Conjunto de datos Delta listo) - cambio de estado DSR.
(Restablecer receptor FIFO): reinicia el contador del receptor FIFO (escribiendo uno; el registro de desplazamiento no se reinicia). DCTS(Delta Clear To Send) - cambio de estado cts.
Los signos de cambio (bits) se restablecen cuando se lee el registro.
SRC - registro de trabajo(8 bits), no afecta el funcionamiento del UART, está destinado al almacenamiento temporal de datos (no disponible en 8250).
EN modo de diagnóstico(en LME=1) se organiza un "stub" interno dentro de la UART:
* la salida del transmisor cambia a un estado lógico;
* la entrada del receptor está deshabilitada; * entradas DSR, CTS, RI Y DCD desconectado de las líneas de entrada y controlado internamente por bits DTRC, RTSC, OUT1C, es decir;
* las salidas de control del módem cambian a un estado pasivo (cero lógico).
Los datos transmitidos en serie se reciben inmediatamente, lo que le permite verificar el canal de datos interno del puerto (incluidos los registros de desplazamiento) e interrumpir el procesamiento, así como determinar la velocidad del UART.

¿Qué es esto? ¿Por qué es necesario? ¿Está bien si lo toco con el dedo? ¿Qué? ¿Mejor no? Está bien, no lo haré. Pero es muy interesante para mí: hay un conector en la computadora, pero por alguna razón nadie le conecta nada. ¿Cómo se llama? ¿Puerto? ¡Guau! ¡Clase! ¿Qué es esto?..

Este puerto también se llama de serie (Puerto serie), aunque la reducción "COMO" en realidad significa "comunicación" - Puerto de comunicación(originalmente diseñado para el movimiento de datos bidireccional: comunicación verdadera). Y aún más a menudo se llama coherente, ya que transmite bits estrictamente uno tras otro.

Además del puerto serie, los ordenadores también disponen de un puerto paralelo, destinado principalmente a conectar impresoras. Se suele llamar así: impresora. Allí, la transferencia de datos es nominalmente unidireccional (aunque sólo nominalmente).

Es muy posible que tu ordenador también tenga un puerto COM. Lo más probable es que se trate de un casquillo ligeramente alargado con nueve contactos en dos filas, cinco y cuatro en cada una, y también roscados para pernos en los extremos. Viene con un cable con conector, respectivamente, con nueve enchufes ubicados en la misma configuración.

El conector se inserta en el zócalo con contactos y se atornilla con los pernos anteriores para que no se caiga. De esta manera puede, por ejemplo, conectar dos ordenadores directamente mediante cable de módem nulo. Esto es lo que se hacía antes, en la era de las primeras PC.

Hoy en día, de esta forma se conectan receptores de satélite, dispositivos de diversos sistemas de seguridad y sistemas de control. proceso de producción y otros dispositivos inteligentes.

Probablemente exista un puerto de este tipo en su computadora portátil (por supuesto, si tiene uno en su hogar). Se utiliza, por ejemplo, para sincronizar con una computadora de escritorio. Es cierto que en la práctica hoy en día esta conexión no se utiliza con mucha frecuencia; nadie quiere engañarse con los cables, porque se pueden utilizar otras tecnologías más modernas y eficientes.

Hoy en día, un puerto USB se utiliza cada vez más para la comunicación con varios dispositivos (por cierto, también es en serie). Módems móviles, impresoras, adaptadores Wi-Fi: todo más Los dispositivos se conectan a través de USB.

Además, con la disponibilidad de tecnologías como Ethernet y FireWire (para Apple), conectar computadoras con cables a través de puertos COM no es tan práctico. Bueno, si recuerdas el Bluetooth (que se traduce como "diente azul"), incluso puedes enviar puerto serie al museo.

Sin embargo, el sistema operativo Windows todavía nombra sus canales de transmisión de información como COM1, COM2, etc.

¿Por qué? Porque los controladores, por ejemplo, para Bluetooth, pueden aparecer en el sistema exactamente como puertos COM. Aquí estamos, por favor amen y favorezcan, asígnenos canales para el intercambio de datos. ¿Y qué si no somos del todo reales? Aún tendrás que servirnos.

Unix (y sus variantes como Linux) también tiene algunas peculiaridades en cuanto a la actitud hacia los dispositivos conectados. Dado que Unix considera todo lo que le rodea como archivos (¡incluso el hardware!), mantiene sus puertos serie en forma de archivos con nombres como ttyS0, ttyS1, ttyS2 (si es Linux) o ttyu0, ttyu1, ttyu2 (en FreeBSD).

si lo eres usuario sencillo y no tiene que trabajar con dispositivos específicos, receptores de satélite y otros dispositivos complicados, entonces no hay necesidad de ir a las tiendas de informática y buscar un cable para un puerto COM.

Los datos de una computadora a otra se pueden transferir de muchas otras maneras, incluso sin ningún cable. Como último recurso, transfiera a una unidad flash si red local por alguna razón no funciona.

En resumen, aunque el puerto COM sigue existiendo desde el punto de vista del sistema operativo e incluso se utiliza prácticamente como canal de comunicación, en la práctica la mayoría de los usuarios pueden olvidarse de él con la conciencia completamente tranquila.

Es cierto que la curiosidad siempre es encomiable. Así que pregunta, interesa, estudia. Pero es mejor no tocarlo con las manos sin permiso.

Publicaciones anteriores:

A veces hay que solucionar un problema de comunicación. dispositivo electrónico con un ordenador, ya sea simplemente intercambio de datos o control remoto. Este artículo describe cómo se puede implementar esto usando un puerto serie. Su principal ventaja es que el estándar interfaz de software Windows (API) permite el control directo de las líneas de salida, dando control directo sobre las mismas, y tiene la función de esperar algún evento asociado al puerto COM. Además, el estándar RS-232, según el cual se fabrican los puertos COM, permite conectar y desconectar cables mientras los dispositivos están en funcionamiento (hot plug).

Descripción

Puerto COM (puerto serie)– interfaz bidireccional que transmite datos en forma serie (bit a bit) a través del protocolo RS-232. Este es un protocolo bastante común que se utiliza para conectar un dispositivo (por ejemplo, una computadora) con otros mediante cables de hasta 30 m de largo. Los niveles de señal lógica aquí difieren de los estándar: el nivel lógico uno es de +5 a +15 V, el nivel lógico cero es de -5 a -15 V, lo que requiere transformaciones de circuito adicionales, pero proporciona una buena inmunidad al ruido.

Considere un conector de 9 pines (DB-9M). A continuación se muestra su pinout:

Pin no. Nombre Carácter de la señal Señal
1 DCD Aporte Detección de portador de datos
2 RxD Día de descanso Transmitir datos
3 TxD Aporte Recibir datos
4 DTR Día de descanso Terminal de datos listo
5 Tierra - Suelo
6 DSR Aporte Conjunto de datos listo
7 estrategia en tiempo real Día de descanso Solicitud de envío
8 cts Aporte Borrar para enviar
9 RHODE ISLAND. Aporte Indicador de timbre

Nos interesarán más los pines 2 (transmisión de datos), 3 (recepción de datos) y 5 (tierra). Este es el conjunto mínimo para la comunicación bidireccional entre dispositivos.

No me detendré en detalle en la descripción del protocolo. Para esto existen GOST, etc. Por eso, iremos más allá y hablaremos de cómo controlar a esta bestia.

Solicitud

Como ya se mencionó, los niveles de LAN RS-232 son diferentes de niveles estándar TTL. Por lo tanto, necesitamos convertir de alguna manera los valores de voltaje. Aquellos. haga 5V desde +15V y 0V desde -15V (y viceversa). Una forma (y probablemente la más sencilla) es utilizar chip especial MAX232. Es fácil de entender y puede convertir simultáneamente dos señales lógicas.

A continuación se muestra un esquema de su inclusión:


Creo que no debería haber ninguna dificultad. Esta es una de las opciones para utilizar este chip: transferir datos de un microcontrolador a una computadora y viceversa. La señal transmitida va a los pines T. incógnita IN por un lado y por R incógnita EN por el otro. Las señales de entrada se toman de T incógnita FUERA y R incógnita FUERA respectivamente.

Programación

Primero, hablemos de programar puertos a bajo nivel. Esto será más correcto. Pasé muchos nervios entendiendo esta interfaz hasta que comencé a profundizar en el principio de su funcionamiento a un nivel inferior al de la simple transmisión de caracteres. Si esto queda claro, lo mismo ocurre con los idiomas. alto nivel no habrá ningún problema.

A continuación se muestran las direcciones de los puertos COM con los que tendremos que trabajar:

Nombre del puerto DIRECCIÓN IRQ
COM 1 3F8h 4
COM 2 2F8h 3
COM 3 3E8h 4
COM 4 2E8h 3

Pueden variar. Puede establecer los valores en la configuración del BIOS. Este direcciones base. De ellos dependerán las direcciones de los registros responsables de la operación de los puertos:

DIRECCIÓN * Bit 7 - Leer/Escribir Abreviatura Nombre del registro
+ 0 =0 Escribir Búfer de retención del transmisor
=0 Leer Búfer del receptor
=1 Leer/Escribir Byte bajo del pestillo del divisor
+ 1 =0 Leer/Escribir IER Registro de activación de interrupción
=1 Leer/Escribir Byte alto del pestillo del divisor
+ 2 - Leer IIR Registro de identificación de interrupción
- Escribir FCR Registro de control FIFO
+ 3 - Leer/Escribir LCR Registro de control de línea
+ 4 - Leer/Escribir MCR Registro de control de módem
+ 5 - Leer LSR Registro de estado de línea
+ 6 - Leer MSR Registro de estado del módem
+ 7 - Leer/Escribir Registrarse desde cero

La primera columna es la dirección del registro relativa a la base. Por ejemplo, para COM1: la dirección del registro LCR será 3F8h+3=3FB. La segunda columna es el bit DLAB (Divisor Latch Access Bit), que define diferentes propósitos para el mismo registro. le permite operar 12 registros usando solo 8 direcciones. Por ejemplo, si DLAB=1, entonces accediendo a la dirección 3F8h estableceremos el valor del byte bajo del divisor de frecuencia. generador de reloj. Si DLAB = 0, al acceder a la misma dirección, el byte transmitido o recibido se escribirá en este registro.

Registro “cero”

Corresponde a registros para recibir/transmitir datos y configurar el coeficiente divisor de frecuencia del generador. Como se mencionó anteriormente, si DLAB = 0, entonces el registro se usa para registrar los datos recibidos/transmitidos, pero si es igual a 1, entonces se establece el valor del byte bajo del divisor de frecuencia del generador de reloj. La velocidad de transmisión de datos depende del valor de esta frecuencia. El byte alto del divisor se escribe en la siguiente celda de memoria (es decir, para el puerto COM1 será 3F9h). A continuación se muestra la dependencia de la tasa de transferencia de datos del coeficiente divisor:

Registro de habilitación de interrupción (IER)

Si DLAB=0, entonces se utiliza como registro para controlar las interrupciones desde un adaptador asíncrono; si DLAB=1, entonces se establece en él el byte alto del divisor de frecuencia del generador de reloj.

Registro de identificación de interrupciones (IIR)

Una interrupción es un evento que detiene la ejecución del programa principal e inicia la ejecución de la rutina de interrupción. Este registro determina el tipo de interrupción que ocurrió.

Registro de control de línea (LCR)

Este es el registro de control.

Bit 7 1 Bit de acceso al pestillo del divisor: configuración de la tasa de intercambio de datos
0 Modo normal (control de interrupción, recepción/transmisión de datos)
Bit 6 Simular salto de línea (envía una secuencia de múltiples ceros)
Bits 3 – 5 Bit 5 Bit 4 Bit 3 Selección de paridad
incógnita incógnita 0 Sin paridad
0 0 1 paridad impar
0 1 1 Paridad uniforme
1 0 1 Paridad alta (fija)
1 1 1 Paridad baja (fija)
Bit 2 Número de bits de parada
0 1 bit de parada
1 2 bits de parada para 6,7 ​​u 8 bits de datos o 1,5 bits de parada para 5 bits de datos.
bits 0 y 1 Bit 1 Bit 0 Número de bits de datos
0 0 5 bits
0 1 6 bits
1 0 7 bits
1 1 8 bits

La verificación de paridad implica la transmisión de un bit más: el bit de paridad. Su valor se establece de modo que el número total de unos (o ceros) en un paquete de bits sea par o impar, dependiendo de la configuración de los registros del puerto. Este bit se utiliza para detectar errores que pueden ocurrir durante la transmisión de datos debido a interferencias en la línea. El dispositivo receptor vuelve a calcular la paridad de los datos y compara el resultado con el bit de paridad recibido. Si la paridad no coincide, se considera que los datos se transmitieron con error.

El bit de parada indica el final de la transmisión de datos.

Registro de control de módem (MCR)

Registro de control del módem.

Poco Significado
0 línea DTR
1 Línea RTS.
2 Línea OUT1 (repuesto)
3 Línea OUT2 (repuesto)
4 Ejecutar diagnósticos cuando la entrada de un adaptador asíncrono está en cortocircuito con su salida.
5-7 Igual a 0

Registro de estado de línea (LSR)

Un registro que determina el estado de la línea.

Poco Significado
0 Los datos recibidos y listos para ser leídos se restablecen automáticamente cuando se leen los datos.
1 Error de desbordamiento. Se recibió un nuevo byte de datos, pero el programa aún no había leído el anterior. El byte anterior se pierde.
2 Error de paridad, borrado después de leer el estado de la línea.
3 Error de sincronización.
4 Se detectó una solicitud para interrumpir la transmisión "BREAK": una larga cadena de ceros.
5 El registro de retención del transmisor está vacío y se puede escribir en él un nuevo byte para su transmisión.
6 El registro de desplazamiento del transmisor está vacío. Este registro recibe datos del registro de tenencia y los serializa para su transmisión.
7 Tiempo de espera (el dispositivo no está conectado a la computadora).

Registro de estado del módem (MSR)

Registro de estado del módem.

Bueno, eso es todo. Al operar estos registros, puede comunicarse directamente con el puerto COM y controlar la transmisión y recepción de datos. Si no quiere jugar con la memoria, puede utilizar componentes ya preparados para varios entornos de programación: C++, VB, Delphi, Pascal, etc. Son intuitivos, por lo que creo que no es necesario centrarse en ellos aquí.




Arriba