реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> PIC18F452 + IDE HDD
debian
сообщение Mar 3 2008, 22:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 3-03-08
Пользователь №: 35 610



Всем привет, помогите разобраться с 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 3 2008, 23:11
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(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 при чтении?
Go to the top of the page
 
+Quote Post
debian
сообщение Mar 4 2008, 23:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 3-03-08
Пользователь №: 35 610



Подскажите, пожалуйста как правильно сие дело оформить?
чтобы я хоть понял от чего отталкиваться...напимер как сделать так чтобы винт всетаки начал отправлять информацию о себе
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016