도와주세요!!
글 수 15,339
2006.12.25 18:30:16 (*.118.74.98)
6674
있어서요저는 ez-x5 보드와 ez-pi 보드를 이용하여 하드를 달아 파일 시스템을 구성하려고 합니다
현재 데이터 시트에 나와있는 ide_cs0 를 이용하여 primary 하드를 연결하고
접근하려고 하는데요..
base : 0x080_0000 이고, offset이 0x10000 이므로
ide 의 데이터 레지스터의 주소는
0x810000이고,
나가는 핀이 3개(a0,a1,a2)이므로 하위 00비트를 제외하고 레지스터 구성을 하여
하위 2비트를 제외하므로 4비트씩 증가하고, 상위 3개의 비트를 레지스터 선택으로 사용하여
000,001,010,011..이런식으로 진행될 거라 생각하여 다음과 같이 레지스터를 구성했는데
#define HDD_DATA_REG (*(short*)0x00810000)
#define HDD_SECTOR_COUNT (*(char*)0x00810004)
#define HDD_SECTOR_NUMBER (*(char*)0x00810008)
#define HDD_CYLINDER_L (*(char*)0x0081000C)
#define HDD_CYLINDER_H (*(char*)0x00810010)
#define HDD_DRIVE_HEAD (*(char*)0x00810014)
#define HDD_STATUS (*(char*)0x00810018)
#define HDD_COMMAND (*(char*)0x00810018)
#define HDD_INST_REG (*(char*)0x0081001C)
다음과 같이 구성 하였습니다.
그런데 예상 대로라면 HDD_COMMAND 라는 명령 레지스터에 값을 보내면
EC ->정보를 얻어온다.
이 명령으로 정보를 얻어오려하는데 반응이 없어서
E0 -> 하드의 회전을 멈춘다
를 사용하여 하드를 멈춰보려 했으나 반응하지 않아, 레지스터 주소가 잘못된거 같은데요..
어디를 참조해야 하는지와... 주소가 틀렸다면 제 생각으로는 베이스 주소는 맞으나
그 후의 레지스터가 잘못되었다고 생각합니다.
주소가 어떻게 되나요?..
현재 데이터 시트에 나와있는 ide_cs0 를 이용하여 primary 하드를 연결하고
접근하려고 하는데요..
base : 0x080_0000 이고, offset이 0x10000 이므로
ide 의 데이터 레지스터의 주소는
0x810000이고,
나가는 핀이 3개(a0,a1,a2)이므로 하위 00비트를 제외하고 레지스터 구성을 하여
하위 2비트를 제외하므로 4비트씩 증가하고, 상위 3개의 비트를 레지스터 선택으로 사용하여
000,001,010,011..이런식으로 진행될 거라 생각하여 다음과 같이 레지스터를 구성했는데
#define HDD_DATA_REG (*(short*)0x00810000)
#define HDD_SECTOR_COUNT (*(char*)0x00810004)
#define HDD_SECTOR_NUMBER (*(char*)0x00810008)
#define HDD_CYLINDER_L (*(char*)0x0081000C)
#define HDD_CYLINDER_H (*(char*)0x00810010)
#define HDD_DRIVE_HEAD (*(char*)0x00810014)
#define HDD_STATUS (*(char*)0x00810018)
#define HDD_COMMAND (*(char*)0x00810018)
#define HDD_INST_REG (*(char*)0x0081001C)
다음과 같이 구성 하였습니다.
그런데 예상 대로라면 HDD_COMMAND 라는 명령 레지스터에 값을 보내면
EC ->정보를 얻어온다.
이 명령으로 정보를 얻어오려하는데 반응이 없어서
E0 -> 하드의 회전을 멈춘다
를 사용하여 하드를 멈춰보려 했으나 반응하지 않아, 레지스터 주소가 잘못된거 같은데요..
어디를 참조해야 하는지와... 주소가 틀렸다면 제 생각으로는 베이스 주소는 맞으나
그 후의 레지스터가 잘못되었다고 생각합니다.
주소가 어떻게 되나요?..