2015-12-06 3 views
0

Я внедряю USB в качестве хоста для чтения файлов, хранящихся в Flashdrive. Чтобы прочитать, я реализую команду read (10) в SCSI. Эта команда имеет поле «Логический адрес блока», как в адресе, который я хочу прочитать. Теперь я знаю номер сектора, который я хочу прочитать.Что такое логический адрес блока сектора во флэш-накопителе USB?

Итак, является ли логический адрес блока и номер сектора одинаковым?

Я посмотрел в цилиндр-головка-сектор (CHS), но я не имею информации о цилиндре или головок

+0

Вы имеете в виду, что означает означает 'scsi_read()' right? –

+0

Я реализую код с нуля, я не пользуюсь библиотекой. В команде SCSI команда чтения называется read (10), причем 1 обозначает размер команды. Угадай scsi_read() - вызов функции из некоторого API. Но я уверен, что они выполняют ту же задачу. Так что да, если у вас есть полезная информация – Anurag

+0

http://stackoverflow.com/questions/11867612/scsi-read-10-and-write-10-with-the-scsi-generic-interface и http: //www.pcguide .com/ref/hdd/bios/modesLBA-c.html Кажется, что эти ссылки вам полезны –

ответ

1

В обиходе в SCSI, сектор является такой же, как Logical Block Address. Весьма вероятно, что ваше устройство имеет 512-байтовые сектора (512-байтовые логические блоки). Есть некоторые высокопроизводительные накопители SSD и большой емкости, которые имеют 4096-байтовые сектора. Эти диски обозначены как «Расширенное форматирование».

Неполадка адресации CHS не поддерживается SCSI. Итак, если у вас есть только номер сектора, это, вероятно, SCSI-сектор или адрес логического блока.

Все эти целые поля в типичных командах SCSI имеют формат в формате big-endian. Если вы на каком-то типичном компьютере x86, ваши целые числа будут иметь малоформатный формат. Прежде чем вы укажете номер своего сектора в вашей команде READ (10), вам нужно будет преобразовать его с htobe32() или htonl(). Аналогично для поля num: (htobe16() или htons()).

+0

Кроме того, из wikipedia (https://en.wikipedia.org/wiki/USB_flash_drive): Секторы имеют длину 512 байт, для совместимости с жесткими дисками ... –

+0

@gubblehozer Я работаю при чтении USB-флеш-памяти, реализуя USB-хост, не используя библиотеки. И доска, над которой я работаю, немногочисленна, я позаботился о последовательности передачи данных для команд SCSI, под которой я подразумеваю энтиансу. Да, размер моего сектора равен 512Bytes с 32 секторами в кластере. Спасибо за разъяснение, что сектор является адресом логического блока. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я читаю сектор ZERO, выполняя LBA 0x0000, я получаю некоторые данные, которых нет на flashdrive, я проверил содержимое flashdrive с помощью программного обеспечения под названием HXD. – Anurag

+0

@gubblehozer Я получаю в ответ количество байтов, которые я прошу, и большая часть из них - нули, но он не присутствует при поиске flashdrive. Знаете ли вы, что может быть проблемой здесь? Ссылка на то, что я читаю (10), похоже на http://i.imgur.com/ky4FHlm.png Ссылка на ответ, который я получаю для его чтения - http://imgur.com/jL6OEjE – Anurag

Смежные вопросы