⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ata.h

📁 u盘MCU端源代码,开发U盘的可以参考.
💻 H
📖 第 1 页 / 共 3 页
字号:
#define k_ata_command_packet                        0xa0
#define k_ata_command_read_buffer                   0xe4
#define k_ata_command_read_dma                      0xc8
#define k_ata_command_read_dma_ext                  0x25
#define k_ata_command_read_dma_queued               0xc7
#define k_ata_command_read_dma_queued_ext           0x26
#define k_ata_command_read_multiple                 0xc4
#define k_ata_command_read_multiple_ext             0x29
#define k_ata_command_read_native_max_address       0xf8
#define k_ata_command_read_native_max_address_ext   0x27
#define k_ata_command_read_sectors                  0x20
#define k_ata_command_read_sectors_ext              0x24
#define k_ata_command_read_verify_sectors           0x40
#define k_ata_command_read_verify_sectors_ext       0x42
#define k_ata_command_security_disable_password     0xf6
#define k_ata_command_security_erase_prepare        0xf3
#define k_ata_command_security_erase_unit           0xf4
#define k_ata_command_security_freeze               0xf5
#define k_ata_command_security_set_password         0xf1
#define k_ata_command_security_unlock               0xf2
#define k_ata_command_seek                          0x70
#define k_ata_command_service                       0xa2
#define k_ata_command_set_features                  0xeF
#define k_ata_command_set_max_address               0xf9
#define k_ata_command_set_max_address_ext           0x37
#define k_ata_command_set_multiple_mode             0xc6
#define k_ata_command_sleep                         0xe6
#define k_ata_command_smart_command                 0xb0
#define k_ata_command_standby                       0xe2
#define k_ata_command_standby_immediate             0xe0
#define k_ata_command_write_buffer                  0xe8
#define k_ata_command_write_dma                     0xcA
#define k_ata_command_write_dma_ext                 0x35
#define k_ata_command_write_dma_queued              0xcc
#define k_ata_command_write_dma_queued_ext          0x36
#define k_ata_command_write_multiple                0xc5
#define k_ata_command_write_multiple_ext            0x39
#define k_ata_command_write_sectors                 0x30
#define k_ata_command_write_sectors_ext             0x34

//------------------------------------------------------------------------------
// legacy nemae from the 201 code to facilitate code reuse
#define x_msb_ata x_cf_msb_ata
#define x_lsb_ata x_cf_lsb_ata

//------------------------------------------------------------------------------
// some quick macros to aid readability
#define _ata_is_media_removable() (_lun_data(media) & kbm_lun_media_removable)
#define _ata_is_media_present() (_lun_data(media) & kbm_lun_media_present)

//------------------------------------------------------------------------------
// read/write access to ata registers
uint8 ata_register_rd(t_ata_register_ref) reentrant;
void  ata_register_wr(t_ata_register_ref, uint8) reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ata_detect_media(void) reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ata_idle_immediate(void) reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ata_standby_immediate(void) reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ata_sleep(void) reentrant;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
t_result ata_wait_status_with_timeout(uint8 mask, uint8 val, uint16 ticks, uint8 *statusp) reentrant;
t_result ata_wait_irq_with_timeout(uint16 ticks) reentrant;

// ----------------------------------------------------------------------------
// ata identify device general config (word 0)
// ----------------------------------------------------------------------------
#define k_ata_iddev_general_config                  0
#define kbm_ata_iddev_gc_removable                  0x0080
#define kbm_ata_iddev_gc_fixed                      0x0040

// ----------------------------------------------------------------------------
#define k_ata_iddev_num_log_cyl                     1

// ----------------------------------------------------------------------------
// ata identify device specific configuration (word 2)
// ----------------------------------------------------------------------------
#define k_ata_iddev_specific_config                 2
#define k_ata_iddev_sc_sf_spinup_incomplete         0x37c8
#define k_ata_iddev_sc_sf_spinup_complete           0x738C
#define k_ata_iddev_sc_no_sf_spinup_incomplete      0x8c73
#define k_ata_iddev_sc_no_sf_spinup_complete        0xc837

// ----------------------------------------------------------------------------
// ata identify device number of logical heads word
// ----------------------------------------------------------------------------
#define k_ata_iddev_num_log_hds                     3

// ----------------------------------------------------------------------------
// ata identify device number of logical sectors per logical track
// ----------------------------------------------------------------------------
#define k_ata_iddev_num_log_sec_per_log_track       6

// ----------------------------------------------------------------------------
// ata identify device serial number (words 10-19)
// ----------------------------------------------------------------------------
#define k_ata_iddev_serial_start                    10
#define k_ata_iddev_serial_length                   20 // asci chars... not words!

// ----------------------------------------------------------------------------
// burst size for read/write multiple
// ----------------------------------------------------------------------------
#define k_ata_iddev_multi_burst_size                47

// ----------------------------------------------------------------------------
// ata identify device capabilities (word 49, 50)
// ----------------------------------------------------------------------------
#define k_ata_iddev_caps_l                          49
#define k_ata_iddev_caps_h                          50
#define kbm_ata_iddev_caps_timer_values_per_spec    0x2000
#define kbm_ata_iddev_caps_support_iordy            0x0800
#define kbm_ata_iddev_caps_disable_iordy            0x0400
#define kbm_ata_iddev_caps_support_lba              0x0200
#define kbm_ata_iddev_caps_support_dma              0x0100

// dev_caps_50
#define kbm_ata_iddev_caps_min_standby_timer        0x0001

// ----------------------------------------------------------------------------
// PIO Data Transfer Cycle Timing Mode for device (obsolete in ATA-6)
// ----------------------------------------------------------------------------
#define k_ata_iddev_pio_mode                        51
#define k_ata_iddev_pio_mode_0                      0x0000
#define k_ata_iddev_pio_mode_1                      0x0100
#define k_ata_iddev_pio_mode_2                      0x0200
#define k_ata_iddev_pio_mode_3                      0x0300
#define k_ata_iddev_pio_mode_4                      0x0400


// ----------------------------------------------------------------------------
// valid fields flags (word 53)
// ----------------------------------------------------------------------------
#define k_ata_iddev_valid_fields                    53
#define kbm_ata_iddev_valid_fields_cur_log_chs_cap  0x0001
#define kbm_ata_iddev_valid_fields_pio_mwdma_timing 0x0002
#define kbm_ata_iddev_valid_fields_udma_modes       0x0004


// ----------------------------------------------------------------------------
// current num logical cylinders (word 54)
// ----------------------------------------------------------------------------
#define k_ata_iddev_cur_log_cyl                     54

// ----------------------------------------------------------------------------
// num logical heads (word 55)
// ----------------------------------------------------------------------------
#define k_ata_iddev_cur_log_hds                     55

// ----------------------------------------------------------------------------
// num logical sectors per track (word 56)
// ----------------------------------------------------------------------------
#define k_ata_iddev_cur_log_sec_per_trk             56

// ----------------------------------------------------------------------------
// currect sector capacity (word 57-58)
// ----------------------------------------------------------------------------
#define k_ata_iddev_cur_sector_cap_l                57
#define k_ata_iddev_cur_sector_cap_h                58

// ----------------------------------------------------------------------------
// multiple sector setting (word 59)
// ----------------------------------------------------------------------------
#define k_ata_iddev_multiple_sector_settings        59
#define kbm_ata_iddev_multiple_sector_setting_valid 0x0100

// ----------------------------------------------------------------------------
// total user addressable sectors (lba only)  (word 60-61)
// ----------------------------------------------------------------------------
#define k_ata_iddev_total_user_addressable_sectors_l 60
#define k_ata_iddev_total_user_addressable_sectors_h 61

// ----------------------------------------------------------------------------
// ata identify device multiword dma modes supported (word 63)
// ----------------------------------------------------------------------------
#define k_ata_iddev_mwdma_mode_support              63
#define kbm_ata_iddev_mwdma_mode_0_supported        0x0001
#define kbm_ata_iddev_mwdma_mode_1_supported        0x0002
#define kbm_ata_iddev_mwdma_mode_2_supported        0x0004
#define kbm_ata_iddev_mwdma_mode_0_selected         0x0100
#define kbm_ata_iddev_mwdma_mode_1_selected         0x0200
#define kbm_ata_iddev_mwdma_mode_2_selected         0x0400

// ----------------------------------------------------------------------------
// ata pio and mwdma cycle times
// ----------------------------------------------------------------------------
#define k_ata_iddev_pio_mode_support                64
#define k_ata_iddev_min_mwdma_cycles                65
#define k_ata_iddev_mfr_recommened_mwdma_cycles     66
#define k_ata_iddev_min_pio_xfer_cycle_no_flow      67
#define k_ata_iddev_min_pio_xfer_cycle_flow         68

// ----------------------------------------------------------------------------
// command/feature set support (word 82-84)
// command/feature set enabled (word 85-87)
// ----------------------------------------------------------------------------

#define k_ata_dev_cmdset_support_1                          82
#define k_ata_dev_cmdset_enabled_1                          85
#define kbm_ata_iddev_cmd_nop                               0x4000
#define kbm_ata_iddev_cmd_read_buffer                       0x2000
#define kbm_ata_iddev_cmd_write_buffer                      0x1000
#define kbm_ata_iddev_host_protected_area                   0x0400
#define kbm_ata_iddev_cmd_device_reset                      0x0200
#define kbm_ata_iddev_service_intrpt                        0x0100
#define kbm_ata_iddev_release_intrpt                        0x0080
#define kbm_ata_iddev_cmd_look_ahead                        0x0040
#define kbm_ata_iddev_cmd_write_cache                       0x0020
#define kbm_ata_iddev_fs_packet                             0x0010
#define kbm_ata_iddev_fs_power_mgmt                         0x0008
#define kbm_ata_iddev_fs_removable_media                    0x0004
#define kbm_ata_iddev_fs_security_mode                      0x0002

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -