Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC18F452 + IDE HDD
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > IDE/ATA/SATA/SAS/SCSI/CF
debian
Всем привет, помогите разобраться с IDE интерфейсом
Читал мануал то стандарту АТА написал программу которая должна читать информацио о винте IDENTIFY DEVICE...
вот что получилось:

Код
#include <pic18.h>
#include "delay.h"

#define hdd_data_port_low (PORTC)
#define hdd_data_port_hi (PORTD)
#define hdd_da0 (RB0)
#define hdd_da1 (RB1)
#define hdd_da2 (RB2)
#define hdd_cs1 (RB3)
#define hdd_cs3 (RB4)
#define hdd_diow (RB5)
#define hdd_dior (RB6)
#define hdd_iordy (RB7)

void init(void);
void main(void){
    init();
    hdd_cs1 = 1; // Data register...
    hdd_cs3 = 0;
    hdd_da2 = 0;
    hdd_da1 = 0;
    hdd_da0 = 0;
    hdd_data_port_low = 0xEC; // IDENTIFY DEVICE command...
    DelayMs(10);
    hdd_diow = 0x00;
    DelayMs(10);
    hdd_diow = 0x01;
    TRISC = 0xFF;
    TRISD = 0xFF;
            if (hdd_iordy) { //читаем результат...
    hdd_diow = 0x00;
    DelayMs(10);
    hdd_diow = 0x01;
    DelayMs(10);
    }    
            while(1);
    }
void init(void){
    TRISB = 0b10000000;
    TRISC = 0x00;
    TRISD = 0x00;
    PORTC = 0;
    PORTD = 0;
    hdd_dior = 0x01;
    hdd_diow = 0x01;
    }


уже все перепробывал, не идет и все...
скорее всего намудрил что-то вообше не то smile.gif
поясните как делать это по человечески

ЗЫ листинг просто показывает что за чем я делал...то, что результат порядка 250 бит я зню...
но мне не одного не пришло sad.gif
aaarrr
Цитата(debian @ Mar 4 2008, 01:42) *
уже все перепробывал, не идет и все...
скорее всего намудрил что-то вообше не то smile.gif

Мануал придется почитать еще - намудрили. Вот хотя бы:
Код
    hdd_cs1 = 1; // Data register...
    hdd_cs3 = 0;
    hdd_da2 = 0;
    hdd_da1 = 0;
    hdd_da0 = 0;
    hdd_data_port_low = 0xEC; // IDENTIFY DEVICE command...

Зачем писать команду в регистр данных?

Код
            if (hdd_iordy) { //читаем результат...
    hdd_diow = 0x00;
    DelayMs(10);
    hdd_diow = 0x01;
    DelayMs(10);
    }

И дергать IOWR при чтении?
debian
Подскажите, пожалуйста как правильно сие дело оформить?
чтобы я хоть понял от чего отталкиваться...напимер как сделать так чтобы винт всетаки начал отправлять информацию о себе
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.