📄 ata.h
字号:
//-----------------------------------------------------------------
// 名称:ATA-HDD头文件
//-----------------------------------------------------------------
//ATA命令集(ATA-3,PROTEUS仿真模型仅实现了ATA-1的部分功能)
#define CMD_CFA_ERASE_SECTORS 0xC0
#define CMD_CFA_REQUEST_EXT_ERR_CODE 0x03
#define CMD_CFA_TRANSLATE_SECTOR 0x87
#define CMD_CFA_WRITE_MULTIPLE_WO_ERASE 0xCD
#define CMD_CFA_WRITE_SECTORS_WO_ERASE 0x38
#define CMD_CHECK_POWER_MODE1 0xE5
#define CMD_CHECK_POWER_MODE2 0x98
#define CMD_DEVICE_RESET 0x08
#define CMD_EXECUTE_DEVICE_DIAGNOSTIC 0x90
#define CMD_FLUSH_CACHE 0xE7
#define CMD_FORMAT_TRACK 0x50
#define CMD_IDENTIFY_DEVICE 0xEC
#define CMD_IDENTIFY_DEVICE_PACKET 0xA1
#define CMD_IDENTIFY_PACKET_DEVICE 0xA1
#define CMD_IDLE1 0xE3
#define CMD_IDLE2 0x97
#define CMD_IDLE_IMMEDIATE1 0xE1
#define CMD_IDLE_IMMEDIATE2 0x95
#define CMD_INITIALIZE_DRIVE_PARAMETERS 0x91
#define CMD_INITIALIZE_DEVICE_PARAMETERS 0x91
#define CMD_NOP 0x00
#define CMD_PACKET 0xA0
#define CMD_READ_BUFFER 0xE4
#define CMD_READ_DMA 0xC8
#define CMD_READ_DMA_QUEUED 0xC7
#define CMD_READ_MULTIPLE 0xC4
#define CMD_READ_SECTORS 0x20
#define CMD_READ_VERIFY_SECTORS 0x40
#define CMD_RECALIBRATE 0x10
#define CMD_SEEK 0x70
#define CMD_SET_FEATURES 0xEF
#define CMD_SET_MULTIPLE_MODE 0xC6
#define CMD_SLEEP1 0xE6
#define CMD_SLEEP2 0x99
#define CMD_STANDBY1 0xE2
#define CMD_STANDBY2 0x96
#define CMD_STANDBY_IMMEDIATE1 0xE0
#define CMD_STANDBY_IMMEDIATE2 0x94
#define CMD_WRITE_BUFFER 0xE8
#define CMD_WRITE_DMA 0xCA
#define CMD_WRITE_DMA_QUEUED 0xCC
#define CMD_WRITE_MULTIPLE 0xC5
#define CMD_WRITE_SECTORS 0x30
#define CMD_WRITE_VERIFY 0x3C
//根据PROTEUS中ATA-HDD组件的HELP说明原文,仅有以下命令被当前组件所支持--
//0x00 Nop Perform no operation
//0x10 Recalibrate Move head to cylinder 0.
//0x20 Read sectors Read sectors from disk.
//0x21 Read sectors once Read sectors from disk.(Do not retry on error.)
//0x30 Write sectors Write sectors to disk.
//0x31 Write sectors once Write sectors to disk.(Do not retry on error.)
//0x40 Verify sectors Verify sectors on disk.
//0x41 Verify sectors once Verify sectors on disk.(Do not retry on error.)
//0x70 Seek Seek a sector
//0x90 Execute device diagnostic Causes all drives to execute internal diagnostics.
//0x91 Initialise drive parameters Allow the host to set the number of cylinders heads
// and sectors used for translation.
//0xC4 Read multiple Read sectors from disk. (Less interrupts.)
//0xC5 Write multiple Write sectors to disk. (Less interrupts.)
//0xC6 Set multiple mode Set number of sectors per block in multiple mode.
//0xE6 Sleep Get the drive to enter sleep mode.
//0xEC Identify device Fill the sector buffer with drive identification information.
//0xEF Set features Set drive features
//-----------------------------------------------------
//ATA状态寄存器
#define ATA_STAT_BSY 0x80 //忙
#define ATA_STAT_RDY 0x40 //就绪
#define ATA_STAT_DF 0x20 //设备写失败
#define ATA_STAT_SKC 0x10 //寻道(SEEK)结束
#define ATA_STAT_DRQ 0x08 //数据请求
#define ATA_STAT_CORR 0x04 //发生可纠正错误
#define ATA_STAT_IDX 0x02 //索引
#define ATA_STAT_ERR 0x01 //错误
//命令寄存器地址分配(CS3FX,CS1FX,DA2~DA0连接在RC4~RC0)
#define ATA_IO_DATA 0x10 //读/写数据
#define ATA_IO_ERROR 0x11 //读错误
#define ATA_IO_FEATURES 0x11 //写属性
#define ATA_IO_CHS_SECTORCNT 0x12 //CHS:扇区数(S)
#define ATA_IO_CHS_SECTORNUM 0x13 //CHS:扇区号(S)
#define ATA_IO_CHS_CYL_L 0x14 //CHS:柱面号低字节(C)
#define ATA_IO_CHS_CYL_H 0x15 //CHS:柱面号高字节(C)
#define ATA_IO_DEVICE_HEAD 0x16 //CHS:磁头号(H)
#define ATA_IO_LBA_0_7 0x13 //LBA: 0- 7位
#define ATA_IO_LBA_8_15 0x14 //LBA: 8-15位
#define ATA_IO_LBA_16_23 0x15 //LBA:16-23位
#define ATA_IO_LBA_24_27 0x16 //LBA:24-27位
#define ATA_IO_STATUS 0x17 //读状态
#define ATA_IO_CMD 0x17 //写命令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -