
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Страницы: (51) « Первая ... 8 9 [10] 11 12 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#136
,
|
|
|
Так она не вызывает STALL потому что у неё нет стадии передачи данных.
Т.е. у READ_CAPACITY: CBW, BULK_IN (STALL), CSW(Error), а у TEST_UNIT_READY: CDW, CSW(Error). Что-то мне кажется тут всё дело в REQUEST_SENSE... Потому что у меня READ_CAPACITY не первая команда, первая INQUIRY... В общем интересный момент - надо поэкспериментировать ![]() А логи лучше в архиве (форум только zip вроди позволяет) к сообщению прикрепи или сотри просто, а то модераторы нервничать будут. Архивы в быстром ответе не цепляются, надо в шапке темы "Ответ" нажать. |
Сообщ.
#137
,
|
|
|
Цитата cppasm @ Так она не вызывает STALL потому что у неё нет стадии передачи данных. Т.е. у READ_CAPACITY: CBW, BULK_IN (STALL), CSW(Error), а у TEST_UNIT_READY: CDW, CSW(Error). Что-то мне кажется тут всё дело в REQUEST_SENSE... Потому что у меня READ_CAPACITY не первая команда, первая INQUIRY... В общем интересный момент - надо поэкспериментировать у меня тоже первая inquiry, проходит нормально. потом request_sense, тоже нормально. потом если делать read capacity - stall, если test - error. два раза подряд делать read_capacity я еще не пробовал ![]() |
Сообщ.
#138
,
|
|
|
еще интересное наблюдение. у некоторых флешей boot sector смещен относительно 0-го адреса
![]() |
Сообщ.
#139
,
|
|
|
На тех, что я видел, если boot_sector был смещен, то в нулевом секторе лежала MBR, от туда и доставал адрес boot_record'a
|
Сообщ.
#140
,
|
|
|
Цитата Gerret @ На тех, что я видел, если boot_sector был смещен, то в нулевом секторе лежала MBR, от туда и доставал адрес boot_record'a спасиб, надо посмотреть. хотя по-моему, там не было сигнатуры MBR (AA 55), а была сигнатура обычного boot сектора (55 AA) |
Сообщ.
#141
,
|
|
|
А с каких пор у них разные сигнатуры???
![]() |
Сообщ.
#142
,
|
|
|
Цитата Gerret @ А с каких пор у них разные сигнатуры??? У них у обоих 0x55 0xAA вообще-то гм. и правда. а почему я решил наоборот? странно. а как тогда их различать? проверять валидность значений в таблице разделов? |
Сообщ.
#143
,
|
|
|
Я проверял наличие сигнатуры 0x29 у boot_record'a смещение 0x26. Если на этом месте нету 0x29 я считал, что это MBR, если есть, то boot_record.
Добавлено Это провда только для FAT16, с FAT32 не сталкивался пока... |
Сообщ.
#144
,
|
|
|
Цитата Gerret @ Я проверял наличие сигнатуры 0x29 у boot_record'a смещение 0x26. Если на этом месте нету 0x29 я считал, что это MBR, если есть, то boot_record. логично. спасибо за совет |
Сообщ.
#145
,
|
|
|
Win2k и WinXP по умолганию форматируют флэшки как дискеты, т.е. без разбиения на разделы.
А если форматировать в Win98 или сторонними программами, то создаётся раздел, т.е. форматируется как HDD. Цитата Gerret @ Я проверял наличие сигнатуры 0x29 у boot_record'a смещение 0x26. Если на этом месте нету 0x29 я считал, что это MBR, если есть, то boot_record. На самом деле не сильно универсальный способ, хотя для форматированных средствами системы накопителей подойдёт. Просто 0х29 - это сигнатура расширенной загрузочной записи, а её может и не быть даже у нормального Boot Sector'a... Можно проверять таблицу разделов - чтобы все значения были правильными и чтобы в конце нулевого сектора каждого раздела (BootSector) была сигнатура. Хотя может это и черезчур параноидально ![]() |
Сообщ.
#146
,
|
|
|
Цитата cppasm @ На самом деле не сильно универсальный способ, хотя для форматированных средствами системы накопителей подойдёт. Просто 0х29 - это сигнатура расширенной загрузочной записи, а её может и не быть даже у нормального Boot Sector'a... Можно проверять таблицу разделов - чтобы все значения были правильными и чтобы в конце нулевого сектора каждого раздела (BootSector) была сигнатура. Хотя может это и черезчур параноидально ну в общем логика понятна, главное принцип ясен. насколько детально анализировать каждый сам решит ![]() |
Сообщ.
#147
,
|
|
|
Цитата sergik_vrn @ кстати, а FS кто как определяет? В каком смысле? Т.е. какие FS интересуют - в общем случае универсально сделать не полчится... Если только FAT - тогда FAT12, FAT16 и FAT12 различают исключительно по количеству кластеров в разделе. Детальное описание алгоритма есть в официальной спецификации на FS FAT от Microsoft (по моему fatgen103.pdf). Если интересует ещё NTFS - там в BootSector'е некоторые поля отличаются от FAT. А вообще надо просто различия в FS искать и по ним определять... |
Сообщ.
#148
,
|
|
|
Цитата cppasm @ В каком смысле? Т.е. какие FS интересуют - в общем случае универсально сделать не полчится... ну меня FAT16 интересует, я уже говорил. то есть достаточно будет отличить ее от любой другой. спасибо за наводку, почитаю документик |
Сообщ.
#149
,
|
|
|
Не совсем в тему, но может кому интересно...
В открытом доступе появилась спецификация PIMA15740. Спецификация для цифровых фотокамер (протоколы, команды), которые НЕ распознаются как флэш а имеют свой собственный класс USB устройств. Лежит здесь http://www.broomscloset.com/closet/photo/exif/PIMA15740-2000.PDF Как долго лежать будет не знаю. Ещё год назад искал - хотели ~150 зелёных бумажек с американскими президентами ![]() Это дополнение к http://www.usb.org/developers/devclass_docs/usb_still_img10.zip В спецификации USB описана как бы обёртка, а какие команды в неё заворачивать описано в PIMA. В общем принцип на Mass Storage похож. Вот нашёл ссылку на саму страницу http://www.broomscloset.com/closet/photo/exif/index.html |
Сообщ.
#150
,
|
|
|
Всем добрый день! Помогите, пожалуйста, разобраться начинающему. Пытаюсь работать с USB Flash Drive. В компьтере используется Universal Host Controller. Порядок действий: SetAddress, GetConfigurationDescriptor, SetConfiguration. До сих пор все в порядке, пакеты успешно уходят и приходят. Потом пытаюсь послать в Data Out команду INQUIRY или GET_CAPACITY. В ответ получаю вроде бы правильный CSW со статусов GOOD, правильным тегом, но: собственно данных не наблюдаю. В случае с GET_CAPACITY поле dCSWDataResidue = 0. Структуру посылки с командой GET_CAPACITY заполняю так
;Get Capacity Command mov dword [edi], 43425355h mov dword [edi+4], 11h mov dword [edi+8], 8 mov byte [edi+12], 80h mov byte [edi+13], 00h mov byte [edi+14], 10 mov byte [edi+15], 25h mov byte [edi+16], 00h mov byte [edi+17], 00h mov byte [edi+18], 00h mov byte [edi+19], 00h mov byte [edi+20], 00h mov byte [edi+21], 00h mov byte [edi+22], 00h mov byte [edi+23], 00h mov byte [edi+24], 00h Итак, что мне не понятно: 1) Почему не текут данные, что я делаю не так? 2) В документации и в Кулакове используется понятие "Сброс порта". Что это такое и как это делается? Я произвожу только общий сброс контроллера. Может, из-за этого? 3) Windows в списке устройств USB показывает помимо универсального хост-контроллера еще "Корневой концентратор USB", причем все подключенные устройства можно увидеть, если залезть в его свойства. Значит ли это, что с устройствами надо работать, используя спецификации для хабов, в частности, при енумерации? 4) На некоторых компах (вполне современных) при попытке прочитать PCI BIOS (как по Кулакову) говорит, что PCI BIOS не обнаружен. Режим 16-разрядный. Как же тогда получить адреса контроллера? Заранее спасибо! |