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

📄 atapi.h

📁 COG-VP12864液晶屏驱动代码及对应RTC实例
💻 H
字号:
/*
********************************************************
// Copyright (c)2004 Ark Pioneer Microelectronics Ltd.,
// All Rights Reserved
//
// Filename:atapi.h
// Version:1.0
// Created:2004.01.13   By: Philip
********************************************************
*/

#ifndef _ATAPI_H_
#define _ATAPI_H_

#include "config.h"

/***********************************************/
//BLOCK 1 SPACE ALLOCATION

#define PASSWORD_PAGE			0
#define FLASH_INFO_PAGE			1
#define PARTITION_INFO_PAGE		2
#define BACKUP_INDEX_PAGE		3
#define BAD_INDEX_PAGE			4
#define PRODUCT_INFO_PAGE		5
#define INQUIRY_INFO_PAGE		6

// States
#define UNCONFIGURED        0
#define WAIT_FOR_CBW        1
#define WAIT_TO_SEND_CSW    2
#define WAIT_FOR_OUT_DATA   3
#define WAIT_FOR_IN_DATA    4

// Mapping of DA and CS numbers to port pins

// Change bit f to bit t in x
// #define CBIT(in, f, t)  ((in & (1<<f))?(1<<t):0)
// #define DA(x)  (CBIT(x, 0, 3) | CBIT(x, 1, 5) | CBIT(x, 2, 4))
// #define CS(x)  (x << 1)
#define DA(x)	((x & 3) | ((x & 4) << (5-2)))
#define CS(x)	(x << 6)

// 2004.09.02, philip add
// We have sent USBS when processing write_10, so we return this.
#define USBS_NO_SEND        0xff

#define USBS_PASSED			0
#define USBS_FAILED			1

#define READ_ONLY			1
#define READ_AND_WRITE		0

// Local defines from the mass storage class spec
#define CBW_TAG						4
#define CBW_DATA_TRANSFER_LEN_LSB  	8
#define CBW_DATA_TRANSFER_LEN_MSB  	9
#define CBW_FLAGS				  	12
#define	CBW_FLAGS_DIR_BIT			0x80
#define CBW_LUN					  	13
#define CBW_CBW_LEN		  			14
#define CBW_COMMAND                 15
#define CBW_CBW_LEN_MASK  			0x1f

#define CBW_DATA_START				15  // CBW head block length

#define EXTENDED_COMMAND_PARAMETER	17

//++

// 2004.08.31, philip add

// extended command byte offset
#define EXTENDED_FLASH_INDEX_BYTE       (0x11)    // decimal 17

// extended command parameter -- block index,
// it contains 2 bytes 
#define EXTENDED_BLOCK_INDEX_BYTE       (0x12)    // decimal 18  
#define EXTENDED_BLOCK_INDEX_HWORD      (0x09)

// extended command parameter -- page index,
// it contains 1 byte
#define EXTENDED_PAGE_INDEX_BYTE        (0x14)    // decimal 20
#define EXTENDED_PAGE_INDEX_WORD        (0x05)

//--

#define USB_MS_RBC_SUBCLASS			1
#define USB_MS_CD_ROM_SUBCLASS		2
#define USB_MS_SCSI_TRANSPARENT_SUBCLASS		6

// Local defines for the mass storage device
#define PROCESS_CBW_TIMEOUT_RELOAD  0x7000
#define MAX_BULK_PACKET_SIZE		0x40

#define PIO_ADDR_COMMAND 7
#define PIO_ADDR_DATA    0

#define ATAPI_STATUS_BUSY_BIT	0x80
#define ATAPI_STATUS_DRDY_BIT	0x40
#define ATAPI_STATUS_DF_BIT		0x20
#define ATAPI_STATUS_DSC_BIT	0x10
#define ATAPI_STATUS_DRQ_BIT	0x08
#define ATAPI_STATUS_CORR_BIT	0x04
#define ATAPI_STATUS_INDEX_BIT	0x02
#define ATAPI_STATUS_ERROR_BIT	0x01

#define ATA_SECTOR_SIZE			0x200

#define IDE_COMMAND_ID_DEVICE			0xec
#define IDE_ID_TOTAL_SECTORS_MSW		60*2
#define IDE_ID_TOTAL_SECTORS_LSW		61*2
#define ATAPI_INQUIRY_SERIAL 			10*2
#define ATAPI_INQUIRY_SERIAL_LEN 		12
#define ATAPI_COMMAND_ID_DEVICE			0xa1
#define ATAPI_COMMAND_ATAPI_PACKET		0xa0
#define ATAPI_COMMAND_SOFT_RESET		0x08
#define ATAPI_COMMAND_CHECK_POWER		0xe5
#define ATAPI_COMMAND_EXEC_DIAG			0x90
#define ATAPI_COMMAND_IDLE				0xe3
#define ATAPI_COMMAND_IDLE_IMMED		0xe1
#define ATAPI_COMMAND_NOP				0x00
#define ATAPI_COMMAND_SERVICE			0xa2
#define ATAPI_COMMAND_SET_FEATURES		0xef
#define ATAPI_COMMAND_SLEEP				0xe6
#define ATAPI_COMMAND_STANDBY			0xe2
#define ATAPI_COMMAND_STANDBY_IMMED		0xe0

#define ATAPI_PACKET_LOAD_UNLOAD		0xa6

#define ATAPI_CONTROL_REG_SOFT_RESET	4
#define ATAPI_CONTROL_REG_DEFAULT		8

// Converted RBC commands
#define ATA_COMMAND_READ_10  						0x20 
#define ATA_COMMAND_WRITE_10  						0x30 
#define ATA_COMMAND_VERIFY_10	  					0x40 

// Still unconverted RBC commands
#define ATA_COMMAND_INQUIRY 						0x12 
#define ATA_COMMAND_MODE_SELECT_6  					0x15 
#define ATA_COMMAND_MODE_SENSE_6  					0x1A  
#define ATA_COMMAND_PREVENT_ALLOW_MEDIUM_REMOVAL 	0x1E 
#define ATA_COMMAND_START_STOP_UNIT 				0x1B 
#define ATA_COMMAND_TEST_UNIT_READY 				0x00  
#define ATA_COMMAND_WRITE_BUFFER 					0x3B  

// Optional RBC commands
#define ATA_COMMAND_NOP			 					0x00
#define ATA_COMMAND_FORMAT_UNIT 					0x04 
#define ATA_COMMAND_PERSISTENT_RESERVE_IN 			0x5E 
#define ATA_COMMAND_PERSISTENT_RESERVE_OUT 			0x5F 
#define ATA_COMMAND_RELEASE_6  						0x17  
#define ATA_COMMAND_REQUEST_SENSE 					0x03  
#define ATA_COMMAND_RESERVE_6  						0x16  
#define ATA_COMMAND_SYNCHRONIZE_CACHE 				0x35 

// Fields in the INQUIRY
#define SCSI_INQUIRY_DEVICE_CLASS       0
#define SCSI_INQUIRY_REMOVABLE_BIT      0x80
#define SCSI_INQUIRY_REMOVABLE_BYTE     1
#define ATAPI_INQUIRY_REMOVABLE_BYTE    0
#define SCSI_INQUIRY_DATA_FORMAT        3
#define SCSI_INQUIRY_MANUFACTURER       8
#define ATAPI_INQUIRY_MANUFACTURER      27
#define SCSI_INQUIRY_MANUFACTURER_LEN   24
#define ATAPI_INQUIRY_REVISION          73
#define SCSI_INQUIRY_REVISION           32
#define SCSI_INQUIRY_REVISION_LEN       4

// Local ATAPI defines -- Command register block
#define ATAPI_DATA_REG			(DA(0)|CS(2))
#define ATAPI_ERROR_REG			(DA(1)|CS(2))
#define ATAPI_FEATURE_REG		(DA(1)|CS(2))
#define ATAPI_INT_CAUSE_REG		(DA(2)|CS(2))
#define ATAPI_BYTE_COUNT_LSB	(DA(4)|CS(2))
#define ATAPI_BYTE_COUNT_MSB	(DA(5)|CS(2))
#define ATAPI_DRIVESEL_REG		(DA(6)|CS(2))
#define ATAPI_STATUS_REG		(DA(7)|CS(2))
#define ATAPI_COMMAND_REG		(DA(7)|CS(2))
#define ATAPI_NULL_REG			(DA(7)|CS(3))

// Local ATAPI defines -- Control register block
#define ATAPI_ALT_STATUS_REG	(DA(6)|CS(1))
#define ATAPI_CONTROL_REG		(DA(6)|CS(1))

// IDE registers -- Overlay on the ATAPI register space
#define ATA_DATA_REG			(DA(0)|CS(2))
#define ATA_ERROR_REG			(DA(1)|CS(2))
#define ATA_SECTOR_COUNT_REG	(DA(2)|CS(2))
#define ATA_LBA_LSB_REG			(DA(3)|CS(2))
#define ATA_LBA_2SB_REG			(DA(4)|CS(2))
#define ATA_LBA_MSB_REG			(DA(5)|CS(2))
#define ATA_DRIVESEL_REG		(DA(6)|CS(2))
#define ATA_COMMAND_REG			(DA(7)|CS(2))

#endif

⌨️ 快捷键说明

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