📄 ch375.h
字号:
INT8 LBA_0;
INT8 Descripter;
INT8 BlockLen_2;
INT8 BlockLen_1;
INT8 BlockLen_0;
} READ_LONG, *PREAD_LONG;
/*
// START_STOP_UNIT
*/
typedef struct _START_STOP_RBC {
INT8 OperationCode; /*1BH*/
INT8 Immediate: 1;
INT8 Reserved1 : 7;
INT8 Reserved2[2];
union _START_STOP_FLAGS
{
struct
{
INT8 Start : 1;
INT8 LoadEject : 1;
INT8 Reserved3 : 2;
INT8 PowerConditions: 4;
} bits0;
struct
{
INT8 MediumState : 2;
INT8 Reserved3 : 2;
INT8 PowerConditions: 4;
} bits1;
} Flags;
INT8 Control;
} 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;
/*
//***********************************************************************************
// SPC-2 of SCSI-3 commands
//***********************************************************************************
*/
typedef struct _STD_INQUIRYDATA {
INT8 DeviceType : 5;
INT8 Reserved0 : 3;
INT8 Reserved1 : 7;
INT8 RemovableMedia : 1;
INT8 Reserved2;
INT8 Reserved3 : 5;
INT8 NormACA : 1;
INT8 Obsolete0 : 1;
INT8 AERC : 1;
INT8 Reserved4[3];
INT8 SoftReset : 1;
INT8 CommandQueue : 1;
INT8 Reserved5 : 1;
INT8 LinkedCommands : 1;
INT8 Synchronous : 1;
INT8 Wide16Bit : 1;
INT8 Wide32Bit : 1;
INT8 RelativeAddressing : 1;
INT8 VendorId[8];
INT8 ProductId[16];
INT8 ProductRevisionLevel[4];
/*// Above is 36 bytes// can be tranmitted by Bulk*/
INT8 VendorSpecific[20];
INT8 InfoUnitSupport : 1;
INT8 QuickArbitSupport : 1;
INT8 Clocking : 2;
INT8 Reserved6 : 4;
INT8 Reserved7 ;
INT16 VersionDescriptor[8] ;
INT8 Reserved8[22];
} STD_INQUIRYDATA, *PSTD_INQUIRYDATA;
typedef struct _SERIALNUMBER_PAGE {
INT8 DeviceType : 5;
INT8 DeviceTypeQualifier : 3;
INT8 PageCode ;
INT8 Reserved0 ;
INT8 PageLength ;
INT8 SerialNumber[24] ;
}VPD_SERIAL_PAGE,* PVPD_SERIAL_PAGE;
#define ASCII_ID_STRING 32
typedef struct _ID_DESCRIPTOR {
INT8 CodeSet : 4;
INT8 Reserved0 : 4;
INT8 IDType : 4;
INT8 Association : 2;
INT8 Reserved1 : 2;
INT8 Reserved2;
INT8 IDLength ;
INT8 AsciiID[ASCII_ID_STRING];
} ASCII_ID_DESCRIPTOR,* PASCII_ID_DESCRIPTOR;
typedef struct _DEVICE_ID_PAGE
{
INT8 DeviceType : 5;
INT8 DeviceTypeQualifier : 3;
INT8 PageCode ;
INT8 Reserved0 ;
INT8 PageLength ;
ASCII_ID_DESCRIPTOR AsciiIdDescriptor[1];
} VPD_DEVICE_ID_PAGE, * PVPD_DEVICE_ID_PAGE;
typedef struct _READ_CAPACITY_RSP {
INT32 LastLBA;
INT32 BlockSize;
} READ_CAPACITY_RSP, *PREAD_CAPACITY_RSP;
/*
// Mode Select
*/
typedef struct _MODE_SELECT_SPC {
INT8 OperationCode; /* 15H */
INT8 SavePage : 1 ;
INT8 Reseved0 : 3 ;
INT8 PageFormat : 1 ;
INT8 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 */
INT8 Reseved0 : 3 ;
INT8 DisableBlockDescriptor : 1 ;
INT8 Reserved0 : 4 ;
INT8 PageCode:6 ;
INT8 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;
/*
// Define Device Capabilities page.
*/
typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
INT8 PageCode : 6;
INT8 Reserved : 1;
INT8 PageSavable : 1;
INT8 PageLength;
INT8 WriteCacheDisable : 1;
INT8 Reserved1 : 7;
INT8 LogicalBlockSize[2];
INT8 NumberOfLogicalBlocks[5];
INT8 PowerPerformance;
INT8 Lockable : 1;
INT8 Formattable : 1;
INT8 Writable : 1;
INT8 Readable : 1;
INT8 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];
INT8 Prevent;
//INT8 Reserved1:6 ;
//INT8 Control;
} MEDIA_REMOVAL_SPC, *PMEDIA_REMOVAL_SPC;
/*
// Request Sense
*/
typedef struct _REQUEST_SENSE_SPC {
INT8 OperationCode; /* 03H */
INT8 Reserved[3];
INT8 AllocationLen;
INT8 Control;
} REQUEST_SENSE_SPC, *PREQUEST_SENSE_SPC;
typedef struct _REQUEST_SENSE_DATA {
INT8 ResponseCode : 7;
INT8 Valid : 1;
INT8 SegmentNum;
INT8 SenseKey : 4;
INT8 Reserved0 : 1;
INT8 WrongLenIndicator : 1;
INT8 EndofMedium : 1;
INT8 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;
INT8 ASC;
INT8 ASCQ;
INT8 FieldReplacableUnitCode;
INT8 SenseKeySpec_0 : 7;
INT8 SenseKeySpecValid : 1;
INT8 SenseKeySpec_1;
INT8 SenseKeySpec_2;
} REQUEST_SENSE_DATA, *PREQUEST_SENSE_DATA;
/*
// 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 */
INT8 Mode:4 ;
INT8 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;
START_STOP_RBC RbcCdb_OnOffUnit;
SYNCHRONIZE_CACHE_RBC RbcCdb_SyncCache;
// SPC-2 commands
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
MODE_SELECT_10 CmdModeSel10;
MODE_SENSE_10 CmdModeSen10;
//////////////////////////////////////
READ_LONG_CMD SpcCdb_ReadLong;
} CDB_RBC, *PCDB_RBC;
//***********************************************
//***********************************************////
#define CBW_SIGNATURE 0x55534243
#define CSW_SIGNATURE 0x55534253
typedef struct _COMMAND_BLOCK_WRAPPER{
INT32 dCBW_Signature;
INT32 dCBW_Tag;
INT32 dCBW_DataXferLen;
INT8 bCBW_Flag;
INT8 bCBW_LUN;
INT8 bCBW_CDBLen;
CDB_RBC cdbRBC;
} CBW, *PCBW;
typedef struct _COMMAND_STATUS_WRAPPER{
INT32 dCSW_Signature;
INT32 dCSW_Tag;
INT32 dCSW_DataResidue;
INT8 bCSW_Status;
} CSW, *PCSW;
typedef union _TPBULK_STRUC {
CBW TPBulk_CommandBlock;
CSW TPBulk_CommandStatus;
}TPBLK_STRUC, * PTPBLK_STRUC;
//unsigned char TPBulk_GetMaxLUN(void);
unsigned char mCH375Init(void );
unsigned char mWaitInterrupt(void );
void mDelay2uS(void );
void DelayMs(unsigned char nFactor);
unsigned long SwapINT32(unsigned long dData);
unsigned int SwapINT16(unsigned int dData);
unsigned char mInitDisk( void );
unsigned char ReadCapacity(void);
unsigned char RBC_Read(unsigned long lba,unsigned char len,unsigned char *pBuffer);
unsigned char RBC_Write(unsigned long lba,unsigned char len,unsigned char *pBuffer);
unsigned char SPC_READLONG(void);
unsigned char SPC_RequestSense(void);
unsigned char SPC_TestUnit(void);
unsigned char SPC_LockMedia(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -