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

📄 rbccmd.h

📁 基于Embest开发环境
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __RBCCMD_H__
#define __RBCCMD_H__
/*
// RBC commands
*/
#define RBC_CMD_FORMAT					0x04
#define RBC_CMD_READ10					0x28
#define RBC_CMD_READCAPACITY				0x25
#define RBC_CMD_STARTSTOPUNIT				0x1B
#define RBC_CMD_SYNCCACHE				0x35
#define RBC_CMD_VERIFY10				0x2F
#define RBC_CMD_WRITE10					0x2A

/*
// SPC-2 commands
*/
#define SPC_CMD_INQUIRY					0x12
#define SPC_CMD_MODESELECT6				0x15
#define SPC_CMD_MODESENSE6				0x1A
#define SPC_CMD_PERSISTANTRESERVIN			0x5E
#define SPC_CMD_PERSISTANTRESERVOUT			0x5F
#define SPC_CMD_PRVENTALLOWMEDIUMREMOVAL		0x1E
#define SPC_CMD_RELEASE6				0x17
#define SPC_CMD_REQUESTSENSE				0x03
#define SPC_CMD_RESERVE6				0x16
#define SPC_CMD_TESTUNITREADY				0x00
#define SPC_CMD_WRITEBUFFER				0x3B
#define SPC_CMD_READLONG				0x23


typedef union {
    struct 
    {
        INT8    Type;
        INT8    Index;
    } Descriptor;

    struct 
    {
        INT8 tx0;  // MSB for 8051 Keil C
        INT8 tx1;   
        INT8 endp;   
        INT8 c0;   // LSB for 8051 Keil C
    } chars;

    struct 
    {
        INT8 c3;  // MSB for 8051 Keil C
        INT8 c2;   
        INT8 c1;   
        INT8 c0;   // LSB for 8051 Keil C
    } chars0;

    struct
    {
        INT16 i1;    // MSW for 8051 keil C
        INT16 i0;    // LSW for 8051 Keil C
    } ints;

    INT32 u0;

} FLEXI_INT32;

typedef union  {
    struct 
    {
        INT8 c1;   // MSB for 8051 Keil C
        INT8 c0;   // LSB for 8051 Keil C
    } chars;

    INT16 i0;
} FLEXI_INT16, * PFLEXI_INT16;

/*
// ATAPI Command Descriptor Block
*/

typedef struct _READ_10 {
		BYTE OperationCode;
		BYTE Reserved1;
		BYTE LBA_3;
		BYTE LBA_2;
        BYTE LBA_1;
		BYTE LBA_0;
		BYTE Reserved2;
		BYTE XferLen_1;
		BYTE XferLen_0;
		BYTE Reserved3[3];
} READ_10, * PREAD_10;



typedef struct _WRITE_10 {
		BYTE OperationCode;
		BYTE Reserved1;
		BYTE LBA_3;
		BYTE LBA_2;
        BYTE LBA_1;
		BYTE LBA_0;
		BYTE Reserved2;
		BYTE XferLen_1;
		BYTE XferLen_0;
		BYTE Reserved3[3];
} WRITE_10, *PWRITE_10;

typedef struct _MODE_SENSE_10 {
		BYTE OperationCode;
		BYTE Reserved1;
		BYTE PageCode;// : 6;
		BYTE Pc;// : 2;
		BYTE Reserved2[4];
		BYTE ParameterListLengthMsb;
		BYTE ParameterListLengthLsb;
		BYTE Reserved3[3];
} MODE_SENSE_10, *PMODE_SENSE_10;

typedef struct _MODE_SELECT_10 {
		BYTE OperationCode;
		BYTE Reserved1;// : 4;
		BYTE PFBit;// : 1;
		BYTE Reserved2;// : 3;
		BYTE Reserved3[5];
		BYTE ParameterListLengthMsb;
		BYTE ParameterListLengthLsb;
		BYTE Reserved4[3];
} MODE_SELECT_10, *PMODE_SELECT_10;
/*
////////////////////////////////////////////////////////////////////////////////////
// Command Descriptor Block
//      _RBC : Reduced Block Command
//      _SPC : SPC-2 SCSI primary Command - 2
////////////////////////////////////////////////////////////////////////////////////
*/

/*
// Generic
*/
/*
// Generic
*/
typedef struct _GENERIC_CDB {
	BYTE OperationCode;
    BYTE Reserved[14];//0618 原来是15
} GENERIC_CDB,*PGENERIC_CDB;

typedef struct _GENERIC_RBC {
	BYTE OperationCode;
    BYTE Reserved[8];
	BYTE Control;
} GENERIC_RBC,*PGENERIC_RBC;

/*
// format unit
*/
typedef struct _FORMAT_RBC {
	BYTE OperationCode;	/* 04H */
	BYTE VendorSpecific;
	BYTE Increment;// : 1;
	BYTE PercentorTime;// : 1;
	BYTE Progress;// : 1;
    BYTE Immediate;// : 1;
	BYTE VendorSpecific1;// : 4;
	BYTE Reserved2[2];
	BYTE Control;
} FORMAT_RBC, *PFORMAT_RBC;


/*
// Read Command
*/
typedef struct _READ_RBC {
	BYTE OperationCode;	/* 10H */
	BYTE VendorSpecific;
    	union{
        	struct
        	{
	        BYTE LBA_3;
	        BYTE LBA_2;
	        BYTE LBA_1;
	        BYTE LBA_0;
        	} LBA_W8 ;

       		INT32 LBA_W32;
    	      }LBA;
	BYTE Reserved;
    	//BYTE XferLength_1;
	//BYTE XferLength_0;
	INT16 XferLength;
    	BYTE Control;
    	//BYTE Reserved1[3];
} READ_RBC, *PREAD_RBC;


/*
// Read Capacity Data - returned in Big Endian format
*/
typedef struct _READ_CAPACITY_DATA {

    BYTE LBA_3;
    BYTE LBA_2;
    BYTE LBA_1;
    BYTE LBA_0;

    BYTE BlockLen_3;
    BYTE BlockLen_2;
    BYTE BlockLen_1;
    BYTE BlockLen_0;
} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
//////////////////////////////////////////////////
typedef struct _READ_LONG_CMD{
    BYTE OperationCode;
    BYTE LogicalUnitNum;//	:3;
    BYTE RES_1;//		:5;
    BYTE RES_2;
    BYTE RES_3;
    BYTE RES_4;
    BYTE RES_5;
    BYTE RES_6;
    INT16 AllocationLen;
    BYTE RES_7;
    BYTE RES_8;
    BYTE RES_9;
}READ_LONG_CMD, *PREAD_LONG_CMD;
typedef struct _READ_LONG {

    BYTE RES_1;
    BYTE RES_2;
    BYTE RES_3;
    BYTE CAP_LIST_LEN;
    
    BYTE LBA_3;
    BYTE LBA_2;
    BYTE LBA_1;
    BYTE LBA_0;

    BYTE Descripter;
    BYTE BlockLen_2;
    BYTE BlockLen_1;
    BYTE BlockLen_0;
} READ_LONG, *PREAD_LONG;
/*
// Read Capacity command
*/
typedef struct _READ_CAPACITY_RBC {
	BYTE                OperationCode;	/* 10H */
   	union  {
		FLEXI_INT32		l0[2];
        	INT32               l[2];
        	READ_CAPACITY_DATA  CapData;       /* Reserved area, here is used as temp*/
    		} tmpVar;

	BYTE                Control;
} READ_CAPACITY_RBC, *PREAD_CAPACITY_RBC;

typedef struct _READ_CAPACITY_RSP {
	INT32 LastLBA;
	INT32 BlockSize;

} READ_CAPACITY_RSP, *PREAD_CAPACITY_RSP;
/*
// START_STOP_UNIT
*/
typedef struct _START_STOP_RBC {
    BYTE OperationCode;    /*1BH*/
    BYTE Immediate;//: 1;
    BYTE Reserved1;// : 7;
    BYTE Reserved2[2];
	union _START_STOP_FLAGS
    {
        struct
        {
            BYTE Start         ;// : 1;
            BYTE LoadEject      ;//: 1;
            BYTE Reserved3      ;//: 2;
            BYTE PowerConditions;//: 4;
        } bits0;

        struct
        {
            BYTE MediumState    ;//: 2;
            BYTE Reserved3      ;//: 2;
            BYTE PowerConditions;//: 4;
        } bits1;
    } Flags;
    BYTE Control;
} START_STOP_RBC, *PSTART_STOP_RBC;

/*
// Synchronize Cache
*/
typedef struct _SYNCHRONIZE_CACHE_RBC {

	BYTE OperationCode;    /* 0x35 */
	BYTE Reserved[8];
	BYTE Control;

} SYNCHRONIZE_CACHE_RBC, *PSYNCHRONIZE_CACHE_RBC;

/*
// Write Command
*/
typedef struct _WRITE_RBC {
    BYTE OperationCode;	/* 2AH      */
    //BYTE Reserved0 : 3;
    //BYTE FUA : 1;
    //BYTE Reserved1 : 4;
    BYTE VendorSpecific;
    union{
	 struct
         {
	        BYTE LBA_3;
	        BYTE LBA_2;
	        BYTE LBA_1;
	        BYTE LBA_0;
          } LBA_W8 ;

	 INT32 LBA_W32;
	}   LBA;
    BYTE Reserved2;
    INT16 XferLength;
    BYTE Control;
} WRITE_RBC, *PWRITE_RBC;

/*
// VERIFY Command
*/
typedef struct _VERIFY_RBC {
    BYTE OperationCode;	/* 2FH */
    BYTE Reserved0;
	BYTE LBA_3;			/* Big Endian */
	BYTE LBA_2;
	BYTE LBA_1;
	BYTE LBA_0;
	BYTE Reserved1;
    BYTE VerifyLength_1;		/* Big Endian */
	BYTE VerifyLength_0;
	BYTE Control;
} VERIFY_RBC, *PVERIFY_RBC;


/*
//***********************************************************************************
// SPC-2 of SCSI-3 commands
//***********************************************************************************
*/

/*
// INQUIRY Command
*/
typedef struct _INQUIRY_SPC {
	BYTE OperationCode;	/* 12H */
	BYTE EnableVPD;//:1 ;
    BYTE CmdSupportData;//:1 ;
	BYTE Reserved0;//:6 ;
	BYTE PageCode;
	BYTE Reserved1;
	BYTE AllocationLen;

⌨️ 快捷键说明

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