USB Storage: обобщение информации
Спецификации USB Mass Storage Class поддерживаются и публикуются USB Mass Storage Class Working Group (CWG). Они включают в себя следующие стандарты:
Примечание 1: спецификация транспорта Control/Bulk/Interrupt (CBI) предназначена только для полноскоростных дисководов.
Интерфейс устройства USB Mass Storage Class содержит поле bInterfaceSubClass, которое указывает на набор команд промышленного стандарта, передаваемых через интерфейс Mass Storage Class:
Subclass | Command Block Specification | Comment |
---|---|---|
00h | SCSI command set not reported | De facto use |
01h | RBC | Allocated by USB-IF for RBC. RBC is defined outside of USB. |
02h | MMC-5 (ATAPI) | Allocated by USB-IF for MMC-5. MMC-5 is defined outside of USB. |
03h | Obsolete | Was QIC-157 |
04h | UFI | Specifies how to interface Floppy Disk Drives to USB |
05h | Obsolete | Was SFF-8070i |
06h | SCSI transparent command set | Allocated by USB-IF for SCSI. SCSI standards are defined outside of USB. |
07h | LSD FS | LSDFS specifies how host has to negotiate access before trying SCSI |
08h | IEEE 1667 | Allocated by USB-IF for IEEE 1667. IEEE 1667 is defined outside of USB. |
09h–FEh | Reserved | Reserved |
FFh | Specific to device vendor | De facto use |
Интерфейс устройства USB Mass Storage Class также содержит поле bInterfaceProtocol, которое указывает на поддерживаемый протокол передачи:
bInterfaceProtocol | Protocol Implementation | Comment |
---|---|---|
00h | CBI (with command completion interrupt) | USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport |
01h | CBI (with no command completion interrupt) | USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport |
02h–4Fh | Reserved | Reserved |
50h | BBB | USB Mass Storage Class Bulk-Only (BBB) Transport |
51h–61h | Reserved | Reserved |
62h | UAS | Allocated by USB-IF for UAS. UAS is defined outside of USB. |
63h–FEh | Reserved | Reserved |
FFh | Specific to device vendor | De facto use |
В USB определены запросы управления USB, включая поле bRequest. Это тип команды, которую отправляет USB при отправке команды:
bRequest | Name | Comment |
---|---|---|
00h | Accept Device-Specific Command (ADSC) | Assigned in context by USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport, also aliases core USB request 00h Get Status. |
01h–0Dh | Reserved | Aliases of core USB bRequest codes |
0Eh–FBh | Reserved | Reserved |
FCh | Get Requests | Assigned by Lockable Storage Devices Feature Specification |
FDh | Put Requests | Assigned by Lockable Storage Devices Feature Specification |
FEh | Get Max LUN (GML) | Assigned by USB Mass Storage Class Bulk-Only (BBB) Transport |
FFh | Bulk-Only Mass Storage Reset (BOMSR) | Assigned by USB Mass Storage Class Bulk-Only (BBB) Transport |
Этот стандарт описывает Bulk-Only Transport, который передаёт команды, данные и состояние только через Bulk endpoints.
Этот запрос используется для reset устройства массового хранения данных и связанного с ним интерфейса. Этот class-specific запрос подготавливает устройство к следующему CBW. Хост отправляет этот запрос на устройство через стандартный pipe. Устройство сохраняет значение bulk data toggle и статус STALL для конечной точки. Устройство будет NAK состояние этапа запроса устройства до тех пор, пока не завершится Bulk-Only Mass Storage Reset. Хосту необходимо отправить запрос устройства на стандартный pipe:
bmRequestType | bRequest | wValue | wIndex | wLength | Data |
---|---|---|---|---|---|
00100001b | 11111111b | 0000h | Interface | 0000h | none |
Получает количество логических единиц (logical units numbers), поддерживаемых устройством. LUN будут последовательно пронумерованы от 0 до 15 (Fh). Хосту нужно отправить запрос устройства на стандартный pipe:
bmRequestType | bRequest | wValue | wIndex | wLength | Data |
---|---|---|---|---|---|
10100001b | 11111110b | 0000h | Interface | 0001h | 1 byte *u8 iManufacturer; / 描述厂商字符串的索引 */ |
**u8 iProduct; /* 描述产品字符串的索引 */
**u8 iSerialNumber; /* 设备序列号字符串的索引 */**
**u8 bNumConfigurations;/* 可能的配置数量 */**
} attribute ((packed));
#define USB_DT_DEVICE_SIZE 18
**Где bDescriptorType — это тип дескриптора, его значение можно найти в таблице ниже:**
| Тип | Дескриптор | Значение bDescriptorType |
| --- | --- | --- |
| Стандартный дескриптор | Дескриптор устройства (Device Descriptor) | 0x01 |
| Дескриптор конфигурации (Configuration Descriptor) | 0x02 |
| Строковый дескриптор (String Descriptor) | 0x03 |
| Интерфейсный дескриптор (Interface Descriptor) | 0x04 |
| Конечный дескриптор (EndPont Descriptor) | 0x05 |
| Класс дескриптора | Дескриптор концентратора (Hub Descriptor) | 0x29 |
| Человеко-машинный интерфейс (HID) | 0x21 |
| Определённый производителем дескриптор | | 0xFF
**Значение bDeviceClass можно найти в следующей таблице:**
| Десятичное число | Шестнадцатеричное число | Описание
| --- | --- | ---
| 0 | 0x00 | Значение класса, предоставляемое в интерфейсном дескрипторе
| 2 | 0x02 | Коммуникационный класс
| 9 | 0x09 | Класс концентратора
| 220 | 0xDC | Класс устройства для диагностики
| 224 | 0xE0 | Класс беспроводного коммуникационного устройства
| 255 | 0xFF | Определённый производителем класс устройства
### 2.2 Дескриптор конфигурации
Дескриптор конфигурации включает в себя длину дескриптора (сумму длин всех интерфейсных дескрипторов и конечных дескрипторов, принадлежащих этому дескриптору конфигурации), способ питания (автономное питание/питание от шины), максимальную потребляемую мощность и т. д.
```
/* USB_DT_CONFIG: Configuration descriptor information.
*
* USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the
* descriptor type is different. Highspeed-capable devices can look
* different depending on what speed they're currently running. Only
* devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG
* descriptors.
*/
struct usb_config_descriptor {
__u8 bLength; /* 长度 */
__u8 bDescriptorType; /* 类型编号 */
__le16 wTotalLength; /* 返回所有数据的大小 */
__u8 bNumInterfaces; /* 支持的接口数 */
__u8 bConfigurationValue; /* Set_Configuration命令需要的参数值 */
__u8 iConfiguration; /* 该配置的字符串索引值 */
__u8 bmAttributes; /* 供电模式的选择 */
__u8 bMaxPower; /* 从总线提取的最大电流 */
} __attribute__ ((packed));
#define USB_DT_CONFIG_SIZE 9
```
### 2.3 Интерфейсный дескриптор
Дескриптор конфигурации содержит один или несколько интерфейсных дескрипторов. Здесь «интерфейс» не относится к физическому интерфейсу, здесь он называется «функцией», что легче понять. Например, устройство имеет функцию записи звука и функцию динамика, тогда у этого устройства есть как минимум два «интерфейса».
```
/* USB_DT_INTERFACE: Interface descriptor */
struct usb_interface_descriptor {
__u8 bLength; /* 长度 */
__u8 bDescriptorType; /* 类型 */
__u8 bInterfaceNumber; /* 接口编号 */
__u8 bAlternateSetting; /* 备用接口描述符编号 */
__u8 bNumEndpoints; /* 该接口使用的端点数,不包括端点0 */
__u8 bInterfaceClass; /* 接口类型 */
__u8 bInterfaceSubClass; /* 子类型 */
__u8 bInterfaceProtocol; /* 所遵循的协议 */
__u8 iInterface; /* 该接口的字符串索引值 */
} __attribute__ ((packed));
#define USB_DT_INTERFACE_SIZE 9
```
Для поля **bInterfaceClass** указывается класс интерфейса, который USB-протокол классифицирует по функциям на разные классы, конкретное значение показано в следующей таблице:
| Шестнадцатеричный код | Категория
| --- | ---
| 0x01 | Аудио
| 0x02 | CDC Control
| 0x03 | Человеко-машинный интерфейс (HID)
| 0x05 | Физический
| 0x06 | Изображение
| 0x07 | Принтер
| **0x08 | Большое хранилище данных**
| 0x09 | Концентратор
| 0x0A | CDC Data
| 0x0B | Смарт-карта
| 0x0D | Безопасность
| 0xDC | Диагностическое устройство
| 0xE0 | Беспроводной контроллер
| 0xFE | Специфическое приложение (включая мост инфракрасного излучения и т.д.)
| 0xFF | Определённое производителем устройство
**Примечание 7**: U-диск **bInterfaceProtocol** фиксирован на **0x50**.
### 2.4 Конечный дескриптор
Конечная точка — это логический интерфейс между устройством и хостом для передачи данных, за исключением контрольной конечной точки (обычно только одно устройство имеет одну контрольную конечную точку), которая является двунаправленным портом, остальные являются однонаправленными. Конечный дескриптор описывает тип передачи данных, направление передачи, размер пакета данных и номер конечной точки (также называемый адресом конечной точки) и т. д.
```
/* USB_DT_ENDPOINT: Endpoint descriptor */
struct usb_endpoint_descriptor {
__u8 bLength; /* 长度 */
__u8 bDescriptorType; /* 类型 */
__u8 bEndpointAddress; /* 地址:[0:3]端点号,[7]方向(0-输出,1-输入) */
__u8 bmAttributes; /* 属性:[0:1](00-控制,01-同步,02-批量,03-中断) */
__le16 wMaxPacketSize; /* 本端点接收或发送的最大信息包的大小 */
__u8 bInterval; /* 轮询数据传送端点的时间间隔:同步-1,中断-(1-255) */
/* NOTE: these two are _only_ in audio endpoints. */
/* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
__u8 bRefresh;
__u8 bSynchAddress;
} __attribute__ ((packed));
#define USB_DT_ENDPOINT_SIZE 7
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
```
**Примечание 8**: U-диск **bmAttributes** фиксирован на 0x02. 64 /* Максимальный размер пакета для конечной точки 0 */
idVendor 0x0930 Toshiba Corp.
idProduct 0x1408
bcdDevice 0.01
iManufacturer 1 TOSHIBA
iProduct 2 USB FLASH DRIVE
iSerial 3 7427EAB351F9C290C0020888
bNumConfigurations 1 /* Количество дескрипторов конфигурации */
Дескриптор конфигурации:
bLength 9
bDescriptorType 2 /* Тип дескриптора конфигурации */
wTotalLength 32 /* Общая длина возвращаемых данных конфигурации, включая последующие дескрипторы: 9 + 9 + 7 + 7 */
bNumInterfaces 1 /* Количество интерфейсов в этой конфигурации */
bConfigurationValue 1 /* Используется как параметр при выборе этой конфигурации в SetConfiguration() */
iConfiguration 0
bmAttributes 0x80 /* Бит 7 зарезервирован и должен быть установлен в единицу по историческим причинам. */
(Питание от шины)
MaxPower 300mA
Дескриптор интерфейса:
bLength 9
bDescriptorType 4 /* Тип дескриптора интерфейса */
bInterfaceNumber 0 /* Номер этого интерфейса */
bAlternateSetting 0 /* Номер альтернативного дескриптора интерфейса */
bNumEndpoints 2 /* Количество конечных точек в этом интерфейсе */
bInterfaceClass 8 Mass Storage /* Класс MASS STORAGE */
bInterfaceSubClass 6 SCSI /* Подкласс интерфейса */
bInterfaceProtocol 80 Bulk-Only /* Транспорт BULK-ONLY */
iInterface 0
Дескриптор конечной точки:
bLength 7
bDescriptorType 5 /* Тип дескриптора конечной точки */
bEndpointAddress 0x81 EP 1 IN /* [3..0] - номер конечной точки, [7] - In */
bmAttributes 2 /* Свойства конечной точки: это массовая конечная точка */
Тип передачи Bulk
Синхронный тип None
Использование типа Данные
wMaxPacketSize 0x0200 1x 512 bytes /* Максимальный размер пакета */
bInterval 255
Дескриптор конечной точки:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT /* Конечная точка 2, направление Out */
bmAttributes 2
Тип передачи Bulk
Синхронный тип None
Использование типа Данные
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 255
Дескриптор хранилища двоичных объектов:
bLength 5
bDescriptorType 15
wTotalLength 22
bNumDeviceCaps 2
USB 2.0 Extension Device Capability:
bLength 7
bDescriptorType 16
bDevCapabilityType 2
bmAttributes 0x00000006
Поддерживается управление питанием (LPM)
SuperSpeed USB Device Capability:
bLength 10
bDescriptorType 16
bDevCapabilityType 3
bmAttributes 0x00
wSpeedsSupported 0x000e
Устройство может работать на полной скорости (12 Мбит/с)
Устройство может работать на высокой скорости (480 Мбит/с)
Устройство может работать на сверхвысокой скорости (5 Гбит/с)
bFunctionalitySupport 2
Минимальная полностью функциональная скорость устройства — высокая скорость (480 Мбит/с)
bU1DevExitLat 10 микросекунд
bU2DevExitLat 2047 микросекунд
Состояние устройства: 0x0000
(Питание от шины)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )