prólogo
Las aplicaciones de microcontrolador pueden admitir fácilmente la funcionalidad de host integrado USB utilizando microcontroladores y periféricos USB OTG de Microchip. Esta función se conecta a dispositivos de almacenamiento masivo, como unidades flash USB y lectores de tarjetas de memoria. Estos dispositivos adoptan la clase de almacenamiento masivo USB.
Clase de almacenamiento masivo USB
descripción general
De los cuatro tipos de transferencia compatibles con USB, la masiva es la más adecuada para grandes transferencias de datos. Las transferencias masivas hacen un uso eficiente del ancho de banda USB en el sentido de que utilizan cualquier ancho de banda restante en el marco después de que se hayan completado las transferencias isócronas, de interrupción y de control. No está limitado a un número específico de bytes por cuadro. La verificación de errores también está integrada, lo que garantiza que sus datos sean precisos. El tiempo exacto disponible para transferencias masivas depende de la cantidad de tráfico en el autobús. Es posible que haya poco ancho de banda disponible para transferencias masivas dentro de un marco si también es necesario realizar otras transferencias. Por lo tanto, las transferencias masivas solo deben usarse para operaciones que no sean críticas en cuanto al tiempo.
Los especificadores de protocolo, subclase y clase de dispositivo de almacenamiento masivo no se incluyen en los campos bDeviceClass, bDeviceSubClass y bDeviceProtocol del descriptor de dispositivo. En su lugar, todos estos campos se establecen en 0x00 y los especificadores se especifican en los campos bInterfaceClass, bInterfaceSubClass y bInterfaceProtocol del descriptor de interfaz. Las configuraciones más comunes para dispositivos de almacenamiento masivo USB son:
- bInterfaceClass – 0x08 (clase de almacenamiento masivo)
- bInterfaceSubClass – 0x06 (Comando primario SCSI-2 (SPC-2))
- bInterfaceProtocol: 0x50 (transporte masivo solamente)
Un dispositivo de almacenamiento masivo puede contener varias unidades lógicas, cada una representada por un número de unidad lógica (LUN). Todas las unidades lógicas de un dispositivo comparten las mismas características de dispositivo, pero se pueden direccionar individualmente a través de LUN. Los LUN están numerados del 0 al 15. LUN se especifica como 0 si el dispositivo no admite varios LUN.
Esta implementación de la clase de almacenamiento masivo brinda soporte para el transporte masivo únicamente. El protocolo utiliza tres puntos finales:
- punto final de transferencia de control 0
- 1 extremo de ENTRADA masiva
- 1 punto final de salida masiva
Una transferencia masiva consta de tres etapas:
- instrucciones
- datos (opcional)
- Estado
Las etapas de comando se envían desde el host al periférico a través del punto final Bulk OUT. Si hay una etapa de datos presente, use el extremo Bulk IN si los datos se transfieren desde el periférico al host, y el extremo Bulk OUT si los datos se transfieren desde el host al periférico. La etapa de estado utiliza el extremo Bulk IN del host para recibir información de estado del periférico sobre la transferencia. El flujo de la etapa se muestra en la Figura 1.
Envoltorio de bloque de comando (CBW)
Se envía un envoltorio de bloque de comando al periférico durante la fase de comando de la transferencia. Un CBW es un paquete de 31 bytes que contiene la siguiente información:
- Una etiqueta para identificar la transferencia.
- Número de bytes a transferir durante la fase de datos
- LUN al que se aplica la transferencia
- bloque de comando ejecutado por el dispositivo