Прокачиваем usb mass storage device на stm32f103 с помощью freertos и dma

Поддержка операционной системы

Большинство основных операционных систем включают поддержку запоминающих устройств USB; поддержка более старых систем обычно доступна через исправления.

Майкрософт Виндоус

Microsoft Windows поддерживает MSC с Windows 2000. Поддержка USB от Microsoft в Windows до Windows 95 и Windows NT 4.0 отсутствует . Windows 95 OSR2.1, обновление операционной системы, имеет ограниченную поддержку USB. В то время Microsoft не производила универсального драйвера USB-накопителя (в том числе для Windows 98 ), и для каждого типа USB-накопителя требовался драйвер для конкретного устройства. Сторонние бесплатные драйверы стали доступны для Windows 98 и Windows 98SE, а сторонние драйверы также доступны для Windows NT 4.0. Windows 2000 поддерживает (через общий драйвер) стандартные запоминающие USB-устройства; Windows Me и все более поздние версии Windows также включают поддержку.

Windows Mobile поддерживает доступ к большинству запоминающих устройств USB, отформатированных с помощью FAT, на устройствах с USB Host. Однако портативные устройства обычно не могут обеспечить достаточную мощность для корпусов жестких дисков (2,5-дюймовый (64 мм) жесткий диск обычно требует максимум 2,5  Вт в спецификации USB) без концентратора USB с автономным питанием . Устройство Windows Mobile не может отображать свою файловую систему как запоминающее устройство, если разработчик устройства не добавит эту функциональность. Однако сторонние приложения добавляют эмуляцию MSC к большинству устройств WM (коммерческий Softick CardExport и бесплатное хранилище WM5torage). Из-за проблем с файловой системой обычно можно экспортировать только карты памяти (не внутреннюю память); см. ниже.

Функция автозапуска Windows работала со всеми съемными носителями, позволяя запоминающим устройствам USB стать порталом для компьютерных вирусов . Начиная с Windows 7 , Microsoft ограничила автозапуск компакт-дисками и DVD-приводами, обновив предыдущие версии Windows.

MS-DOS

Ни MS-DOS, ни большинство совместимых операционных систем не поддерживают USB. Универсальные драйверы сторонних производителей, такие как Duse, USBASPI и DOSUSB, доступны для поддержки запоминающих устройств USB. FreeDOS поддерживает USB-накопители в качестве интерфейса расширенного программирования SCSI (ASPI).

Классическая Mac OS и macOS

Apple Computer «s Mac OS 9 и MacOS поддержка хранения USB массы; Mac OS 8.5.1 поддерживала запоминающее устройство USB через дополнительный драйвер.

Linux

Linux ядро поддерживает USB запоминающих устройств , так как его серии 2.4 (2001) и портировать на ядре 2.2.18 было сделано. В Linux существует больше возможностей в дополнении к родовым драйверам для класса USB массового хранения устройства устройств, в том числе причуд, исправления ошибок и дополнительные функциональные возможности для устройств и контроллеров (производители с поддержкой функций , такими как ATA команда сквозной для ATA-USB мостов , который полезен для SMART или мониторинга температуры, управления ускорением и замедлением жестких дисков и других параметров). Это включает в себя определенную часть устройств на базе Android благодаря поддержке USB-OTG , поскольку Android использует ядро ​​Linux.

Другие системы, связанные с Unix

Solaris поддерживает устройства начиная с версии 2.8 (1998), NetBSD — с версии 1.5 (2000), FreeBSD — с версии 4.0 (2000), а OpenBSD — с версии 2.7 (2000). Цифровая UNIX (позже известная как Tru64 UNIX ) поддерживает USB и USB-устройства хранения данных начиная с версии 4.0E (1998). AIX поддерживает запоминающие USB-устройства начиная с версий 5.3 T9 и 6.1 T3; однако он плохо поддерживается и не имеет таких функций, как разделение на разделы и общая блокировка.

Игровые консоли и встраиваемые устройства

В Xbox 360 и PlayStation 3 поддерживает большинство запоминающих устройств для передачи данных средств массовой информации , таких как изображения и музыка. По состоянию на апрель 2010 года Xbox 360 (a) использовала запоминающее устройство для сохраненных игр, а PS3 позволяла передавать данные между устройствами на запоминающем устройстве. Независимые разработчики выпустили драйверы для TI-84 Plus и TI-84 Plus Silver Edition для доступа к USB-накопителям. В этих калькуляторах драйвер usb8x поддерживает приложение пользовательского интерфейса msd8x .

Использует

Доступ к экшн-камере осуществляется через класс запоминающих устройств.

К устройствам, подключенным к компьютерам через этот стандарт, относятся:

  • Внешние магнитные жесткие диски
  • Внешние оптические приводы, включая приводы для чтения и записи CD и DVD
  • Портативные устройства флэш-памяти
  • Твердотельные накопители
  • Переходники между стандартными картами флэш- памяти и USB-соединениями
  • Цифровые камеры
  • Цифровые аудио и портативные медиаплееры
  • Картридеры
  • КПК
  • Мобильные телефоны

Устройства, поддерживающие этот стандарт, известны как устройства MSC (Mass Storage Class). Хотя MSC — это оригинальное сокращение, UMS (Universal Mass Storage) также вошло в широкое употребление.

CDC — виртуальный COM порт

переехал на STM32 CubeCube для контроллеров серии STM32F1графического конфигуратора CubeMXusb in a nutshellна русском

bDeviceClass, bDeviceSubClass и bDeviceProtocol — описывают хосту что же это у нас за устройство такое, что оно умеет и какие драйвера нужно грузить. В данном случае тут сказано, что устройство у нас реализует Communication Device Class, а значит хосту нужно сделать виртуальный COM порт и связать его с этим устройством.
PID (Product ID) и VID (Vendor ID) — по этим полям хост различает разные устройства, подключенные к системе. Устройства при этом реализовывать одинаковый класс

Говорят для устройств продаваемых на рынке очень важно иметь уникальные VID/PID, но я не узнавал кто и где выдает эти ID-шники. Для домашнего устройства в единственном экземпляре достаточно значений по умолчанию.

  • wTotalLength — размер всего пакета дескрипторов для этой конфигурации — чтобы хост знал где заканчивается эта конфигурация и начинается следующая. Нам его нужно будет поправить, когда мы будем делать композитное устройство. Напомню, что все интерфейсы для этой конфигурации должны располагаться сплошным блоком, а значение wTotalLength определяет длину этого блока.
  • bNumInterfaces: класс Communication Device реализуется с помощью двух интерфейсов. Один для управления, другой для собственно пересылаемых данных.
  • bmAttributes и MaxPower указывает, что наше устройство имеет собственный источник питания, но при этом хочет потреблять до 100 мА от USB порта. С этими параметрами явно придется поиграться в будущем.
  • Class Driver (в случае CDC это файлы usbd_cdc и usbd_cdc_if): реализуют логику конкретного класса устройств — CDC для виртуального COM порта, MSC для устройств хранения данных, HID для клавиатур/мышек и всяких специфических устройств с пользовательским интерфейсом.
  • USB Core (usbd_core.c, usbd_ctlreq.c, usbd_ioreq.c): реализует общую логику работы всех классов USB устройств, умеет отдавать хосту запрашиваемые дескрипторы, обрабатывает запросы от хоста и настраивает USB устройство в целом. Также перенаправляет потоки данных из уровня драйвера класса в нижележащие уровни и наоборот.
  • USB HW Driver (usbd_conf.c): Вышележащие слои платформенно независимые и работают одинаковым образом для нескольких серий микроконтроллеров. В коде нет низкоуровневых вызовов функций конкретного микроконтроллера. Файл usbd_conf.c реализует прослойку между USB Core и HAL — библиотеке низкоуровневых драйверов для выбранного микроконтроллера. В основном тут живут простые врапперы, которые перенаправляют вызовы сверху вниз и коллбеки снизу вверх.
  • HAL (stm32f1xx_hal_pcd.c, stm32f1xx_ll_usb.c): занимаются общением с железом микроконтроллера, оперирует регистрами и отвечает на прерывания.

тут Virtual COM Port драйвер от STM

Можно ли восстановить работоспособность флешки?

Кому-то может показаться, что восстановление флешки – занятие бессмысленное. Накопители Transcend, Kingston, A-Data и других производителей наполнили рынок, сделав флэш память дешевой. Карты памяти и флешки объемом от 8 Gb до 32 Gb стоят не так дорого, чтобы нельзя было их спокойно выбросить и купить новые носители. Однако старые флешки и карты памяти Микро SD обычно вовсе не выбрасывают: они лежат в столе и ждут своего восстановления.

Но если накопитель просто не определяется или показывает неверный объем, то причиной такого поведения чаще всего является сбой прошивки контроллера. Как восстановить флешку после такого сбоя, мы подробно разберем ниже.

Когда применять методику прошивка контроллера флешки:

  • Нулевой объем флешки, не правильный объем (24816 КбМб) вместо нормального размера;
  • ННакопитель не определяется на разных ПК;
  • При подключении диска появляется ошибка «вставьте диск»;
  • Ошибка «Диск в устройстве не найден»;
  • Ошибка «Диск защищен от записи»;
  • Возникают ошибки чтения записи, и нет возможности копировать или записать данные на флешку. Может быть, что данные записываются, но не открываются с флешки;
  • При подключении к ПК флешка долго определяется с ошибками Ошибка «Код 10», Ошибка» Код 43» и подобное.

Переходим к подготовительным работам над флешкой для ее дальнейшей перепрошивки (прошивается сам контроллер). Будем считать, что мы определились с тем, что других вариантов, кроме как прошивка контроллера флешки у нас не осталось и это последний шанс на ремонт драгоценной флешки (дорога как память, большой объем, красивый корпус и т.д.)

Прошивка контроллера флешки (этапы работ):

1) Определение контроллера флешки

Тут у нас всего 2 варианта определения производителя и модели контроллера. Первый вариант самый банальный — вскрыть корпус (если это возможно конструктивно). Для этого нужно вскрыть корпус флешки и достать оттуда плату накопителя. В большей части случае все USB flash drive одинаковы внутри, за исключением монолитных флешек. Для примера я взял фотографию общего вида платы флешки и контроллера (на примере фотография флешки из свободных источников). Визуальный метод очень простой и самый точный, так как программы для определения pid&vid устройства не всегда точны. Если нет возможности посмотреть визуально на контроллер или есть затруднения в разборке корпуса, тогда нам прямой путь к программам на определение pid и vid флешки

Важно: в случаях когда, флешка не определяется на ПК узнать контроллер можно лишь путем визуального осмотра

Производители флешек.

В информационном потоке интернета каких только производителей не встретишь и у каждого из них найдется свой поклонник. Лично у меня заслуживают доверие такие производители как Adata и Kingston. Обе эти компании уже давно зарекомендовали себя как надежные производители USB-флеш накопителей. Компания Adata на официальном сайте размещают информацию о скорости чтения и записи для быстрых флешек.

Kingston в открытом доступе предоставляет документ DTFamily_RU.pdf в котором четко обозначил скорость своих накопителей. Документ с описанием новейших разработок флеш-накопителей время от времени обновляется.

Безусловно, есть и другие достойные производители, такие как Apacer, Silicon Power, Corsair, Transcend, TeamGroup, Sandisk, Lexar. У каждого покупателя есть свои лидеры, но опираться лишь на бренд, мне кажется не стоит. Так или иначе у каждого производителя есть качественная или менее качественная продукция, которая может работать годами или в самый не подходящий момент дать сбой.

В зависимости от серии, скорость чтения или записи может сильно отличаться. Но вместе с тем проверенные временем компании заслуживают доверие из-за честного отношения к потребителю и большой доли вероятности долгой работы носителя.

Некоторые сетуют на китайские подделки, мол из-за дешевых комплектующих и их некачественной пайки они быстро выходят из строя. Действительно, подделки брендов с исковерканными названиями из поднебесной парой разочаровывают нас, но справедливости ради стоит сказать, что встречается довольно таки качественная продукция. Поскольку качественные китайские флешки пока встречаются редко, то лучше отдать предпочтение в сторону приглянувшегося вам именитого бренда.

Флешка определяется, но её не видно в проводнике

Это значит, что раздался звук подключения флешки, появился значок сменного носителя в системном трее (возле часиков), но в «Мой компьютер» Flash-диск не обнаруживается. В самом простом случае, не присвоилась буква для диска флешки. Нажимаем «Win + R» и пишем:

diskmgmt.msc

Найдите флешку в окне «Управление дисками», проще всего её определить по размеру. Моя на 8ГБ, это реальных чуть меньше – 7,46 ГБ. У меня диск называется «SMBB», видно, что рядом с названием нет буквы диска. Все остальные диски с буквами, поэтому их видно в «Моём компьютере», а флешку – нет. При этом файловая система определилась, здесь это «FAT32».

Чтобы присвоить диску букву:

  • Нажимаем правой кнопкой и выбираем «Изменить букву диска или путь к диску»;
  • Нажимаем кнопку «Добавить»;
  • Выбираем любую букву диска, например «E»;
  • Проверяйте, ваша флешка теперь должна нормально отображаться в проводнике.

Если файловая система не FAT32 или NTFS, то ваша версия Windows не может с ней работать. Чтобы сохранить данные, нужно скопировать их на том компьютере, где флеш-накопитель нормально работает, затем можно отформатировать диск на новом компьютере. Если это не представляется возможным, то на любой случай есть решение в интернете.

Плохо если файловая система никак не определилась, отображается метка «Неизвестный» или «Не инициализирован» или один раздел в состоянии «Не распределен». Это значит что носитель придётся форматировать. Так бывает при системных сбоях во время записи данных, небезопасном извлечении флешки из ноутбука, неправильном или неполном форматировании, при вирусных атаках, на сбойной флеш-памяти. Для безопасного извлечения съёмного носителя нажимайте на значок устройства в системном трее и выбирайте «Извлечь Mass Storage Device (имя устройства)»:

Если информация, которая должна быть на накопителе, важна, то форматирование не подойдёт, сначала нужно попытаться восстановить документы. Для новой флешки Windows сама предложит отформатировать её, тогда вы увидите сообщение «Нужно отформатировать диск в дисководе … перед тем, как использовать его».

ФОРМАТИРОВАНИЕ УНИЧТОЖАЕТ ВСЕ ДАННЫЕ!

Чтобы отформатировать диск в окне «Управление дисками» нажимаем правой кнопкой по флешке и выбираем «Форматировать»:

  • Пишем любое название (метку тома);
  • Файловую систему рекомендую выставить NTFS, это более надёжная система, чем FAT32;
  • Размер кластера, Быстрое форматирование, Сжатие файлов и папок – оставляем по умолчанию.

Если увидите оповещение «Это активный раздел этого диска… данные будут удалены…», это значит, что ваша флешка была загрузочной, просто соглашайтесь. После форматирования проверьте, присвоилась ли буква диску.

Проблема с USB драйверами: чистим память Windows

Идём дальше. Диспетчер можно закрыть. А нам нужен файл INFCACHE.1. От глаз пользователя он скрыт. В нём и хранятся настройки. Вообще их несколько, но нам нужен пока один: тот что в

C:\Windows\System32\DriverStore

Чаще всего эта папка полупустая, и её содержимое выглядит примерно так:

Щёлкните правой мышкой и вызовите Свойства. Во вкладке Безопасность нужно усилить права на изменение файла для вашей учётной записи. Пусть это будет Полный доступ:

Примените изменения. А теперь файл INFCACHE.1 удалите. Сразу подключите ЛЮБОЕ ЗАВЕДОМО ИСПРАВНОЕ USB устройство. Система перезапишет новый файл INFCACHE.1, который появится после перезагрузки системы. Теперь проверьте как работает и отказавшееся работать ранее USB устройство. Возможно, процедуру удаления устройств и очистки файла настроек придётся повторить несколько раз.

Если после не первой перезагрузки ничего не помогает, проведите эту операцию с остальными файлами этой папки (теми, что имеют расширение .dat – только не трогайте папки!):

Попробуйте несколько раз с перезагрузкой.

Подготовка к подключению внутреннего хранилища

Все действия, описанные ниже можно выполнить в Windows, Mac OS и Linux. В моем случае использовалась Windows 10 с установленной в ней подсистемой Windows для Linux и Ubuntu Shell из магазина приложений. Установка компонентов Linux не обязательна, все действия можно провести и в командной строке (и отличаться они не будут), но я предпочел этот вариант, так как при использовании ADB Shell в командной строке возникли проблемы с отображением спецсимволов, не влияющие на работу способа, но представляющие неудобства.

Прежде чем начать подключение внутренней памяти Android как флешки в Windows выполните следующие шаги:

Скачайте и распакуйте Android SDK Platform Tools в папку на вашем компьютере. Загрузка доступна на официальном сайте https://developer.android.com/studio/releases/platform-tools.html
Откройте параметры системных переменных среды (например, начав в поиске Windows вводить «переменных», а затем в открывшемся окне свойств системы нажав «Переменные среды»

Второй способ: открыть Панель управления — Система — Дополнительные параметры системы — «Переменные среды» на вкладке «Дополнительно»). 

Выберите переменную PATH (не важно, системную или пользовательскую) и нажмите «Изменить».
В следующем окне нажмите «Создать» и укажите путь к папке с Platform Tools из 1-го шага и примените сделанные изменения. 

Если вы проделываете указанные действия в Linux или MacOS, то поищите в Интернете, как в этих ОС добавить папку с Android Platform Tools в PATH.

Решение проблемы

Если описанные выше варианты проблем не касаются вашего случая, то вашу проблему скорее всего получиться решить одним из описанных ниже способов. В зависимости от того, что вы обнаружили в Управлении дисками , существуют варианты решений возникшей проблемы с определением внешнего носителя информации.

Если Windows предлагает отформатировать диск после подключения

Если Windows видит диск, но не может его прочитать, то это значит, что на нём файловая система которую он не поддерживает. В таком случае операционная система предложит отформатировать диск перед его использованием. Но не спешите это делать! Это уничтожит все ваши данные.

Если другие компьютеры видят флешку, а ваш нет

В случае, если другие компьютеры определяю ваш USB диск, а ваш нет, то скорее всего имеет место проблема с драйверами устройства.

Чтобы проверить это, откройте диспетчер устройств и найдите пункты Дисковые устройства и Контроллеры USB . Посмотрите, нет ли в данных разделах устройств, обозначенных желтым восклицательным знаком. Если такое устройство есть, кликните на нём правой кнопкой мыши и выберите Свойства . В свойствах будет указана информация об ошибке и состоянии драйверов.

Чтобы исправить проблему с драйвером, кликните правой кнопкой мыши на устройстве, выберите Свойства / Драйвер / Обновить .

Еcли диск виден в Управлении дисками

Если диск виден в Управлении дисками , но он не имеет буквы, то именно по этой причине он может не отображаться в проводнике Windows. Чтобы система его начала отображать в проводнике, такому диску необходимо назначить букву.

Для этого, кликните правой кнопкой мыши на нём и выберите «Изменить букву диска или путь к диску» . Если в всплывающем меню нет такого пункта, то это может быть по причине отсутствия или неподдерживаемого типа файловой системы носителя информации .

В открывшемся меню вы увидите, что диску не назначена буква – назначьте её. Для этого выберите Добавить / Назначить букву диска / Ok .

Если диск виден в Управлении дисками, но он не распределён

Если диск виден в Управлении дисками , но он Не распределён, это значит, что он не отформатирован. Для того, чтобы такой диск стал работоспособным, кликните на нём правой кнопкой мыши и выберите «Создать простой том» .

Выберите максимальный предлагаемый размер раздела и назначьте предлагаемую системой букву диска. После этого диск будет нормально определятся системой и готов к использованию.

Если диск виден в Управлении дисками, но его нельзя отформатировать

Если по какой-то причине диск не получается отформатировать, то для возврата его работоспособности, его можно полностью очистить, после чего заново создать раздел.

Примечание . В результате такой манипуляции все данный с диска (а также флешки или карты памяти) будут безвозвратно удалены. Поэтому заранее побеспокойтесь об их сохранности – просканируйте диск или флешку с помощью Hetman Partition Recovery , и сохраните ваши данные в удобное место.

Чтобы очистить диск откройте Командную строку от имени администратора и очистите его с помощью команды diskpart – «clean» .

Симптомы.

Само устройство РАБОТАЕТ. Это Вы проверили на другой машине.

При подключении же именно к Вашему компьютеру, оно либо не определяется вообще, либо определяется неправильно, либо даже правильно определяется, но не работает как нужно.

Вы уверены, что установлены все необходимые драйверы всех устройств подключенных к системе.

Вы уверены, что переустановка и обновление драйверов USB контроллеров и устройств USB сделаны корректно.

В «Управлении устройствами» (Device manager) — показывает, что все устройства работают нормально и конфликтов нет.

Устройство все равно не работает, ничего не помогает и Вы готовы переустанавливать систему.

Как вернуть работоспособность флешки

Даже если кажется, что USB-флешке пришел конец, не стоит нести ее в ремонт. И тем более выкидывать. Для начала можно попробовать восстановить поврежденную флешку.

Инструкция работает для всех USB-флешек: Silicon Power, Kingston, Transcend, Data Traveler, A-Data и др. С ее помощью можно восстановить файловую систему и устранить любые проблемы (кроме механических повреждений).

Итак, первое, что Вам необходимо сделать – определить параметры USB-флешки. А точнее ее VID и PID. На основе этой информации можно определить марку контроллера, а затем подобрать утилиту, которая поможет восстановить поврежденную флешку.

Чтобы узнать эти параметры, выполняете следующее:

  1. Подключаете флешку к ПК или ноутбуку и заходите в Пуск – Панель управления – Диспетчер устройств.
  2. Находите раздел «Контроллеры USB».
  3. Дважды нажимаете на нем и ищете пункт «Запоминающее устройство USB». Это и есть Ваша флешка (напомню, она должна быть подключенной к компьютеру).
  4. Нажимаете на ней ПКМ и выбираете «Свойства».
  5. В новом окне переходите на вкладку «Сведения».
  6. В поле «Свойство» выбираете пункт «ИД оборудования» (или «Код экземпляра»).
  7. Смотрите значения VID и PID и запоминаете их.
  8. Далее переходите на сайт http://flashboot.ru/iflash/, вводите свои значения в верхней части сайта и нажимаете кнопку «Search» («Поиск»).
  9. Ищете модель своей USB-флешки (по производителю и объему памяти). В правой колонке «Utils» будет название программы, с помощью которой можно попробовать восстановить нерабочую флешку.

Восстановление Kingstone, Silicon Power, Transcend и других моделей осуществляется несложно: просто запускаете программу и следуете инструкции.

Что делать, если Вы не нашли подходящую утилиту для своей модели? Для этого заходите в Google или Яндекс и пишете примерно так: «Silicon Power 4 GB VID 090C PID 1000» (разумеется, здесь стоит указывать параметры своей флешки). А далее смотрите, что нашел поисковик.

Для надежности можете почитать отзывы, чтобы убедиться, что выбранная программа для восстановления работоспособности флешки точно подходит в вашем случае.

Никогда не используйте программы, которые не подходят для параметров VID и PID вашего контролера! Иначе Вы «убьете» флешку окончательно, и восстановить ее уже не получится.

В большинстве случаев восстановление поврежденной флешки проходит успешно. И после этого она будет определяться при подключении к ПК или ноутбуку.

Перед запуском программы рекомендуется отключить все ненужные USB-флешки и внешние жесткие диски, подключенные к USB. Это нужно для того, чтобы утилита случайно не отформатировала другое устройство.

Вот таким образом осуществляется ремонт флешки своими руками с помощью бесплатной утилиты.

А главное: с помощью вышеизложенной инструкции удается восстановить поврежденную флешку в 80% случаев. В то время как большинство специализированных программ с этой задачей могут и не справиться.

Прокачиваем драйвер MSC

протокол USB предоставляет такой механизм прямо из коробки

Транзакция SCSI: Read(10) LUN: 0x00 (LBA: 0x00000000, Len: 1)Хост отправляет команду на чтение. Со стороны микроконтроллера вызывается функция MSC_BOT_DataOut()
Команда обрабатывается по цепочке функций MSC_BOT_DataOut() -> MSC_BOT_CBW_Decode() -> SCSI_ProcessCmd() -> SCSI_Read10()
Поскольку драйвер находится в состоянии hmsc->bot_state == USBD_BOT_IDLE, то готовится процедура чтения: проверяются параметры команды, запоминается сколько всего блоков нужно прочитать, после чего передается управление функции SCSI_ProcessRead() с просьбой прочитать первый блок
Функция SCSI_ProcessRead() читает данные в синхронном режиме. Именно тут микроконтроллер занят бОльшую часть времени.
Когда данные получены они перекладываются (с помощью функции USBD_LL_Transmit() ) в выходной буфер конечной точки MSC_IN, чтобы хост мог их забрать
Драйвер переходит в состояние hmsc->bot_state = USBD_BOT_DATA_IN

Транзакция SCSI: Data InХост забирает данные из выходного буфера микроконтроллера пакетами по 64 байта (максимальный рекомендованный размер пакета для USB Full Speed устройств). Все это происходит на самом низком уровне в ядре USB, драйвер MSC в этом не участвует
Когда хост забрал все данные возникает событие Data In. Управление передается в функцию MSC_BOT_DataIn()

Акцентирую Ваше внимание, что эта функция вызывается после реальной отправки данных.
Драйвер находится в состоянии hmsc->bot_state == USBD_BOT_DATA_IN, что означает мы все еще в режиме чтения данных.
Если еще не все заказанные блоки прочитаны – стартуем чтение очередного кусочка и ждем завершения, перекладываем в выходной буфер и ждем пока хост заберет данные. Алгоритм повторяется
Если все блоки прочитаны, то драйвер переключается в состояние USBD_BOT_LAST_DATA_IN для отправки финального статуса команды

Транзакция SCSI: ResponseК этому моменту данные посылки уже отправлены
драйвер лишь получает об этом уведомление в переходит в состояние USBD_BOT_IDLE

  • Транзакция SCSI: Read(10) LUN: 0x00 (LBA: 0x00000000, Len: 1)
    • Микроконтроллер получает команду на чтение, проверяет все параметры, запоминает количество блоков, которые нужно прочитать
    • Микроконтроллер стартует чтение первого блока в асинхронном режиме
    • Выходим из прерывания не дожидаясь окончания чтения
  • Когда чтение закончилось вызывается коллбек
    • Прочитанные данные отправляются в выходной буфер
    • Хост их вычитывает без участия драйвера MSC
  • Транзакция SCSI: Data In
    • Вызывается коллбек функция DataIn(), которая сигнализирует о том, что хост забрал данные и можно делать следующее чтение
    • Запускаем чтение следующего блока. Алгоритм повторяется начиная с обратного вызова о завершении чтения
    • Если все блоки прочитаны – отправляем пакет статуса
  • Транзакция SCSI: Response
    • К этому моменту данные посылки уже отправлены
    • Готовимся к следующей транзакции

USB MassStorage Device

>USB MassStorage

USB Mass Storage Device

Для обозначения Mass Storage «в быту» используются две аббревиатуры — MSC и UMS. MSC (Mass Storage Class) является официальной, а UMS (возможны варианты расшифровки: USB/Universal Mass Storage) — «народной». Друг другу они не противоречат, а скорее дополняют.

MSC сообщает о том, что протокол входит в число утвержденных стандартных «классов устройств» в рамках спецификации USB и тем самым является индустриальным стандартом де-юре. UMS говорит об универсальности протокола, который на сегодня поддерживается большинством операционных систем и бесчисленным множеством конечных устройств, что делает его стандартом и де-факто. Вариант расшифровки UMS как USB Mass Storage дополняет эту информацию, уточняя, что в качестве физической линии используется интерфейс USB. Буквы MS (Mass Storage), общие для всех аббревиатур, показывают, что перед нами протокол, предназначенный для работы с устройствами хранения больших объемов данных. Именно для них и был разработан данный стандарт.

К классу устройств USB mass-storage относятся устройства, передающие файлы в одном или в двух направлениях. Типичные представители этого класса устройств: жесткие диски, CD-, DVD-приводы и флешки. Файловая система позволяет пользователю копировать, перемещать и удалять файлы в устройстве

Почти все устройства USB mass-storage используют протокол передачи только массивов (bulk) данных (bulk-only transport, BOT, также называемый BBB). (исключение составляют некоторые полноскоростные дисководы для дискет, которые используют несколько типов передач данных: управляющие, передача массивов и передачи по прерываниям (control, bulk, interrupt), такой протокол называется CBI). Устройства USB mass-storage также используют команды SCSI, определяемые различными стандартами SCSI (Small Computer System Interface).

Протокол передачи только массивов данных определяет способ, с помощью которого USB хост может посылать команды и получать ответы используя передачу массивов данных, определенную в спецификации USB. В протоколе передачи только массивов данных каждый обмен информацией требует 2 или 3 USB передач данных. В первой передаче хост посылает команду в структуре, называемой CBW (Command Block Wrapper ). За множеством CBW следует передача, которая содержит данные, посылаемые хостом или устройством. В последней передаче устройство возвращает статус в структуре, называемой CSW (Command Status Wrapper ).

Достоинства протокола. Главное — простота: все операции осуществляются через стандартные файловые оболочки, в т.ч. Windows Explorer (Проводник), никакие дополнительные знания или обучение для работы с ним не требуются.

Распространенность – уже Windows Me и 2000 имели базовую поддержку протокола, Windows XP поддерживал его полностью. Множество других ОС — MacOS, Linux и т.п. — совместимы с Mass Storage.

Немаловажным является существование спецификации USB host (on the go), позволяющей подключать Mass Storage устройства к другим портативным (и не портативным) аппаратам.

Спецификации:

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий