作者Tankan (Tankan)
看板ASM
标题Re: [问题] ATA COMMAND问题
时间Fri May 18 22:30:15 2007
※ 引述《CuckooBoy (阿书)》之铭言:
: 有没有人懂ATA COMMAND
: 我手上有COMMAND表
: 但是不知道怎麽传这些COMMAND
: 有没有人写过类似的程式
: 可以举个例子…吗?
: 譬如20H的 READ SECTOR
1.请先找出 ATA device 的 address.
在 IDE controller 的 PCI configuration Space 某个 Offset 有储存 address.
传统的 IDE mode 是以 I/O port 的方式来存取 ATA Device.
AHCI mode 和 RAID mode 是以 memory address 来存取.
但是, 有向前相容之前的 ATAPI command.
2.假设某个 Primary IDE Controller 的 I/O address 是 1F0h.
则对照你手边的 Command 表, 每个 Register 的 address 如下.
都是以 Byte 为单位存取.
1F0 (Read and Write): Data Register
1F1 (Read): Error Register
1F1 (Write): Features Register
1F2 (Read and Write): Sector Count Register
1F3 (Read and Write): LBA Low Register
1F4 (Read and Write): LBA Mid Register
1F5 (Read and Write): LBA High Register
1F6 (Read and Write): Drive/Head Register
1F7 (Read): Status Register
1F7 (Write): Command Register
3F6 (Read): Alternate Status Register
3F6 (Write): Device Control Register
Status register (1F7h) 所读出来的 1-Byte value, 每个 Bit 所代表的意义由
左至右分别:
BIT7: BSY (busy)
BIT6: DRDY (device ready)
BIT5: DF (Device Fault)
BIT4: DSC (seek complete)
BIT3: DRQ (Data Transfer Requested)
BIT2: CORR (data corrected)
BIT1: IDX (index mark)
BIT0: ERR (error)
Error register 和其他 register 依此类推.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.64.195.232
1F:推 loveflames:请问这个应该收在哪个分类? 05/19 04:23
2F:推 zhim:bios 吧 05/19 05:53
3F:推 mapleV:实用的指南 THX 05/19 11:53