📄 ide.h
字号:
#ifndef __IDE_H__
#define __IDE_H__
#include<avr/io.h>
#define uint8 unsigned char
#define uint16 unsigned int
#define uint32 unsigned long
#define IDE_RST_DDR DDRG
#define IDE_RST_PORT PORTG
#define IDE_RST_PIN PG3
#define IDE_RST_L() IDE_RST_PORT &= ~(1<<IDE_RST_PIN)
#define IDE_RST_H() IDE_RST_PORT |= 1<<IDE_RST_PIN
#define IDE_DA0_DDR DDRD
#define IDE_DA0_PORT PORTD
#define IDE_DA0_PIN PD0
#define IDE_DA0_L() IDE_DA0_PORT &= ~(1<<IDE_DA0_PIN)
#define IDE_DA0_H() IDE_DA0_PORT |= 1<<IDE_DA0_PIN
#define IDE_DA1_DDR DDRD
#define IDE_DA1_PORT PORTD
#define IDE_DA1_PIN PD1
#define IDE_DA1_L() IDE_DA1_PORT &= ~(1<<IDE_DA1_PIN)
#define IDE_DA1_H() IDE_DA1_PORT |= 1<<IDE_DA1_PIN
#define IDE_DA2_DDR DDRD
#define IDE_DA2_PORT PORTD
#define IDE_DA2_PIN PD2
#define IDE_DA2_L() IDE_DA2_PORT &= ~(1<<IDE_DA2_PIN)
#define IDE_DA2_H() IDE_DA2_PORT |= 1<<IDE_DA2_PIN
#define IDE_CS0_DDR DDRD
#define IDE_CS0_PORT PORTD
#define IDE_CS0_PIN PD3
#define IDE_CS0_L() IDE_CS0_PORT &= ~(1<<IDE_CS0_PIN)
#define IDE_CS0_H() IDE_CS0_PORT |= 1<<IDE_CS0_PIN
#define IDE_CS1_DDR DDRD
#define IDE_CS1_PORT PORTD
#define IDE_CS1_PIN PD4
#define IDE_CS1_L() IDE_CS1_PORT &= ~(1<<IDE_CS1_PIN)
#define IDE_CS1_H() IDE_CS1_PORT |= 1<<IDE_CS1_PIN
#define IDE_DATA_L_DDR DDRA
#define IDE_DATA_L_PORT PORTA
#define IDE_DATA_L_PIN PINA
#define IDE_DATA_H_DDR DDRC
#define IDE_DATA_H_PORT PORTC
#define IDE_DATA_H_PIN PINC
#define IDE_WR_DDR DDRG
#define IDE_WR_PORT PORTG
#define IDE_WR_PIN PG0
#define IDE_WR_L() IDE_WR_PORT &= ~(1<<IDE_WR_PIN)
#define IDE_WR_H() IDE_WR_PORT |= 1<<IDE_WR_PIN
#define IDE_RD_DDR DDRG
#define IDE_RD_PORT PORTG
#define IDE_RD_PIN PG1
#define IDE_RD_L() IDE_RD_PORT &= ~(1<<IDE_RD_PIN)
#define IDE_RD_H() IDE_RD_PORT |= 1<<IDE_RD_PIN
//ATA命令
// CB_ERR ERROR REGISTER BITS
#define ATA_ER_BBK 0x80 // ATA bad block
#define ATA_ER_UNC 0x40 // ATA uncorrected error
#define ATA_ER_MC 0x20 // ATA media change
#define ATA_ER_IDNF 0x10 // ATA id not found
#define ATA_ER_MCR 0x08 // ATA media change request
#define ATA_ER_ABRT 0x04 // ATA command aborted
#define ATA_ER_NTK0 0x02 // ATA track 0 not found
#define ATA_ER_NDAM 0x01 // ATA address mark not found
// CB_DH bits 7-4 OF THE DEVICE/HEAD REGISTER
#define ATA_DH_DEV0 0xE0 // select device 0 LBA MODE
#define ATA_DH_DEV1 0xF0 // select device 1 LBA MODE
//ATA commands (from ATA-3),
#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
//******************************************************************************
//硬盘状态寄存器地址定义
#define IDE_Data 0x0
#define IDE_Err_Features 0x1
#define IDE_SecCount 0x2
#define IDE_SecNumber 0x3
#define IDE_CylinderL 0x4
#define IDE_CylinderH 0x5
#define IDE_Device_Head 0x6
#define IDE_Status_Command 0x7
//******************************************************************************
/*************************************************************
* D7 D6 D5 D4 D3 D2 D1 D0 *
BSY DRDY DWF DSC DRQ CORR IDX ERR *
* *
BSY: 驱动器忙; *
DRDY:驱动器准备好; *
DWF: 驱动器写失败; *
DSC: 寻道结束; *
DRQ: 请求服务,驱动器希望通过数据寄存器与CPU交换一字节数据 *
CORR:当可以纠正的读错误发生时,该位置1,数据传输将继续进行 *
IDX: 收到综引信号; *
ERR: 命令执行出错。 *
*************************************************************/
#define BSY 7
#define DRDY 6
#define DWF 5
#define DSC 4
#define DRQ 3
#define CORR 2
#define IDX 1
#define ERR 0
extern uint8 IDE_Init();
extern uint8 IDE_ReadOneSector(uint32 LBA,uint8 *buffer);
extern uint8 IDE_WriteOneSector(uint32 LBA,uint8 *buffer);
extern uint8 IDE_WaitBSY();
extern uint8 IDE_WaitDRQ();
extern void IDE_RegConvert(uint8 reg);
extern uint8 IDE_ReadREG(uint8 addr);
extern void IDE_WriteREG(uint8 addr, uint8 val);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -