Usb msd

Незрозуміло, звичайно, куди дивилася USB-IF (при західній-то любові до всякого роду прав і копірайт), але те, що це не перша така книга, що потрапила мені в руки, може говорити про якусь системі. Можливо це спосіб дати заробити учасникам робочих груп або що-небудь подібне. Але від цього не легше.

Дана глава описує клас накопичувачів даних і представляє код для пристрою, який демонструє обмін між керуючою системою і пристроєм. [* - ні, не демонструє, так як книжковий "код" є прямим перекладом структур USB і SCSI з таблиць на природній мові в вихідні на мові Сі. Якщо ви не можете зробити такий переклад самі, то пошукайте книгу в мережі. ]


Загальні вимоги

На додаток до сумісності зі специфікацією USB 2.0 накопичувач даних повинен відповідати вимогам класу "накопичувач даних", що включають як вимоги до апаратної сумісності, так і підтримки програмних протоколів.


специфікації

Клас "накопичувач даних" звертається до декількох документах. "Огляд специфікацій" (Specification Overview) і "Передача неструктурованих даних" (Bulk-Only Transport) стосуються майже всіх пристроїв. Документ "Вимоги до завантажувальним накопичувачів" (Bootability) відноситься тільки до пристроїв, з яких може запускатися операційна система. Два додаткових документа - "Control / Bulk / Interrupt (CBI) обмін" і "Технічна специфікація команд UFI" стосуються тільки деяких приводів гнучких дисків.

Крім того, накопичувачі повинні підтримувати стандартні набори командних блоків для обміну даними, управління пристроєм і читання інформації про стан. Командні блоки докладно описуються в частині 6.


Запити накопичувачів даних

У протоколі передачі неструктурованих даних (bulk-only) визначені два керуючих запиту. "Bulk Only Mass Storage Reset" (Скидання накопичувача даних) наказує пристрою бути готовим до прийому нового командного блоку. "Get Max LUN" запитує найбільший номер підтримуваного пристроєм логічного накопичувача. В операційній системі Windows кожному логічному накопичувача або розділу відповідає своя буква диска. Пристрій з єдиним логічним накопичувачем має повертати нуль або переходити в стан зупинки (stall). Пристрій з двома логічними накопичувачами "LUN 0" і "LUN 1" повертає "1". Максимальне значення - "15". Весь інший обмін йде через передачу неструктурованих даних (bulk).

У CBI-протоколі (control / bulk / interrupt) визначено один керуючий запит - "прийняти залежить від пристрою команду" (Accept Device-Specific Command - ADSC). На етапі пересилання даних передається власне команда. Пристрій може використовувати обмін по перериванню для повідомлення про завершення приписам чинного.

Центральна система може використовувати керуючі передачі для виведення кінцевих точок зі стану блокування (halt), для чого слід послати пристрою стандартний керуючий USB запит "Clear Feature (ENDPOINT_HALT)".