OSDev

для всех
Текущее время: 28 мар 2024, 16:05

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: ATAPI чтение сектора
СообщениеДобавлено: 21 июл 2014, 03:19 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
не читается сектор. предпологаю что неправильно посылаю пакет. но где ошибка - ума не приложу. устройство устанавливает бит BSY и все, не идет никуда ._.
Код:
        mov edi, packetCommand
   xor eax, eax
   mov ecx, 12
   rep stosb
   mov [packetCommand], byte 0xA8
   mov dword [packetCommand+2], 10000000h   ;16й сектор
   mov dword [packetCommand+6], 01000000h   ;читать 1 сектор
   mov [packetSize], 12
   call sendDataPacket

посыл команды и пакета
Код:
sendDataPacket:
   pusha
   
   
; Послать ATA-команду передачи пакетной команды
   mov     [ATAFeatures],0
    mov     [ATASectorsCount],0
   mov     [ATASectorNumber],0
   ; Загрузить размер передаваемого блока
   mov     AX,[CDBlockSize]
   mov     [ATACylinder],AX
   mov     [ATAHead],0
   mov     [ATACommand],0A0h
   call    sendCommandToHDD
   cmp     [devErrorCode],0 ;проверить код ошибки
   jne .error
   xor eax, eax
   mov al, [channel]
   shl eax, 2
   mov dx, [basePort+eax]
   add dx, 7
   mov ecx, 0xFFF
@@:
   dec ecx
   jz .error
   in      AL,DX
   test    AL,80h   ;состояние сигнала BSY
   jnz     @b
   test    AL,1     ;состояние сигнала ERR
   jnz     @b
   test    AL,08h   ;состояние сигнала DRQ
   jz      @b
   
   sub dx, 7
   movzx ecx, [packetSize]
   shr ecx, 1
   mov esi, packetCommand
   xchg bx, bx
@@:
   rep outsw
   
   add dx, 7
   mov ecx, 0xFFF
@@:
   dec ecx
   jz .error
   in      AL,DX
   test    AL,80h   ;состояние сигнала BSY
   jnz     @b
   test    AL,1     ;состояние сигнала ERR
   jnz     @b
   test    AL,08h   ;состояние сигнала DRQ
   jz      @b
   
   mov edi, CDDataBuf
   movzx ecx, [CDBlockSize]
   shr ecx, 1
   sub dx, 7
   rep insw
   
   mov [devErrorCode], 0
   popa
   ret
.error:
   mov [devErrorCode], 1
   popa
   ret

sendCommandToHDD работает 100%, ибо я с этой же процедуриной и лоток сидирома вытаскивал, и с жестака ось грузил. собсно не могу только получить ответ от устройства, но лоток открыть могу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATAPI чтение сектора
СообщениеДобавлено: 21 июл 2014, 03:37 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Насколько я понял из вики, BSY снимается не когда данные можно начинать читать, а когда данные прочёл (и то не сразу, нужно дождаться пока обработка команды закончится).
Код:
   /* Send ATAPI/SCSI command */
   outsw (ATA_DATA (bus), (uint16_t *) read_cmd, 6);
   /* Wait for IRQ that says the data is ready. */
   schedule ();
   /* Read actual size */
   size =
   (((int) inb (ATA_ADDRESS3 (bus))) << 8) |
   (int) (inb (ATA_ADDRESS2 (bus)));
   /* This example code only supports the case where the data transfer
   * of one sector is done in one step. */
   ASSERT (size == ATAPI_SECTOR_SIZE);
   /* Read data. */
   insw (ATA_DATA (bus), buffer, size / 2);
   /* The controller will send another IRQ even though we've read all
   * the data we want.  Wait for it -- so it doesn't interfere with
   * subsequent operations: */
   schedule ();
   /* Wait for BSY and DRQ to clear, indicating Command Finished */
   while ((status = inb (ATA_COMMAND (bus))) & 0x88)
   asm volatile ("pause");


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATAPI чтение сектора
СообщениеДобавлено: 21 июл 2014, 03:55 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
неа. не знаю что там хотели сказать (кстати там код я тоже смотрел, пытался даже скопировать - толку нуль), но устройство должно выставить эти биты в сигнал о том, что данные готовы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATAPI чтение сектора
СообщениеДобавлено: 21 июл 2014, 14:28 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
Read (12) не работает, работает 10ти байтный пакет. ну это в борще. в других виртуалках надо тестить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATAPI чтение сектора
СообщениеДобавлено: 21 июл 2014, 16:31 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Работает. Ищите ошибку в коде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATAPI чтение сектора
СообщениеДобавлено: 21 июл 2014, 20:40 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
дык нету ошибки. все должно быть идеально. хрен знает что не так.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB