kernel32ddl 0 21 февраля, 2006 Опубликовано 21 февраля, 2006 · Жалоба При создании Usb flash диска (128мб) появились проблемы с его определением windows. Дела обстоят следующим образом: при подключении устройства windows загружает все необходимые драйвера, т.е. диск определяется как сменный носитель, появляется в проводнике (с этим проблем нет); а вот дальше начинаются странности. На флэше был создан раздел FAT16, при создании раздела руководствовался документацией по этой файловой системой. Блок параметров биос выглядит так: Смещение Название Размер Значение Описание 0 (0x0) BS_jmpBoot 3 EB 3E 90 Команда перехода на загрузчик ОС 3 (0x3) BS_OEMName 8 2B 58 64 68 39 49 48 43 (Xdh9IHC) Название и версия Windows 11 (0xB) BPB_BytsPerSec 2 00 02(512) Количество байтов в секторе (всегда 512) 13 (0xD) BPB_SecPerClus 1 04(4) Секторов на кластер всегда кратно степени двух 14 (0xE) BPB_RsvdSecCnt 2 01 00(1) Количество зарезервированных секторов перед первой FAT 16 (0x10) BPB_NumFATs 1 02(2) Количество таблиц FAT (всегда 2) 17 (0x11) BPB_RootEntCnt 2 B0 02(688) Количество элементов в корневом каталоге (максимальный предел) 19 (0x13) BPB_TotSec16 2 00 00 Общее число секторов (0 - если размер диска больше 32 Мб) 21 (0x15) BPB_Media 1 F8 Тип устройства: F0 - гибкий диск, F8 - жесткий диск с любой емкостью (Media дескриптор носителя) 22 (0x16) BPB_FATsz16 2 FA 00(250) Количество секторов на элемент таблицы FAT (число секторов в одной FAT) 24 (0x18) BPB_SecPerTrk 2 20 00(32) Количество секторов на дорожку 26 (0x1A) BPB_NumHeads 2 FF 00(255) Число головок 28 (0x1C) BPB_HiddSec 4 00 00 00 00 Количество скрытых секторов 32 (0x20) BPB_TotSec32 4 FF E4 03 00(255231) Общее число секторов (0 - если размер диска меньше 32 Мб) 36 (0x24) BS_DrvNum 1 80(128) Номер диска 37 (0x25) BS_NtRsvd 1 01 Зарезервировано для Windows NT 38 (0x26) BS_BootSig 1 29 Расширенная сигнатура (если 29h, то следующие поля актуальны) 39 (0x27) BS_VolID 4 68 42 6C 30(hBl0)Серийный номер тома 43 (0x2B) BS_VolLab 11 4E 4F 20 4E 41 4D 45 20 20 20 20(NO NAME ) Метка тома 54 (0x36) BS_FilSysSize 8 46 41 54 31 36 20 20 20(FAT16 ) Тип файловой системы (12- или 16-разрядная) В готовой флэши (смотрел несколько флэш Trancend) процесс чтения происходит так: сначала читается загрузочная область (винда почему-то это делает несколько раз), затем начинается чтение fat по порядку, а затем читается root и т.д. и т.п, т.е все достаточно логично. У меня происходит все довольно странно после чтения boot сектора винда читает сектор со смещением 0x40h(64) и переодисечки повторяет чтение то boot сектора, то этого сектора При попытке зайти на диск проводник виснет при это не выводится ни каких сообщений. Пробовал отфармотировать флэшку при помощи HP USB Disk Storage Format Tool, но она пишет, что диск защищен от записи. Очень хотелось бы узнать как те кто этим занимался решили проблему файловой системы диска, либо как я писали ее сами, либо брали уже готовую, скажем с носителя такой же емкости? Возможно проблема в блоке параметров биос (параметры брал согласно мануалам)? Ни где не встретил описание параметров BPB_SecPerTrk (Количество секторов на дорожку) и BPB_NumHeads (Число головок) из каких соображений они выбираются? Не мог бы кто-нибуть выложить свой бут сектор с комментариями, буду очень признателен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 21 февраля, 2006 Опубликовано 21 февраля, 2006 · Жалоба Не большой спец по Mass Storage, но мысль имею :) На флэше был создан раздел FAT16, при создании раздела руководствовался документацией по этой файловой системой.А если попробовать флешку отформатировать средствами самой Винды? Может она сама для себя более корректно ее отформатирует? P.S. кстати из опыта работы с FDD. Винда зачем-то пытается писать в boot свою инфу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kernel32ddl 0 21 февраля, 2006 Опубликовано 21 февраля, 2006 · Жалоба Форматировать пробовал(после того как винда перестает флэшеку мутузить) графическая программа фрматирования не запускается вообще, а консольная выдает ошибку "ошибка функции такой-то (что-то вроде IOCTL или в этом духе)" (к сожалению точно не помню какой, нет возможности в данный момент посмотреть) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 22 февраля, 2006 Опубликовано 22 февраля, 2006 · Жалоба Насколько я в курсе, флешка должна лишь уметь обрабатывать усеченный набор команд SCSI. А какая файловая система на ней будет ее волновать не должно вообще. От диска лишь поддержка LBA требуется, а не какой-то конкретный FAT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kernel32ddl 0 22 февраля, 2006 Опубликовано 22 февраля, 2006 · Жалоба С набором команд как раз-таки все впорядки данные передаются и принимаются без ошибок. Ответы на команды тоже коррекные, формируются согласно спецификации SCSI. Логическую адресацию устройство поддерживает, вопрос в том почему ни одна программа не хочет ее форматировать. И почему винда после чтения бут сектора кидается сразу читать 64-ый блок, а не начинает читать FAT, а затем root. Мне почему-то кажется, что я где-то допустил ошибку в параметрах биос, т.к. винда ведь не с потолка берет адрес 0x40h(64), скорее всего это адрес вычисляется согласно этим параметрам, и судя по аналогии(обмен виндой с другими флэшками) там винда пытается прочитать FAT таблицу. А вот где я допустил ошибку ума не приложу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
левша 0 26 февраля, 2006 Опубликовано 26 февраля, 2006 · Жалоба Забавная задачка. А Partition Magic может тут помочь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kernel32ddl 0 26 февраля, 2006 Опубликовано 26 февраля, 2006 · Жалоба А Partition Magic может тут помочь? К сожалению он работает с жесткими дисками и только. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 42 26 февраля, 2006 Опубликовано 26 февраля, 2006 · Жалоба WinHex поможет- он с любыми дисками работает после лечения. И доступ к имиджу симулирует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kernel32ddl 0 26 февраля, 2006 Опубликовано 26 февраля, 2006 · Жалоба WinHex поможет- он с любыми дисками работает после лечения. И доступ к имиджу симулирует. Можно поподробней? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 42 26 февраля, 2006 Опубликовано 26 февраля, 2006 (изменено) · Жалоба Есть такая прога- WinHex, от X-Ways software. Навороченный hex редаетор под Винду. Умеет работать с имиджами дисков, клонировать диски итд. Залил версию 12.7 с лекарством в утилиты на наш аплоад. А так- спаршивать в р2р сетях. Подробности- http://www.x-ways.net/ После применения professional лицензии обкспечивает доступ и редактирование физических дисков, в том числе USB. Позволяет прочитать NTFS раздел под Win98 и скопировать файлы, работает с поврежденными разделами итд. Изменено 26 февраля, 2006 пользователем khach Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kernel32ddl 0 26 февраля, 2006 Опубликовано 26 февраля, 2006 · Жалоба Залил версию 12.7 с лекарством в утилиты на наш аплоад. Простите за ламерство :smile3046: , но это где? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kernel32ddl 0 26 февраля, 2006 Опубликовано 26 февраля, 2006 (изменено) · Жалоба 64-ый сектор - это оказывается первый сеткор второй дорожки. Узнал я это при помощи программки flashnul. Она выдала следующее: Disk g: (UNC name: \\.\g:) ------------------------------------------------------- DeviceIoCtrl & IOCTL_DISK_GET_DRIVE_GEOMETRY reports: Cylinders = 16 Tracks per cylinder = 255 Sectors per track = 63 Bytes per sector = 512 calculated disk size = 131604480 (125Mb) delta to near pow of two= 2613248 (2Mb) ------------------------------------------------------- GetDiskFreeSpaceEx() reports: function failed ------------------------------------------------------- Reading 0x0 (0b) error: Превышен таймаут семафора. Как я понимаю параметр Sectors per track это тот же BPB_SecPerTrk в блоке параметров биос загрузочной области. Откуда же интересно винда берет это значение, ведь этот параметр равен у меня 32? И вообще не понятна сама логика чтения, почему винда не читает все подряд, а после чтения бут сектра читает следующую дорожку? Хотелось бы услышать мнения по поводу того, как винда высчитывает из параметров бут сектора значения смещений скажем на ФАТ таблицу, рут и пр. Изменено 26 февраля, 2006 пользователем kernel32ddl Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_man_show 0 26 февраля, 2006 Опубликовано 26 февраля, 2006 · Жалоба С набором команд как раз-таки все впорядки данные передаются и принимаются без ошибок. Ответы на команды тоже коррекные, формируются согласно спецификации SCSI. Если не затруднит, киньте инфо или ссылку на список SCSI команд, достаточных для реализации USB FLSH Disk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MCU_Hunter 0 27 февраля, 2006 Опубликовано 27 февраля, 2006 (изменено) · Жалоба С набором команд как раз-таки все впорядки данные передаются и принимаются без ошибок. Ответы на команды тоже коррекные, формируются согласно спецификации SCSI. Если не затруднит, киньте инфо или ссылку на список SCSI команд, достаточных для реализации USB FLSH Disk Добрый день! Если не затруднит, и мне, пожалуйста! А то задача уж больно похожая, а информации по общению PC c MCU практически нет! MailTo: [email protected] С Уважением, Charley Изменено 27 февраля, 2006 пользователем Charley Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kernel32ddl 0 27 февраля, 2006 Опубликовано 27 февраля, 2006 (изменено) · Жалоба Значится так: Первым делом идем на usb.org USB Device Сlass Specification. В секции Mass Storage качаем Mass Storage Overview 1.2 Mass Storage Bulk Only 1.0 Mass Storage Control/Bulk/Interrupt (CBI) Specification 1.1 Mass Storage UFI Command Specification 1.0 Mass Storage Bootability Specification 1.0 В принципе это самое важное из всей документации на эту тему, в Mass Storage UFI Command Specification 1.0 можно найти примерный набор команд. Подчеркиваю! примерный. Все дело в том, что к сожалению до сих пор нет никакого стандарта на обмен между флэшиной и компом. 98% этих команд, беруться из SCSI Primary Commands -2 (SPC-2). За этой спецификацией идем на t10.org, в частности в раздел Architecture. Эта спецификация очень большая (по количеству страниц), в ней пригодиться только малая часть, для более подробного изучения команд, описанных в Mass Storage UFI Command Specification 1.0 . С сайта t10.org обязательно скачиваем RBC Reduced Block Commands. Лично я писал свои команды именно по этой спецификации. НО! ни в коем случае не описывайте в дескрипторах свое устройство как RBC. В винде нет поддержки RBC! Ваше усройство просто-напросто не будет определяться как сменный накопитель. Нас эта спецификация интересут только в плане команд. Строго говоря все-таки существут примерно-стандартный набор команд которые должно поддерживать устройство. Вот их список: 0x00 - TEST UNIT READY 0x03 - REQUEST SENSE 0x04 - FORMAT UNIT 0x12 - INQUIRY 0x15 - MODE SELECT 0x16 - RESERVE 0x17 - RELEASE 0x1A - MODE SENSE(6) 0x1B - START STOP UNIT 0x1E - MEDIUM REMOVAL 0x23 - READ FORMAT CAPACITY 0x25 - READ CAPACITY 0x28 - READ 0x2A - WRITE 0x2F - VERIFY 0x35 - SYNCH CACHE 0x3B - WRITE BUFFER 0x5A - MODE SENSE(10) Этот список довольно исбыточен, т.к. при использовании одних команд другие команды становятся не нужными. Подробнее об этом написано в RBC Reduced Block Commands, правда не знаю с какой достоверностью можно использовать эту спецификаю (если б у меня совем не было проблем я бы говорил более уверенно :) ), поэтому не советую уж больно сильно увлекаться ей. Почему - было сказано выше. И естественно советую внимательно изучить спецификацию по USB (особенно главу про Protocol Layer), благо в инете встречаютя описания на русском. Изменено 27 февраля, 2006 пользователем kernel32ddl Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться