Compartir a través de


Información general sobre las transacciones de E/S de SerCx2

SerCx2 controla una solicitud de lectura o escritura de un cliente mediante la emisión de una o varias transacciones de E/S al controlador de controlador serie. Este controlador trata cada transacción como una operación de E/S independiente que transfiere datos entre el controlador serie y el búfer de datos de la solicitud.

El sistema en circuitos integrados chip (SoC) suele incluir controladores de serie (o UART) para permitir la comunicación serie de alta velocidad con otros circuitos integrados que se soldan en la misma placa de circuito impreso. Los procesadores de estos SoC pueden usar E/S programados (PIO) para transferir directamente datos a o desde los registros de datos asignados a memoria en estos controladores serie. Además, estos SoC suelen proporcionar hardware DMA avanzado para mover datos entre los controladores serie y la memoria.

PIO puede ser suficiente para transferencias de datos cortas, pero el uso de PIO para transferencias más largas a altas velocidades de datos supone una carga demasiado grande para el procesador. DMA es necesario para descargar estas transferencias desde el procesador.

Tipos de transacciones de E/S

SerCx2 define los tres tipos generales siguientes de transacciones de E/S:

  • PIO
  • DMA del sistema
  • Personalizado

Todos los controladores de controlador serie deben admitir transacciones de E/S que usen PIO para transferir datos. Un controlador de controlador serie también puede admitir transacciones de E/S que usan DMA del sistema o un mecanismo de transferencia de datos personalizado, en función de las funcionalidades del controlador serie y del hardware asociado. El controlador puede admitir transacciones DMA del sistema o transacciones personalizadas, pero no ambas.

Para cada tipo de transacción de E/S compatible con el hardware del controlador serie, el controlador de controlador serie registra un paquete de soporte técnico con SerCx2. Este paquete describe las funcionalidades de hardware pertinentes e incluye un conjunto de funciones de devolución de llamada de eventos implementadas por el controlador que SerCx2 llama para iniciar y controlar este tipo de transacción de E/S.

Si un controlador serie puede usar un controlador DMA del sistema, que podría compartirse con otros dispositivos, el controlador de controlador serie podría admitir transacciones DMA del sistema. Para estas transacciones, SerCx2 configura el controlador DMA del sistema e inicia las transferencias DMA. El controlador del controlador serie hace relativamente poco trabajo durante las transacciones DMA del sistema.

Si un controlador serie tiene algún mecanismo de hardware personalizado para transferir datos, el controlador de controlador serie podría admitir transacciones personalizadas que usan este mecanismo. Por ejemplo, si el hardware del controlador serie tiene la funcionalidad DMA integrada bus-master, el controlador de controlador serie puede admitir transacciones personalizadas para que esta funcionalidad esté disponible para SerCx2.

Las transacciones personalizadas son flexibles en términos de los tipos de mecanismos de transferencia de datos que pueden admitir. Sin embargo, estas transacciones son más difíciles de implementar que las transacciones de PIO o las transacciones DMA del sistema. Para admitir transacciones personalizadas, el controlador de controlador serie normalmente debe configurar e inicializar el hardware usado para transferir datos. Además, si se cancela una solicitud de lectura o escritura pendiente antes de que finalice la transacción de recepción personalizada o transmisión personalizada asociada, el controlador debe finalizar la transacción y completar la solicitud.

Cada transacción de E/S es una operación relativamente sencilla. Una transacción de E/S lee datos del controlador serie o escribe datos en el controlador y nunca mezcla lecturas y escrituras. Una transacción de E/S usa un solo modo de transferencia (PIO, DMA del sistema o personalizado) y nunca mezcla los modos de transferencia.

SerCx2 puede decidir inteligentemente si se debe usar PIO o DMA para satisfacer una solicitud de lectura o escritura. Por ejemplo, SerCx2 puede optar por presentar una solicitud de lectura o escritura muy corta al controlador de controlador serie como transacción PIO. O bien, SerCx2 podría presentar una solicitud de lectura o escritura más larga al controlador serie como una transacción DMA.

Dividir una solicitud de lectura o escritura en varias transacciones

Algunos controladores DMA del sistema pueden tener limitaciones que requieren SerCx2 para interrumpir una solicitud de lectura o escritura más larga en dos o más transacciones de E/S. Por ejemplo, si un controlador DMA del sistema requiere transferencias DMA para iniciar y terminar en límites de bytes incluso en la memoria, pero el búfer de datos de una solicitud de lectura se inicia y termina en límites de bytes impares, SerCx2 podría usar PIO para transferir los primeros y últimos bytes al búfer, y usar DMA del sistema para transferir todos los datos entre los primeros y los últimos bytes. En este ejemplo, SerCx2 emite las tres transacciones de E/S siguientes al controlador de controlador serie en el orden mostrado:

  1. Transacción de recepción de PIO para el primer byte.
  2. Transacción de recepción de system-DMA para bytes entre bytes.
  3. Transacción de recepción de PIO para el último byte.

De forma similar, si un mecanismo de transferencia de datos personalizado puede iniciar y finalizar una transacción de transmisión personalizada en un límite de bytes arbitrario en memoria, pero el tamaño del búfer en una solicitud de escritura supera la longitud máxima de transferencia de una transacción de transmisión personalizada, SerCx2 crea particiones de la solicitud de escritura en dos (o más) transacciones de transmisión personalizadas, cada una de las cuales no supera la longitud máxima de la transferencia.

Si SerCx2 necesita dividir una solicitud de lectura o escritura en dos o más transacciones de E/S, el controlador de controlador serie puede omitir de forma segura la relación de estas transacciones entre sí y con la solicitud. SerCx2 serializa las transacciones para garantizar que los datos se reciben o transmiten en el orden correcto.

Cuando el controlador de controlador de serie registra un conjunto de funciones de devolución de llamada para admitir transacciones de DMA del sistema o transacciones personalizadas, el controlador proporciona valores de parámetro que describen las funciones del hardware que realizarán estas transacciones. Por ejemplo, para las transacciones de system-DMA, los parámetros incluyen los requisitos de alineación y las longitudes de transferencia mínimas y máximas que admite el controlador DMA del sistema. SerCx2 usa estos parámetros para decidir si procesar una solicitud de lectura o escritura como una transacción PIO o una transacción DMA del sistema, y si se va a dividir la solicitud en dos o más transacciones de E/S.

Sin embargo, un controlador serie puede tener funcionalidades de hardware especiales que no se pueden describir adecuadamente mediante los parámetros que el controlador de controlador serie suministra a SerCx2. Por lo tanto, el controlador puede tener acceso a información dependiente del hardware que permite al controlador tomar mejores decisiones que SerCx2 sobre cómo particionar una solicitud de lectura o escritura en una o varias transacciones de E/S. Como opción, este controlador puede implementar las funciones de devolución de llamada de eventos EvtSerCx2SelectNextReceiveTransactionType y EvtSerCx2SelectNextTransmitTransactionType . SerCx2 llama a estas funciones, si se implementan, para permitir que el controlador decida qué transacciones de E/S usar para satisfacer una solicitud de lectura o escritura.