USB Attached SCSI
USB Attached SCSI (UAS) is a transport protocol that enables the exchange of SCSI commands, task management functions, and data between hosts and USB-attached devices, such as mass storage peripherals, while adhering to the SCSI Architecture Model.[1] Defined to support USB 2.0 and later specifications, UAS facilitates efficient SCSI operations over USB interconnects by using bulk endpoints to transfer Information Units (IUs) containing commands, status, data, and sense information, allowing for advanced features like command queuing and autosense data delivery.[2] The standard originated from efforts by the INCITS T10 technical committee to improve upon the Bulk-Only Transport (BOT) protocol used in the USB Mass Storage Class, which lacked native support for SCSI queuing and full-duplex transfers.[2] A working draft was released in May 2008, leading to the formal specification INCITS 471-2010, which describes UAS as a mechanism for sending SCSI commands associated with logical units over USB while ensuring compatibility with existing USB mass storage implementations through alternate interface support.[3] This was subsequently published internationally as ISO/IEC 14776-251:2014, focusing on properties such as streamlined command execution and error handling for USB 2.0 and USB 3.0 environments.[2] In April 2023, the protocol was updated to UAS-3 under ISO/IEC 14776-253:2023, aligning with SCSI Architecture Model-6 (SAM-6) and extending capabilities for modern USB interfaces, including enhanced transport efficiency and support for bidirectional data flows.[4] UAS devices require specific USB descriptors. The original specification uses a single interface with one bulk-in and one bulk-out endpoint, while UAS-3 employs two bulk-in and two bulk-out endpoints to leverage USB 3.x streaming capabilities.[2][4] These devices operate using Information Units (IUs) like Command IUs and Sense IUs, each transmitted in a single USB packet to minimize overhead.[2] These features enable higher performance, reduced latency, and lower CPU utilization on hosts, making UAS essential for high-speed external storage applications while maintaining backward compatibility with BOT via dual-interface configurations.[2] The USB Implementers Forum (USB-IF) further standardized aspects of the protocol in its Device Class Specification for UASP version 1.0, released in June 2009, to promote adoption in consumer and enterprise storage devices.[5]Introduction
Definition and Purpose
USB Attached SCSI (UAS), also known as USB Attached SCSI Protocol (UASP), is a transport protocol within the USB Mass Storage Class (MSC) that enables the exchange of SCSI commands over USB interfaces for high-performance storage devices, including hard disk drives (HDDs), solid-state drives (SSDs), and optical drives.[6][1] It defines mechanisms for coordinating SCSI commands with USB hardware, ensuring compliance with the SCSI Architecture Model-4 (SAM-4) while integrating seamlessly with USB protocols.[1] The primary purpose of UAS is to facilitate more efficient data transfers compared to legacy protocols like Bulk-Only Transport (BOT) by supporting command queuing, which allows multiple outstanding commands to be processed simultaneously, thereby reducing protocol overhead and round-trip latencies.[6][7] This design maximizes bus utilization, particularly for modern storage workloads, and leverages the capabilities of USB 3.0 and later versions, including SuperSpeed rates up to 5 Gbit/s for enhanced throughput.[5] UAS adapts the standard SCSI command set—such as those defined in SPC-4 for control and SBC-3 for block access—to the USB environment, enabling features like asynchronous notification and autosense for error handling.[1] For instance, it supports the UNMAP command (equivalent to TRIM) in SCSI block command sets, allowing SSDs to optimize performance by reclaiming unused space.[1] UAS is formally specified by the USB Implementers Forum (USB-IF) through the UASP standard and by the T10 technical committee via the UAS transport protocol.[5][1]Historical Context
The development of USB Attached SCSI (UAS) emerged in the late 2000s as a direct response to the performance limitations of the Bulk-Only Transport (BOT) protocol, which had been the primary method for USB mass storage since its introduction in 1999. BOT, built on the SCSI command set, suffered from high protocol overhead and lack of support for advanced features like command queuing, making it inefficient for emerging high-speed storage needs. Initial UAS work began around 2008, coinciding with the release of the USB 3.0 specification in November of that year, which promised SuperSpeed data rates up to 5 Gbit/s and necessitated a more capable transport protocol to fully leverage the bandwidth for storage devices.[8] Key milestones trace back to earlier USB foundations, including the USB 1.1 standard released in August 1998, which first enabled widespread adoption of USB for peripherals, and BOT as its mass storage extension. The T10 committee published the UAS-1 specification (INCITS 471-2010, internationally as ISO/IEC 14776-251:2014) in 2010, defining the core transport protocol for SCSI commands over USB.[3][2] This was followed by the USB Implementers Forum (USB-IF) releasing the USB Attached SCSI Protocol (UASP) v1.0 in June 2009, providing an adoptable class specification for device manufacturers.[5] A subsequent UAS-2 project initiated by T10 in 2010 was recommended for cancellation in February 2011 due to overlapping efforts, with the initiative later revived as UAS-3 (INCITS 572-2021, internationally as ISO/IEC 14776-253:2023), aligning with SCSI Architecture Model-6 (SAM-6) for updated SCSI architecture support in USB environments.[9][10][4] UAS builds on SCSI as the foundational command protocol for reliable data operations.[11] Adoption of UAS was driven by the growing demand for higher throughput in external storage solutions, particularly as solid-state drives (SSDs) proliferated in the early 2010s, outpacing BOT's capabilities and requiring efficient protocols to achieve near-native SATA performance over USB. First commercial implementations appeared around 2011-2012, with companies like Renesas introducing USB 3.0-to-SATA bridge chips supporting UASP for faster data transfers in enclosures and external drives. UAS integrated seamlessly into the USB 3.0 ecosystem from the outset, offering backward compatibility with USB 2.0 High-Speed mode (480 Mbit/s) to ensure broad device support while enabling asynchronous operations for improved efficiency.[12][13]Standards and Specifications
UAS Protocol Versions
The USB Attached SCSI (UAS) protocol has evolved through distinct versions to enhance compatibility with advancing USB standards while maintaining core SCSI transport capabilities. The initial version, UAS-1, was standardized as INCITS 471-2010 by the InterNational Committee for Information Technology Standards (INCITS) and published internationally as ISO/IEC 14776-251:2014.[14][2] This core specification provides a transport mechanism for SCSI commands over USB 2.0 and USB 3.0 interfaces, with support for up to 65,536 outstanding commands via 16-bit tagging for queuing.[15] It incorporates USB streams mode to enable concurrent command execution, allowing multiple SCSI tasks to proceed simultaneously without the sequential limitations of prior protocols like Bulk-Only Transport (BOT).[1] UAS-1 ensures compliance with the SCSI Architecture Model-4 (SAM-4), defining how commands, data, and status are exchanged between initiator and target ports in a USB environment.[14] Building on UAS-1, the USB Implementers Forum (USB-IF) released the USB Attached SCSI Protocol (UASP) v1.0 in 2009 as an implementer's specification to facilitate adoption.[5] UASP v1.0 aligns fully with UAS-1 requirements and introduces standardized device identification through USB Mass Storage class codes, specifically assigning bInterfaceClass 0x08 (Mass Storage), bInterfaceSubClass 0x06 (Transparent SCSI), and bInterfaceProtocol 0x62 (UAS) in the interface descriptor.[6] This enables operating systems and hosts to reliably detect and enumerate UAS-capable devices, promoting interoperability across USB 3.0 ecosystems. Like UAS-1, UASP v1.0 adheres to SAM-4 for command processing, focusing on efficient SCSI task management without altering the underlying queuing model.[5] A proposed UAS-2 effort by the T10 committee was initiated but ultimately canceled due to overlapping redundancies with emerging USB enhancements, leading directly to the development of UAS-3.[16] UAS-3, formalized as INCITS 572-2021 and published internationally as ISO/IEC 14776-253:2023, updates the protocol for compliance with SCSI Architecture Model-6 (SAM-6) while providing a transport mechanism for USB 2.0 and USB 3.x interfaces.[10][4] It includes provisions for USB error handling and aligns with SAM-6 for task management, retaining the command queuing and streams mode from prior versions and emphasizing scalability for high-speed operations.[10] Key differences across versions include UAS-1's emphasis on foundational queuing for USB 3.0 concurrency versus UAS-3's alignment with updated SCSI architecture models. All versions preserve SAM compliance to ensure consistent SCSI semantics in USB transports.[1]Relation to USB and SCSI Standards
USB Attached SCSI (UAS) operates as a specialized subclass within the USB Mass Storage Class (MSC), designated by the base class code 08h and subclass code 06h, which positions it as an advanced alternative to the Bulk-Only Transport (BOT) protocol (subclass 05h) for transporting SCSI commands over USB interfaces.[17] This subclass integration allows UAS to leverage the established USB MSC framework while introducing optimizations for higher-performance storage operations, effectively replacing BOT in scenarios requiring more efficient command queuing and data handling.[1] In terms of alignment with SCSI standards, UAS fully incorporates the SCSI Primary Commands-4 (SPC-4) for core command set operations and SCSI Block Commands-3 (SBC-3) for block-oriented storage devices, enabling advanced features such as Native Command Queuing (NCQ) to manage multiple outstanding commands over USB connections.[1] This adherence ensures that UAS devices behave as compliant SCSI logical units, supporting task management functions and command encapsulation that mirror traditional parallel or serial SCSI implementations, thereby facilitating seamless interoperability with SCSI-aware software stacks.[1] UAS integrates deeply with USB architecture by utilizing SuperSpeed USB (USB 3.0 and later) features, including unidirectional pipes for enhanced throughput, bulk streams for concurrent data transfers, and control transfers for device management, while maintaining backward compatibility with USB 2.0 through fallback to reduced functionality without streams.[1] A core innovation is the definition of new USB requests, such as the USB Command Block Wrapper (USBCB), which encapsulates SCSI commands and distinguishes UAS from BOT's simpler Command Block Wrapper (CBW) by supporting tagged command queuing and status reporting.[1] Additionally, UAS mandates specific endpoint configurations, including bidirectional bulk IN and OUT endpoints, to enable efficient streaming of commands, data, and sense information across the USB link.[1]Technical Operation
Protocol Architecture
The USB Attached SCSI (UAS) protocol employs a layered architecture that integrates with the established SCSI standards while leveraging the USB transport mechanism. At the base, the USB physical and link layers manage the underlying hardware transport, including endpoint pipes for data exchange. The UAS transport layer then maps SCSI tasks to USB streams, enabling efficient command queuing and asynchronous operations over USB bulk and interrupt pipes. Finally, the SCSI application layer processes the commands themselves, adhering to standards such as SPC-4 for SCSI Primary Commands, which serve as the payload for UAS operations.[1] Core to the UAS architecture are its key components, including Task Management functions and Information Units (IUs). Task Management provides mechanisms for aborting or resetting tasks, ensuring robust error handling without disrupting ongoing operations. The primary IUs consist of the Command IU, which encapsulates SCSI commands from the host; the Data Ready IUs (Read Data Ready IU and Write Data Ready IU), which signal the device's readiness to transfer data bidirectionally over the dedicated data pipes; the Sense IU, conveying error or status details from the device; and the Response IU, delivering completion status for tasks. These components enable a streamlined flow distinct from legacy protocols by supporting parallel processing of multiple commands.[7] Device negotiation for UAS support occurs during USB enumeration, where the peripheral advertises its capabilities through specific descriptors in the configuration, interface, and endpoint setups; if the host does not recognize UAS, it automatically falls back to the Bulk-Only Transport (BOT) protocol for compatibility. A defining feature of UAS is its support for multiple concurrent tasks per Logical Unit Number (LUN) through command queuing, with asynchronous notifications allowing the device to signal task completions independently, thereby reducing host polling overhead.[1] In terms of operational architecture, the host initiates commands primarily via USB control transfers for setup and bulk pipes for command submission, while the device responds using parallel streams across dedicated pipes for status, data-in, and data-out, as illustrated in the four-pipe model (Command, Status, Data-in, Data-out). This setup permits simultaneous handling of multiple streams, enhancing throughput without serialized dependencies.[7]Data Transfer Mechanisms
In USB Attached SCSI (UAS), the host initiates data transfers by issuing SCSI commands encapsulated in Command Information Units (IUs) over the Command pipe, which is a dedicated bulk-out endpoint and not a streams-enabled pipe.[7] The device responds by allocating a unique stream ID to associate with the command, serving as a tag for subsequent data and status operations.[7] This process allows the host to send commands without immediate acknowledgment, enabling efficient queuing at the device level.[1] UAS leverages USB 3.0's bulk streams feature in streams mode to support up to 16 concurrent data transfers per endpoint on the Data-in, Data-out, and Status pipes, facilitating out-of-order completions and improved parallelism over traditional sequential protocols.[7] The device assigns stream IDs to these pipes to match the command tag, ensuring that data packets are routed correctly even if they arrive or complete non-sequentially.[7] This mechanism coordinates multiple streams across the endpoints, allowing the host to issue overlapping commands while the device manages their execution independently.[1] Data flows through dedicated bulk endpoints: outbound data (Data OUT) travels via the Data-out pipe using stream-associated packets, while inbound data (Data IN) returns over the Data-in pipe.[7] Command completion is reported via Response IUs on the Status pipe, a bulk-in endpoint that uses streams for tagged responses, and errors are handled through Sense Data IUs sent on the same pipe to convey diagnostic information without halting other operations.[7] A core advantage of UAS is its pipelining capability, which permits the host to dispatch multiple commands concurrently without awaiting individual completions, contrasting with bulk-only transport's rigid, one-at-a-time model and thereby optimizing bus utilization.[1] UAS supports scatter-gather operations for large transfers by incorporating scatter-gather lists directly into the SCSI Command Descriptor Block (CDB) within the Command IU, allowing the device to handle non-contiguous memory buffers efficiently.[7] Transfer sizes are constrained by the underlying USB packet limits, with SuperSpeed USB capping individual packets at 1024 bytes to maintain protocol integrity.[5]Hardware Support
Host Controllers and Hubs
Full UAS functionality for USB Attached SCSI (UAS) requires a USB 3.0 or later compliant interface, specifically an eXtensible Host Controller Interface (xHCI) implementation that supports streams to enable asynchronous notifications and multiple outstanding commands.[7] Streams allow the separation of command, status, data-in, and data-out pipes, which is essential for UAS's 4-pipe model and out-of-order completions.[18] Without streams support, UAS cannot fully utilize USB 3.0's SuperSpeed capabilities and may fall back to legacy protocols.[19] Early examples of compatible host controllers include Intel's 7 Series chipsets (such as those in Panther Point platforms), which provide native xHCI with streams for UAS, though initial deployments sometimes necessitated BIOS or firmware updates to resolve enumeration issues. AMD's A70M and A75 Fusion Controller Hubs also integrate USB 3.0 xHCI support suitable for UAS, enabling high-speed storage attachments on FM1/FM2 platforms. Similarly, the NEC/Renesas μPD72020x series of USB 3.0 host controllers, compliant with xHCI 1.0, deliver streams functionality for UAS in add-in cards and embedded systems.[20] For hub support in UAS environments, tiered USB 3.0 hubs must preserve streams across downstream ports to maintain protocol integrity in multi-device setups.[21] Chips like the ASMedia ASM1142, a USB 3.1 xHCI host controller, facilitate UAS in external enclosures by supporting streams and high-bandwidth transfers.[22] The VIA VL812 USB 3.0 hub controller similarly enables UAS compatibility in powered hubs, ensuring streams propagation for attached storage devices.[23] On USB 2.0 hosts lacking xHCI and streams, UAS devices automatically degrade to Bulk-Only Transport (BOT) behavior for basic compatibility, limiting performance to USB 2.0 speeds and sequential operations.[24] Early Intel Platform Controller Hubs (PCH), such as Panther Point in the 7 Series, often required firmware updates to achieve full UAS functionality, addressing initial streams handling inconsistencies. A key challenge in multi-tier hub configurations involves power delivery and enumeration quirks, where insufficient hub power budgeting or delayed device recognition can disrupt UAS streams, leading to fallback modes or instability; these issues are largely resolved in USB 3.2 controllers through improved power management and faster enumeration protocols.[25] As of 2025, UAS support is widespread in USB4 hosts, including Intel's Thunderbolt 4 implementations, which maintain backward compatibility with USB 3.2 protocols and streams for enhanced storage performance.[26]Storage Device Implementations
USB Attached SCSI (UAS) implementations in storage devices primarily rely on bridge controllers to translate between USB interfaces and internal storage protocols such as SATA or NVMe, enabling efficient command queuing and bidirectional data streams for external hard drives, SSDs, and enclosures. These bridges are essential for achieving the performance benefits of UAS over legacy Bulk-Only Transport (BOT), including reduced overhead and higher throughput. Key bridge chips include the ASMedia ASM1153, a third-generation USB 3.0 to SATA bridge that supports UAS specification revision 1.0, facilitating seamless integration in external storage solutions with features like TRIM command passthrough and low-power modes for portable devices.[27] Similarly, VIA Labs' VL711 provides a low-power USB 3.0 to SATA 6 Gb/s bridge with native UAS compatibility, allowing external enclosures to sustain near-native SATA speeds up to 5 Gbps while supporting UASP for enhanced transfer efficiency in multi-device setups.[28] For integrated flash-based storage, Silicon Motion's SM232x series, such as the SM2320 controller, delivers UAS-optimized performance in portable SSDs and USB drives, achieving sequential read speeds of up to 2 GB/s over USB 3.2 Gen 2x2 interfaces through direct controller integration without additional bridges.[29] Commercial enclosures and docks from vendors like Orico and Sabrent incorporate these UAS-capable bridges to support high-capacity drives. For instance, Orico's USB 3.2 SATA docking stations feature UASP for handling 2.5-inch and 3.5-inch HDDs/SSDs up to 18 TB, with aluminum alloy construction for heat dissipation during sustained transfers at USB 3.2 speeds. Sabrent's USB 3.1 Type-C docking stations similarly enable UASP, supporting drives up to 20 TB and delivering full 10 Gbps throughput when paired with compatible hosts, ideal for data migration and backups.[30] Portable SSDs exemplify proprietary UAS implementations; the Samsung T7 series employs a custom USB-to-NVMe bridge that adheres to UAS protocols, providing read/write speeds up to 1,050 MB/s via USB 3.2 Gen 2 while maintaining compatibility across operating systems.[31] UAS devices identify their protocol support in USB descriptors by setting the bInterfaceProtocol field to 98 (0x62 in hexadecimal), signaling to the host the availability of SCSI command transport over USB streams.[32] To ensure broad compatibility, many storage devices incorporate dual-mode firmware that defaults to BOT if the host lacks UAS support, allowing fallback operation without performance loss on older systems.[15] However, USB thumb drives often face limitations from their embedded flash controllers, which cap UAS benefits due to inherent NAND wear-leveling overhead and lower peak bandwidth, typically restricting speeds to 300-500 MB/s despite protocol support.[33] By 2025, advancements in USB4-compatible NVMe bridges like the ASMedia ASM2364 support UAS, enabling high-speed presentation of NVMe SSDs as SCSI devices over USB, bridging USB 20 Gbps to PCIe Gen 3x4 interfaces and achieving up to 2,000 MB/s in real-world external SSD applications.[34][35]Software Support
Operating System Compatibility
USB Attached SCSI (UAS) enjoys broad compatibility across major operating systems, enabling efficient USB mass storage operations through standardized protocol support. In Microsoft Windows, native UAS integration began with Windows 8 in 2012, utilizing the Uaspstor.sys driver to handle UAS devices for improved performance over the legacy Bulk-Only Transport (BOT) protocol.[19] This support extends fully to Windows 10 and 11, encompassing USB 4 capabilities for compatible hardware, while systems automatically fall back to the BOT-compatible usb-storage driver (Usbstor.sys) for UAS-incompatible devices to maintain broad device interoperability.[19][36] Linux kernels have supported UAS since version 3.15, released in 2014, with the usb-storage module incorporating quirks to address hardware-specific issues and ensure stable operation. Enhanced UAS features, including partial optimizations for USB 3.x streams, appear in kernel 6.x series from 2023 onward, building on foundational support for modern USB storage. Major distributions, such as Ubuntu 20.04 and later, enable UAS by default for qualifying USB 3.0+ devices, simplifying deployment without manual configuration.[37] Apple's macOS introduced UAS support starting with version 10.8 Mountain Lion in 2012, optimizing for file systems like APFS and NTFS to leverage UAS for faster external storage access.[38] In macOS Sonoma (version 14.x, released in 2023), enhancements for USB 4 further refine UAS handling, supporting higher-speed transfers on compatible Thunderbolt/USB 4 ports. Among other platforms, Android has provided UAS compatibility for USB On-The-Go (OTG) host mode since version 4.4 KitKat in 2013, allowing external UAS storage devices to connect as mass storage peripherals. In contrast, iOS remains limited to BOT for external USB storage interactions, relying on the Files app for exFAT and FAT32 support without native UAS protocol adoption. FreeBSD, as of 2025, lacks native UAS implementation and defaults to the umass driver for BOT-based USB mass storage, potentially requiring quirks for stability with newer enclosures. Cross-operating system detection of UAS devices is facilitated by standardized USB descriptors, specifically the Mass Storage class (bInterfaceClass 08) with UAS subclass (bInterfaceSubClass 06) and protocol (bInterfaceProtocol 62), ensuring consistent enumeration regardless of the host OS.[17]Driver and Kernel Integration
In Microsoft Windows, the UAS protocol is implemented via the Uaspstor.sys driver, which is responsible for parsing Information Units (IUs) and managing bulk streams for efficient data transfer. This driver operates as a SCSI miniport within the Storport storage port model, enabling seamless integration with the Windows storage stack for handling SCSI commands over USB.[39] Linux supports UAS through the dedicateduas kernel module, which serves as the backend for high-performance USB storage devices within the broader usb-storage subsystem. The usb-storage module incorporates device-specific quirks to address compatibility issues, such as disabling UAS and falling back to the Bulk-Only Transport (BOT) protocol for problematic hardware like JMicron USB-to-SATA bridges (e.g., JMS56x series with vendor ID 152d:9561). These quirks mitigate errors arising from incomplete or mismatched firmware implementations on certain enclosures. For user-space applications requiring direct access to UAS devices, the libusb library provides a portable interface to interact with USB endpoints without kernel-level privileges. Debugging UAS integration in Linux often involves examining kernel logs via the dmesg command to identify fallback events or error conditions.[40]
On macOS, UAS functionality is handled by extensions within the IOUSBHostFamily kernel framework, which manages USB device attachment and protocol negotiation. Support for UAS, indicated by the presence of "IOUSBAttachedSCSI" in system reports, has been available since OS X 10.8 Mountain Lion, with progressive enhancements in subsequent releases.[41]
Common integration challenges across operating systems stem from firmware mismatches between UAS-capable hosts and devices, often resulting in automatic fallback to the legacy BOT protocol to ensure basic functionality. In Windows, such issues can be diagnosed through Event Viewer USB logs or Device Manager error codes related to Uaspstor.sys failures.[39]
Open-source implementations like FreeBSD's umass(4) driver provide USB mass storage support but lack native UAS integration, relying instead on BOT emulation and necessitating third-party ports for full UAS compatibility—none of which have achieved mainstream adoption as of 2025.[42]