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

📄 rbccmd.h

📁 基于lpc2210的CF存储卡&IDE硬盘演示实验源码
💻 H
📖 第 1 页 / 共 2 页
字号:
} START_STOP_RBC, *PSTART_STOP_RBC;

/*
// Synchronize Cache
*/
typedef struct _SYNCHRONIZE_CACHE_RBC {
//	INT8 OperationCode;    /* 0x35 */
	INT8 Reserved[8];
	INT8 Control;

} SYNCHRONIZE_CACHE_RBC, *PSYNCHRONIZE_CACHE_RBC;

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

//       INT32 LBA_W32;
//    }   LBA;
	INT8 Reserved2;
    INT8 XferLength_1;
	INT8 XferLength_0;
    INT8 Control;
} WRITE_RBC, *PWRITE_RBC;

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



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

typedef struct _INQUIRY_SPC {
//	INT8 OperationCode;	/* 12H */
	unsigned EnableVPD:1 ;
    unsigned CmdSupportData:1 ;
	unsigned Reserved0:6 ;
	INT8 PageCode;
	INT8 Reserved1;
	INT8 AllocationLen;
    INT8 Control;
} INQUIRY_SPC, *PINQUIRY_SPC;


typedef struct _STD_INQUIRYDATA {
    unsigned DeviceType : 5;
    unsigned Reserved0 : 3;

    unsigned Reserved1 : 7;
    unsigned RemovableMedia : 1;

    INT8 Reserved2;

    unsigned Reserved3 : 5;
    unsigned NormACA : 1;
    unsigned Obsolete0 : 1;
    unsigned AERC : 1;

    INT8 Reserved4[3];//7

    unsigned SoftReset : 1;
    unsigned CommandQueue : 1;
	unsigned Reserved5 : 1;
	unsigned LinkedCommands : 1;
	unsigned Synchronous : 1;
	unsigned Wide16Bit : 1;
	unsigned Wide32Bit : 1;
	unsigned RelativeAddressing : 1;

	INT8 VendorId[8];

	INT8 ProductId[16];//32

	INT8 ProductRevisionLevel[4];

/*
//  Above is 36 bytes
//  can be tranmitted by Bulk
*/

    INT8 VendorSpecific[20];//56
    unsigned InfoUnitSupport : 1;
    unsigned QuickArbitSupport : 1;
    unsigned Clocking : 2;
    unsigned Reserved6 : 4;

    INT8  Reserved7 ;//58
    INT16 VersionDescriptor[8] ;//74

    INT8 Reserved8[22];//96
    
} STD_INQUIRYDATA, *PSTD_INQUIRYDATA;//96

typedef struct _SERIALNUMBER_PAGE {
    unsigned DeviceType : 5;
    unsigned DeviceTypeQualifier : 3;

    INT8 PageCode ;
    INT8 Reserved0 ;

    INT8 PageLength ;//4
    INT8 SerialNumber[24] ;//28

}VPD_SERIAL_PAGE,* PVPD_SERIAL_PAGE;//28

#define ASCII_ID_STRING 32
typedef struct _ID_DESCRIPTOR {
	unsigned   CodeSet : 4;
	unsigned   Reserved0 : 4;

	unsigned   IDType : 4;
    unsigned   Association : 2;
    unsigned   Reserved1 : 2;

    INT8   Reserved2;

	INT8   IDLength ;//4
	INT8   AsciiID[ASCII_ID_STRING];//ASCII_ID_STRING=32
} ASCII_ID_DESCRIPTOR,* PASCII_ID_DESCRIPTOR;//36

typedef struct _DEVICE_ID_PAGE
{
    unsigned DeviceType : 5;
    unsigned DeviceTypeQualifier : 3;

    INT8 PageCode ;
    INT8 Reserved0 ;

    INT8 PageLength ;//4

    ASCII_ID_DESCRIPTOR   AsciiIdDescriptor[1];//40
} VPD_DEVICE_ID_PAGE, * PVPD_DEVICE_ID_PAGE;//40



/*
// Mode Select
*/
typedef struct _MODE_SELECT_SPC {
//	INT8 OperationCode;	/* 15H */
	unsigned SavePage : 1 ;
	unsigned Reseved0 : 3 ;
	unsigned PageFormat : 1 ;
	unsigned Reserved1 : 3 ;
	INT8 Reserved2[2];
	INT8 ParameterLen;
	INT8 Control;
} MODE_SELECT_SPC, * PMODE_SELECT_SPC;

/*
// Mode Sense
*/
typedef struct _MODE_SENSE_SPC {
//    INT8 OperationCode;	/* 1AH */
    unsigned Reseved0 : 3 ;
    unsigned DisableBlockDescriptor : 1 ;
    unsigned Reserved0 : 4 ;
    unsigned PageCode:6 ;
    unsigned PageControl : 2 ;
    INT8 Reserved1;
    INT8 ParameterLen;
    INT8 Control;
} MODE_SENSE_SPC, * PMODE_SENSE_SPC;

typedef struct _MODE_PARAMETER_HEAD {
    INT8 DataLen;
    INT8 MediumType;
    INT8 DeviceParameter;
    INT8 BlockDescriptorLen;
} MODE_PARAMETER_HEAD, * PMODE_PARAMETER_HEAD;//4

/*
// Define Device Capabilities page.
*/
typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
    unsigned PageCode : 6;
	unsigned Reserved : 1;
    unsigned PageSavable : 1;
    INT8 PageLength;
    unsigned WriteCacheDisable : 1;
    unsigned Reserved1 : 7;
    INT8 LogicalBlockSize[2];
    INT8 NumberOfLogicalBlocks[5];
    INT8 PowerPerformance;
    unsigned Lockable : 1;
    unsigned Formattable : 1;
    unsigned Writable : 1;
    unsigned Readable : 1;
    unsigned Reserved2 : 4;
    INT8 Reserved3;
}MODE_RBC_DEVICE_PARAMETERS_PAGE, *PMODE_RBC_DEVICE_PARAMETERS_PAGE;

/*
// prevent/allow medium removal
*/
typedef struct _MEDIA_REMOVAL_SPC {
//	INT8 OperationCode;    /* 1EH */
	INT8 Reserved0[3];
	unsigned Prevent:2 ;
	unsigned Reserved1:6 ;
	INT8 Control;
} MEDIA_REMOVAL_SPC, *PMEDIA_REMOVAL_SPC;//6

/*
// Request Sense
*/
typedef struct _REQUEST_SENSE_SPC {
//    INT8 OperationCode;    /* 03H */
	INT8 Reserved[3];
    INT8 AllocationLen;
    INT8 Control;
} REQUEST_SENSE_SPC, *PREQUEST_SENSE_SPC;//6 


typedef struct _READ_FORMAT_CAPACITIES{
	INT8 Reserved[3];
	INT8 Length;
	// Current/Maximum Capacity Descriptor 
	INT32 CapacityLBA;			/* Big Endian */
	unsigned Reserved1 :6;
	unsigned DescriptorCode :2;
    INT8 CapacityLength_2;		/* Big Endian */
	INT8 CapacityLength_1;
	INT8 CapacityLength_0;
	// Formattable Capacity Descriptor
	INT32 FormattableLBA;			/* Big Endian */
	INT8 Reserved2;
    INT8 FormattableLength_2;		/* Big Endian */
	INT8 FormattableLength_1;
	INT8 FormattableLength_0;

}READ_FORMAT_CAPACITIES,*PREAD_FORMAT_CAPACITIES;

typedef struct _REQUEST_SENSE_DATA {
    unsigned ResponseCode : 7;
    unsigned Valid : 1;

    INT8 SegmentNum;

    unsigned SenseKey : 4;
    unsigned Reserved0 : 1;
    unsigned WrongLenIndicator : 1;
    unsigned EndofMedium : 1;
    unsigned FileMark : 1;

    INT8 Info_0;
    INT8 Info_1;
    INT8 Info_2;
    INT8 Info_3;

    INT8 AdditionalSenseLen;

    INT8 CommandSpecInfo_0;
    INT8 CommandSpecInfo_1;
    INT8 CommandSpecInfo_2;
    INT8 CommandSpecInfo_3;//12

    INT8 ASC;
    INT8 ASCQ;
    INT8 FieldReplacableUnitCode;
    unsigned SenseKeySpec_0 : 7;
    unsigned SenseKeySpecValid : 1;
    INT8 SenseKeySpec_1;
    INT8 SenseKeySpec_2;

} REQUEST_SENSE_DATA, *PREQUEST_SENSE_DATA;//18 beyts

/*
// Test Unit Ready
*/
typedef struct _TEST_UNIT_SPC {
//	INT8 OperationCode;    /* 00H */
	INT8 Reserved[4];
	INT8 Control;
} TEST_UNIT_SPC, *PTEST_UNIT_SPC;

/*
// Write Buffer
*/
typedef struct _WRITE_BUFFER_SPC {
//    INT8 OperationCode;    /* 3BH */
    unsigned Mode:4 ;
    unsigned Reserved0:4 ;
	INT8 BufferID;
    INT8 BufferOff_2;
    INT8 BufferOff_1;
    INT8 BufferOff_0;
    INT8 ParameterLen_2;
    INT8 ParameterLen_1;
	INT8 ParameterLen_0;
    INT8 Control;
} WRITE_BUFFER_SPC, *PWRITE_BUFFER_SPC;

typedef union _CDB_RBC {
    GENERIC_CDB             Cdb_Generic;
    /*
    // RBC commands
    */
    GENERIC_RBC             RbcCdb_Generic;

    FORMAT_RBC              RbcCdb_Format;
	READ_RBC                RbcCdb_Read;
    READ_CAPACITY_RBC       RbcCdb_ReadCapacity;
    START_STOP_RBC          RbcCdb_OnOffUnit;
    SYNCHRONIZE_CACHE_RBC   RbcCdb_SyncCache;
    VERIFY_RBC              RbcCdb_Verify;
    WRITE_RBC               RbcCdb_Write;
	  
    /*
    // SPC-2 commands
    */
    INQUIRY_SPC             SpcCdb_Inquiry;
    MODE_SELECT_SPC         SpcCdb_ModeSelect;
    MODE_SENSE_SPC          SpcCdb_ModeSense;
    MEDIA_REMOVAL_SPC       SpcCdb_Remove;
    REQUEST_SENSE_SPC       SpcCdb_RequestSense;
    TEST_UNIT_SPC           SpcCdb_TestUnit;
    WRITE_BUFFER_SPC        SpcCdb_WriteBuffer;

    /*
    // ATAPI Commands
    */
    READ_10         CmdRead10;
    WRITE_10        CmdWrite10;
    MODE_SELECT_10  CmdModeSel10;
    MODE_SENSE_10   CmdModeSen10;
	
	READ_FORMAT_CAPACITIES RE_FM_Capacities;
} CDB_RBC, *PCDB_RBC;


#endif

⌨️ 快捷键说明

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