This post has been republished via RSS; it originally appeared at: Microsoft USB Blog articles.
First published on MSDN on Jul 21, 2011Hi, I’m Ram Valliyappan and I am a Program Manager on the Windows team responsible for USB mass storage drivers. We often get asked the following questions:
· What is USB-IF compliance for USB mass storage devices?
· What is SCSI compliance for USB mass storage devices?
· Why is compliance for USB mass storage devices important?
I will answer these questions in this post.
What is USB-IF compliance for USB mass storage devices?
It is very important for USB devices to be compliant with the USB specification. This allows the device to interoperate on a Windows platform and deliver the best user experience.
The USB-IF compliance is certification program that is defined by the USB standards body. This program verifies that a device complies with the interfaces that are defined by the USB specification. If a USB device passes the compliance tests, the device is added to the Integrators List that is published by the USB standards body. Also, the independent hardware vendor (IHV) can license the USB-IF Logo for devices that are compliant with the USB-IF compliance program.
For more information, please refer to the USB-IF Compliance program .
What is SCSI compliance for USB mass storage devices?
SCSI compliance is verified through a set of Windows Logo Kit (WLK) tests. These tests verify that a block storage device is compliant with SCSI standards and specifications, such as the SCSI Primary Commands (SPC) and SCSI Block Commands (SBC). For more information about the SCI compliance tests, please refer to the MSDN documentation on SCSI Compliance .
The Windows storage driver stack is developed by using industry standards and expects device to be compliant to same standards. With each new Windows release, the driver stack has expanded its dependency on SCSI commands. Because of this, it is extremely important that the storage device provides the SCSI functionality that the driver stack requires. As a result, the WLK SCSI compliance tests are revised with each new Windows release to verify this requirement with storage devices.
To guarantee that USB devices can interoperate with the Windows storage driver stack and deliver the best user experience, we introduced the SCSI compliance tests for USB in the WLK 1.6. For more information about these tests, please refer to the MSDN documentation on the USB 2.0 and 3.0 SCSI Compliance test . For more information about the WLK and how to download WLK 1.6, please refer to the Windows Logo Kit .
The following provides an overview of the SCSI commands that are verified through the Windows SCSI compliance WLK tests:
SCSI command |
Industry specification requirement |
WLK requirement |
Logo test policy (USB Disks) |
Logo test policy (USB Card Readers) |
Reference |
Inquiry |
Mandatory |
Mandatory |
Required |
Required |
Required by industry standards |
Maintenance IN |
Optional |
Optional |
Optional |
Optional |
Windows recommended |
Mode Select 6 |
Optional |
Mandatory |
Required |
Required |
Windows required |
Mode Select 10 |
Optional |
Optional |
Optional |
Not Required |
Windows recommended |
Mode Sense 6 |
Optional |
Mandatory |
Required |
Required |
Windows required |
Mode Sense 10 |
Optional |
Optional |
Optional |
Not Required |
Windows recommended |
Receive Diagnostic Results - ENCSERV = 1 |
Mandatory |
Mandatory |
Required |
Required |
Required by industry standards |
Receive Diagnostic Results - ENCSERV = 0 |
Optional |
Optional |
Optional |
Optional |
Windows recommended |
Report LUNS - UAS |
Mandatory |
Mandatory |
Required |
Required |
Required by industry standards |
Report LUNS - BOT |
Mandatory |
Optional |
Optional |
Optional |
Windows recommended |
Request Sense |
Mandatory |
Mandatory |
Required |
Required |
Required by industry standards |
Security Protocol IN |
Optional |
Mandatory |
Required |
Optional |
Windows required |
Security Protocol OUT |
Optional |
Mandatory |
Required |
Optional |
Windows required |
Send Diagnostic |
Mandatory |
Mandatory |
Required |
Not Required |
Required by industry standards |
Test Unit Ready |
Mandatory |
Mandatory |
Required |
Required |
Required by industry standards |
Format Unit |
Mandatory |
Mandatory |
Required |
Required |
Required by industry standards |
Prevent Allow Medium Removal |
Optional |
Mandatory |
Required |
Required |
Windows required |
Read 6 |
Mandatory |
Optional |
Optional |
Optional |
Windows Recommended |
Read 10 |
Mandatory |
Mandatory |
Required |
Required |
Required by industry standards |
Read 16 |
Optional |
Optional |
Optional |
Optional |
Windows recommended |
Read Capacity 10 |
Mandatory |
Mandatory |
Required |
Required |
Required by industry standards |
Read Capacity 16 |
Optional |
Mandatory |
Optional |
Required |
Windows required |
Start Stop Unit |
Optional |
Mandatory |
Required |
Required |
Windows required |
Synchronize cache |
Optional |
Mandatory |
Required |
Not Required |
Windows required |
Write 6 |
Optional |
Optional |
Optional |
Optional |
Windows recommended |
Write 10 |
Optional |
Mandatory |
Required |
Required |
Windows required |
Write 16 |
Optional |
Optional |
Optional |
Optional |
Windows recommended |
If you are qualifying a USB Card Reader device, then please read the following to make sure you support the commands as required for Windows:
SCSI Commands |
Test Details |
Brief Description |
Inquiry (REQUIRED) |
Basic verification test |
Expect GOOD status and data of size
|
|
Extended verification test |
When allocation length is set to more
|
|
PageCodeEVPD test |
PC=non-zero; EVPD=0; expect CHECK
|
|
RetrieveData Test |
Checking if we can retrieve standard
|
|
CheckDataSize Test |
Standard INQUIRY data shall contain at
|
|
DevType Test |
Expect direct access device |
|
PeripheralQualifier Test |
Peripheral qualifier field == 0. |
|
Version Test |
USB3: SPC4; USB2: Don’t care |
|
RespDataFormat Test |
RESPONSE DATA FORMAT == 2 |
|
AdditionalLength Test |
Additional Length field == Total Data
|
|
VendorID Test |
VENDOR IDENTIFICATION field contains
|
|
ProductID Test |
PRODUCT IDENTIFICATION field contains
|
|
ProductRevLevel Test |
PRODUCT REVISION LEVEL field contains
|
|
VerDescr Test |
USB2BOT: no version desc USB2UAS: UAS version desc USB3BOT: SPC, SBC version desc USB3UAS: SPC, SBC, UAS version desc |
|
CMDQUE Test |
UAS: CMDQUE=1, BOT: CMDQUE=0 |
|
RMB Test |
RMB=1 |
Security protocol IN/OUT (IF-IMPLEMENTED) |
Security Protocol Out Basic Test |
Expect GOOD/CHECK_CONDITION |
|
Security Protocol IN Basic Test |
Expect GOOD/CHECK_CONDITION |
Report supported OP codes (IF-IMPLEMENTED) |
ClearRTCD Test |
Expect GOOD/CHECK_CONDITION |
|
SetRTCD Test |
Expect GOOD/CHECK_CONDITION |
Read Capacity 10 (REQUIRED) |
Basic Verification Test |
The device must return GOOD (0x0) SCSI
|
Request Sense (REQUIRED) |
Support Test |
Expect GOOD status. |
|
Response code test |
Expect valid response code |
|
Sense data length test |
Additional Sense Length <= Sense
|
Test Unit Ready (REQUIRED) |
Basic verification test |
Expect GOOD status |
Start Stop Unit (REQUIRED) |
Spin down IMMED=0 test |
Spin down drive |
|
Spin up IMMED=0 test |
Spin up drive |
|
Spin down IMMED=1 (optional) |
Spin down drive |
|
Spin up IMMED=1 (optional) |
Spin up drive |
|
Unload test (optional) |
Unload medium |
Read 6 (IF-IMPLEMENTED) |
Basic verification test |
Expect GOOD status |
|
Sequential test |
The device must read 1000 sequential
|
|
Random test |
The device must read 1000 random blocks
|
|
Disk cached cleared test |
Read 12 MB data, read 12 MB random data
|
Read 10 (REQUIRED) |
Basic verification test |
Expect GOOD status |
|
Read sequential test |
The device must read 1000 sequential
|
|
Read random test |
The device must read 1000 random blocks
|
|
Disk cached cleared test |
Read 12 MB data, read 12 MB random data
|
Write 6 (IF-IMPLEMENTED) |
Basic verification test |
Expect GOOD status |
|
Sequential test |
The command writes 1000 sequential
|
|
Random test |
The command writes 1000 random blocks
|
Write 10 (REQUIRED) |
Basic verification test |
Expect GOOD status |
|
Sequential test |
The command writes 1000 sequential
|
|
Random test |
The command writes 1000 random blocks
|
Mode Sense 6 (REQUIRED) |
Basic verification test |
Expect CHECK CONDITION |
|
Check size test |
Data Transfer Length >= 4 bytes |
|
Check mode parameter header test |
ModeDataLength = Data Transfer Length -
|
|
DBD test |
Testing to make sure that, when DBD bit
|
|
Check data length test |
Testing that new data length should
|
|
Compare data test |
Testing that page data is the same
|
Report LUNS
(MANDATORY for UAS, IF-IMPLEMENTED for
|
Basic verification test |
Expect GOOD Status |
|
LUNO test (only UAS) |
The device must return GOOD (0x0) SCSI
|
|
Data valid test (only UAS) |
Each reported LUN uses single level
|
Read Capacity 16 (Required for USB3) |
Invalid service action test |
Send RC16 with Invalid SA, get
|
|
Basic verification test |
Send RC16 and get GOOD Status |
|
Capacity test |
Send a READ CAPACITY command to check
|
|
Lowest Aligned LBA test |
Verify if the lowest aligned LBA is not
|
Why is compliance for USB mass storage devices important?
With millions of USB mass storage devices in the market, it is extremely important that these devices comply with a common set of standards. Compliant USB mass storage devices deliver the best user experience when they are connected across different Windows platforms.
To verify compliance, we require USB mass storage devices to pass the USB-IF compliance and WLK programs. This guarantees that Windows users get the maximum value out with their USB mass storage devices.
Thanks for reading! In our next blog, we will talk about common device failures, how to avoid them and make device interoperate with Windows well.
Ram Valliyappan (USB Mass Storage)