Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

 

Рисунок 10. Блок данных sense data, возвращаемый командой REQUEST SENSE

Три поля данной структуры – Sense Key, Additional Sense Code (ASC), Additional Sense Code Qualifier – позволяют точно установить причину ошибки. Допустимые значения этих полей и их описание ошибочной ситуации приведены в спецификации INF-8020i, таблицы 140 и 141, стр. 183 – 185.

Анализ ошибочной ситуации выполняет функция request_sense():

int request_sense()

{

    int i = 0;

    __u8 cmd_buff[12];

    __u8 sense_buff[14];

    __u16 a;

 

    memset((void *)cmd_buff, 0, 12);

    memset((void *)sense_buff, 0, 14);

 

/* Формируем пакетную команду REQUEST SENSE. Из блока sense data считываем первые 14 байт – этого нам хватит,

 * чтобы определить причину ошибки

 */

    cmd_buff[0] = 0x3;

    cmd_buff[4] = 14;

 

/* Посылаем устройству команду и считываем sense data */

    if(send_packet_data_command(14, cmd_buff) < 0) exit(-1);

 

    for(i = 0; i < 14; i += 2) {

                 IN_P_W(a, 0x170);

           memcpy((void *)(sense_buff + i), (void *)&a, 2);

    }

 

    printf("Sense key - 0x%X ", sense_buff[2] & 0x0F);

    printf("ASC - 0x%X ", sense_buff[12]);

    printf("ASCQ - 0x%X ", sense_buff[13]);

 

    return 0;

}

Полный листинг программы чтения RAW-секторов с компакт-диска находится в файле RAW/read_sector.c. Приведём пример работы этой программы. С компакт-диска считывается сектор номер 1000. В результате работы будет создан файл sector. Посмотрим на первые 16 байт этого файла:

00 FF FF FF FF FF FF FF FF FF FF 00 00 15 25 01

Первые 12 байт – это поле синхронизации Sync-сектора (см. рис. 6). Следующие за ним 3 байта – координаты сектора в формате MSF, значения представлены в BCD-коде. Последний байт содержит значение режима записи данных, Data Mode.

Пересчитаем координаты сектора из MS- формата в LBA по формуле (см. [3, 4]):

LBA = ((Minute * 60 + Second) * 75 + Frame) – 150

В нашем примере, Minute = 00, Second = 15, Frame = 25. Подставив значения в формулу, получаем LBA = 1000. Именно этот сектор мы считывали.

Теперь проверим, как обрабатываются ошибочные ситуации. Удалим из привода компакт-диск и запустим программу на выполнение. В результате программа выдаст следующее:

Sense key = 0x2

ASC = 0x3A

ASCQ = 0x0

За расшифровкой обратимся к таблицам 140 и 141. Значение Sense key, равное 0x2, означает «NOT READY. Indicates that the Device cannot be accessed», ASC=0x3A и ASCQ=0x0 – «MEDIUM NOT PRESENT». Устройство сообщило о том, что компакт-диск в приводе отсутствует.

Теперь попытаемся прочитать сектор, номер которого заведомо превышает допустимое значение. В программе задаем LBA = 10000000 и получаем в результате:

Sense key = 0x5 - ILLEGAL REQUEST

ASC = 0x21 - LOGICAL BLOCK ADDRESS OUT OF RANGE

ASCQ = 0x0

В этом случае устройство сообщает, что логический адрес сектора вышел за пределы допустимого диапазона.

Q-субканал Lead-In области компакт-диска содержит таблицу содержания диска, Table of Contents, или TOC. Это своеобразный аналог таблицы разделов жесткого диска. В TOC хранятся данные о координатах треков и другая служебная информация.

Чтение таблицы содержания диска выполняется командой READ TOC. Формат этой команды представлен на рис. 11.

READ TOC Command

Bit

Byte

7

6

5

4

3

2

1

0

0

Operation code (43h)

1

Reserved

MSF

(Mandatory)

Reserved

2

Reserved

Format

3

Reserved

4

Reserved

5

Reserved

6

Starting Track / Session Number

7

MSB

Allocation Length

 

LSB

8

9

Format

Reserved

10

Reserved

11

Reserved


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160]
[161]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100